diff --git a/CMake/3rd.cmake b/CMake/3rd.cmake
deleted file mode 100644
index 781146111d48739671b35c98bb96ebff358809b4..0000000000000000000000000000000000000000
--- a/CMake/3rd.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-include(${VF_CMAKE_DIR}/3rd/boost.cmake)
-include(${VF_CMAKE_DIR}/3rd/gmock.cmake)
diff --git a/CMake/3rd/gmock.cmake b/CMake/3rd/gmock.cmake
deleted file mode 100644
index 712b99ca2271f1d3891114ff613a569a00fe03c4..0000000000000000000000000000000000000000
--- a/CMake/3rd/gmock.cmake
+++ /dev/null
@@ -1,17 +0,0 @@
-#################################################################################
-#  Links gmock to the current target.
-#  Note: gmock has to be build by the project itself (Located in 3rd).
-#################################################################################
-
-function (linkGMOCK)
-    vf_get_library_test_name(library_name)
-    target_link_libraries(${library_name} PRIVATE GTest::gmock_main)
-
-    if(BUILD_SHARED_LIBS)
-        # add compile option according to
-        # https://github.com/google/googletest/blob/master/googletest/README.md#as-a-shared-library-dll
-        set_target_properties(${library_name}
-                PROPERTIES
-                COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
-    endif()
-endfunction()
\ No newline at end of file
diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake
index 2bf2a979e6bbed32fc229e99739c79b601b007f2..cb9d2d8d7839a301aba09291cbcc78ede1c2adf4 100644
--- a/CMake/VirtualFluidsMacros.cmake
+++ b/CMake/VirtualFluidsMacros.cmake
@@ -20,7 +20,7 @@ endfunction()
 #################################################################################
 include(${VF_CMAKE_DIR}/CMakeSetCompilerFlags.cmake)
 include(${VF_CMAKE_DIR}/FileUtilities.cmake)
-include(${VF_CMAKE_DIR}/3rd.cmake)
+include(${VF_CMAKE_DIR}/3rd/boost.cmake)
 include(${VF_CMAKE_DIR}/Sanitizers.cmake)
 
 ###############################################################################################################
@@ -274,8 +274,19 @@ function(vf_add_tests)
         return()
     endif()
 
-    # get the test library name
-    vf_get_library_test_name(library_test_name)
+    set( options )
+    set( oneValueArgs NAME)
+    set( multiValueArgs)
+    cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+    if(DEFINED ARG_NAME) 
+        set(library_test_name "${ARG_NAME}Tests")
+        set(library_name "${ARG_NAME}")
+    else()
+        vf_get_library_test_name(library_test_name)
+        vf_get_library_name (library_name)
+    endif()
+
     vf_get_library_name (folder_name)
 
     status("Configuring test executable: ${library_test_name}")
@@ -297,7 +308,7 @@ function(vf_add_tests)
             PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
 
     # link tested library
-    target_link_libraries(${library_test_name} PRIVATE ${folder_name})
+    target_link_libraries(${library_test_name} PRIVATE ${library_name})
 
     # link tested library
     target_include_directories(${library_test_name} PRIVATE ${CMAKE_BINARY_DIR})
@@ -308,7 +319,15 @@ function(vf_add_tests)
     addAdditionalFlags(${library_test_name})
 
     # link googlemock
-    linkGMOCK()
+    target_link_libraries(${library_test_name} PRIVATE GTest::gmock_main)
+
+    if(BUILD_SHARED_LIBS)
+        # add compile option according to
+        # https://github.com/google/googletest/blob/master/googletest/README.md#as-a-shared-library-dll
+        set_target_properties(${library_test_name}
+                PROPERTIES
+                COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
+    endif()
 
     # add the target to ctest
     gtest_add_tests(TARGET ${library_test_name})
diff --git a/apps/cpu/ConcreteExtrusion/CMakeLists.txt b/apps/cpu/ConcreteExtrusion/CMakeLists.txt
index c56d8430b841bda1c538244243c866bdb4b299c1..9d9cc157c8bdd2ed6412979cd7fb32d37fc3e3e2 100644
--- a/apps/cpu/ConcreteExtrusion/CMakeLists.txt
+++ b/apps/cpu/ConcreteExtrusion/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(ConcreteExtrusion)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES ConcreteExtrusion.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES ConcreteExtrusion.cpp )
\ No newline at end of file
diff --git a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp
index e73ff544b59991bf95874e058e3df3b7113370a0..04edd1b5143140075a8051017a0679a83f393a79 100644
--- a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp
+++ b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp
@@ -251,7 +251,7 @@ void run(string configname)
          grid->setPeriodicX3(true);
         grid->setGhostLayerWidth(2);
 
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
 
         //////////////////////////////////////////////////////////////////////////
         // restart
diff --git a/apps/cpu/ConvectionOfVortex/CMakeLists.txt b/apps/cpu/ConvectionOfVortex/CMakeLists.txt
index 33d60676c7e0dfdde411c3c5b92a2534ea54fbfe..451ec8592414ed53083861ab216e24f8d9887ab7 100644
--- a/apps/cpu/ConvectionOfVortex/CMakeLists.txt
+++ b/apps/cpu/ConvectionOfVortex/CMakeLists.txt
@@ -3,6 +3,6 @@
 ########################################################
 PROJECT(ConvectionOfVortex)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES cov.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} FILES cov.cpp )
 
 
diff --git a/apps/cpu/ConvectionOfVortex/cov.cpp b/apps/cpu/ConvectionOfVortex/cov.cpp
index 102a1ad7d16fa7cd343449fd27fab73aae70c92f..bedb3da40e9d339faa9dcbc4fbd520e0edd25222 100644
--- a/apps/cpu/ConvectionOfVortex/cov.cpp
+++ b/apps/cpu/ConvectionOfVortex/cov.cpp
@@ -152,7 +152,7 @@ void run()
       if (myid==0) GbSystem3D::writeGeoObject(geoOutflow4.get(), pathname+"/geo/geoOutflow4", WbWriterVtkXmlASCII::getInstance());
       SPtr<D3Q27Interactor> outflowIntr4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow4, grid, outflowBC, Interactor3D::SOLID));
 
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M));
       InteractorsHelper intHelper(grid, metisVisitor);
       //intHelper.addInteractor(outflowIntr1);
       //intHelper.addInteractor(outflowIntr2);
diff --git a/apps/cpu/CouetteFlow/CMakeLists.txt b/apps/cpu/CouetteFlow/CMakeLists.txt
index 9f28e30c5aeb0722fb9d0b9b13a135ecae0f9799..3a2b634002b82edeeaa785a371ee9a2f153f0ea5 100644
--- a/apps/cpu/CouetteFlow/CMakeLists.txt
+++ b/apps/cpu/CouetteFlow/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(CouetteFlow)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES cflow.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES cflow.cpp )
\ No newline at end of file
diff --git a/apps/cpu/CouetteFlow/cflow.cpp b/apps/cpu/CouetteFlow/cflow.cpp
index 6c7e28f5abba629a7ad9c59204b70fb3d7e03574..f0a0b26fad1c99e8f7ad195503a10d31f0146845 100644
--- a/apps/cpu/CouetteFlow/cflow.cpp
+++ b/apps/cpu/CouetteFlow/cflow.cpp
@@ -187,7 +187,7 @@ void bflow(string configname)
 
       ////////////////////////////////////////////
       //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
       ////////////////////////////////////////////
       /////delete solid blocks
       if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
diff --git a/apps/cpu/DLR-F16-Porous/f16.cpp b/apps/cpu/DLR-F16-Porous/f16.cpp
index 08bafaf3df6cdb3c32a3592ea950bd3bc2c42474..1263e7752ce9d6d6f5dacbfd12a09a5b258506ed 100644
--- a/apps/cpu/DLR-F16-Porous/f16.cpp
+++ b/apps/cpu/DLR-F16-Porous/f16.cpp
@@ -33,8 +33,8 @@ void initPteBlock(SPtr<Grid3D> grid, SPtr<Block3D> block)
             for (int ix1=0; ix1<bcArray->getNX1(); ix1++)
             {
                D3Q27System::calcCompFeq(f, 0, 0, 0, 0);
-               distributions->setDistribution(f, ix1, ix2, ix3);
-               distributions->setDistributionInv(f, ix1, ix2, ix3);
+               distributions->setPostCollisionDistribution(f, ix1, ix2, ix3);
+               distributions->setPreCollisionDistribution(f, ix1, ix2, ix3);
             }
       block->setActive(true);
    }
diff --git a/apps/cpu/FallingSphere/CMakeLists.txt b/apps/cpu/FallingSphere/CMakeLists.txt
index 94eab3ae0601daaaf1dbe9053ec163058b88186b..6166198643b30304eb1a943d9454cad1a0b8a12d 100644
--- a/apps/cpu/FallingSphere/CMakeLists.txt
+++ b/apps/cpu/FallingSphere/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(FallingSphere)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES FallingSphere.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES FallingSphere.cpp )
diff --git a/apps/cpu/FallingSphere/FallingSphere.cpp b/apps/cpu/FallingSphere/FallingSphere.cpp
index f41524a5f6f5b163c6eaefeb386b9a76b892d196..7dfaedc9d93bffe1c159683152705b30f6f7c39a 100644
--- a/apps/cpu/FallingSphere/FallingSphere.cpp
+++ b/apps/cpu/FallingSphere/FallingSphere.cpp
@@ -59,7 +59,7 @@ int main(int argc, char *argv[])
     UbSystem::makeDirectory(outputPath);
     UbSystem::makeDirectory(outputPath + "/liggghts");
 
-    SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE));
+    SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
     
     SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
     if (myid == 0)
diff --git a/apps/cpu/FlowAroundCylinder/CMakeLists.txt b/apps/cpu/FlowAroundCylinder/CMakeLists.txt
index 7bd09c7189fdf892e76816f8fba4ba95bf3f0867..0fcac4f761ea1ec3d57ee367853a91ba199f03f2 100644
--- a/apps/cpu/FlowAroundCylinder/CMakeLists.txt
+++ b/apps/cpu/FlowAroundCylinder/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(cylinder)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES cylinder.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} FILES cylinder.cpp )
diff --git a/apps/cpu/FlowAroundCylinder/cylinder.cpp b/apps/cpu/FlowAroundCylinder/cylinder.cpp
index 0599060816ff806e087680d892be5232b1558930..5de3c69d02d6778c842144a37938362ca44f3826 100644
--- a/apps/cpu/FlowAroundCylinder/cylinder.cpp
+++ b/apps/cpu/FlowAroundCylinder/cylinder.cpp
@@ -206,7 +206,7 @@ void run(string configname)
          SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID));
 
          
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M));
+         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M));
          InteractorsHelper intHelper(grid, metisVisitor);
          intHelper.addInteractor(cylinderInt);
          intHelper.addInteractor(addWallYminInt);
diff --git a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt b/apps/cpu/HerschelBulkleyModel/CMakeLists.txt
index 537402905309fe65441d9b5fbe2d48523c55947f..d2499fb70e451de1c40c841135607aa1a6799e93 100644
--- a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt
+++ b/apps/cpu/HerschelBulkleyModel/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(HerschelBulkleyModel)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbflow.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbflow.cpp )
\ No newline at end of file
diff --git a/apps/cpu/HerschelBulkleyModel/hbflow.cpp b/apps/cpu/HerschelBulkleyModel/hbflow.cpp
index 67ed5404eebc1eeffe1e385ff42dc806c1588301..5e4e193c1b038d6d8ceec670f45381c0e2a8f32b 100644
--- a/apps/cpu/HerschelBulkleyModel/hbflow.cpp
+++ b/apps/cpu/HerschelBulkleyModel/hbflow.cpp
@@ -233,7 +233,7 @@ void bflow(string configname)
 
       ////////////////////////////////////////////
       //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
       ////////////////////////////////////////////
       /////delete solid blocks
       if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
diff --git a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt b/apps/cpu/HerschelBulkleySphere/CMakeLists.txt
index 69fe09a4f0eb5b11ecf15f3bd609c9afbf79cae6..87ecc61f0ce915be47d16b15133d155411067877 100644
--- a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt
+++ b/apps/cpu/HerschelBulkleySphere/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(HerschelBulkleySphere)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbsphere.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbsphere.cpp )
\ No newline at end of file
diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp
index 90ae44b62f18e412c4f3e0bd8ba88de56b01650a..79ff327a61c37542c3af2d1367b0df5c58d3a853 100644
--- a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp
+++ b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp
@@ -164,7 +164,7 @@ void bflow(string configname)
 
       ////////////////////////////////////////////
       //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
       ////////////////////////////////////////////
       //////////////////////////////////////////////////////////////////////////
       //restart
@@ -246,7 +246,7 @@ void bflow(string configname)
 
          ////////////////////////////////////////////
          //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY));
+         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
          ////////////////////////////////////////////
          /////delete solid blocks
          if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
diff --git a/apps/cpu/JetBreakup/CMakeLists.txt b/apps/cpu/JetBreakup/CMakeLists.txt
index 162e9c959fc27171e3f0d7e1df5e62eb6ff7ef87..9a21c8044d53cedaec4a27a37b420b687bd21132 100644
--- a/apps/cpu/JetBreakup/CMakeLists.txt
+++ b/apps/cpu/JetBreakup/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(JetBreakup)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES JetBreakup.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES JetBreakup.cpp )
\ No newline at end of file
diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp
index de2f5b95035f8a2b786848941a897ad65cb9cf61..e966ddcd5b24762d57fb8c88b52ec887bea9d8dc 100644
--- a/apps/cpu/JetBreakup/JetBreakup.cpp
+++ b/apps/cpu/JetBreakup/JetBreakup.cpp
@@ -272,7 +272,7 @@ void run(string configname)
         // grid->setPeriodicX3(true);
         grid->setGhostLayerWidth(2);
 
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
 
         //////////////////////////////////////////////////////////////////////////
         // restart
diff --git a/apps/cpu/LaminarTubeFlow/CMakeLists.txt b/apps/cpu/LaminarTubeFlow/CMakeLists.txt
index 32e8d2fd9231e40002e972f370a19ebec27d995b..508e3cc0399f6e332f542fe52454f0e81e21c0d1 100644
--- a/apps/cpu/LaminarTubeFlow/CMakeLists.txt
+++ b/apps/cpu/LaminarTubeFlow/CMakeLists.txt
@@ -1,7 +1,7 @@
 
 PROJECT(ltf)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES ltf.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES ltf.cpp )
 
 vf_get_library_name (library_name)
 target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU})
\ No newline at end of file
diff --git a/apps/cpu/LaminarTubeFlow/ltf.cpp b/apps/cpu/LaminarTubeFlow/ltf.cpp
index 53927b7378db9bfca0693c1808610e0d6b532d66..086e743df39a2a0ba4598a9ce5438bc7b2ca0393 100644
--- a/apps/cpu/LaminarTubeFlow/ltf.cpp
+++ b/apps/cpu/LaminarTubeFlow/ltf.cpp
@@ -110,7 +110,7 @@ void run(string configname)
       kernel->setBCSet(bcProc);
 
       //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M));
       //restart
       SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
       //SPtr<MPIIOMigrationSimulationObserver> migSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, pathname + "/mig", comm));
diff --git a/apps/cpu/LidDrivenCavity/CMakeLists.txt b/apps/cpu/LidDrivenCavity/CMakeLists.txt
index 2afa5ee83ada573e3e31a89a33386d593a5bc261..f878aa04d6b5d14dca518d1c638467f6495d7d64 100644
--- a/apps/cpu/LidDrivenCavity/CMakeLists.txt
+++ b/apps/cpu/LidDrivenCavity/CMakeLists.txt
@@ -1,4 +1,4 @@
 
 PROJECT(LidDrivenCavity)
 
-vf_add_library(NAME LidDrivenCavityCPU BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore FILES LidDrivenCavity.cpp)
+vf_add_library(NAME LidDrivenCavityCPU BUILDTYPE binary PRIVATE_LINK cpu_core FILES LidDrivenCavity.cpp)
diff --git a/apps/cpu/LiggghtsApp/CMakeLists.txt b/apps/cpu/LiggghtsApp/CMakeLists.txt
index f3a2d925f1d082c8f2e9e52e31d8179fe82c9235..f7b099fc25f800781aff631d098d4dd4dfe48359 100644
--- a/apps/cpu/LiggghtsApp/CMakeLists.txt
+++ b/apps/cpu/LiggghtsApp/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(LiggghtsApp)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES LiggghtsApp.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES LiggghtsApp.cpp )
diff --git a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp b/apps/cpu/LiggghtsApp/LiggghtsApp.cpp
index 5b3f27d2ef7f64fc692750d8480dafea4a69a030..825d63ea14f8bded7331990e9ffa428ae4c0b258 100644
--- a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp
+++ b/apps/cpu/LiggghtsApp/LiggghtsApp.cpp
@@ -75,7 +75,7 @@ int main(int argc, char *argv[])
     UbSystem::makeDirectory(outputPath);
     UbSystem::makeDirectory(outputPath + "/liggghts");
 
-    SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE));
+    SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
     
     SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
     if (myid == 0)
diff --git a/apps/cpu/Multiphase/CMakeLists.txt b/apps/cpu/Multiphase/CMakeLists.txt
index 0c7e43dcaf2185360c49ee78b86f34840b06b4df..2ce781c801fd0cac3770783919682b85ec511ad5 100644
--- a/apps/cpu/Multiphase/CMakeLists.txt
+++ b/apps/cpu/Multiphase/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(Multiphase)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow FILES Multiphase.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow FILES Multiphase.cpp )
diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp
index 07b5a661f2c6ead2c57d09b2c05869f86058d1ad..08f4ea8cdc9fa2fb2466617782790c2ffb40f645 100644
--- a/apps/cpu/Multiphase/Multiphase.cpp
+++ b/apps/cpu/Multiphase/Multiphase.cpp
@@ -125,7 +125,7 @@ void run(string configname)
         grid->setGhostLayerWidth(2);
 
        
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
 
         //////////////////////////////////////////////////////////////////////////
         // restart
diff --git a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt b/apps/cpu/MultiphaseDropletTest/CMakeLists.txt
index c48e517aaad9ff75f6245101ae0a433a2bd49886..e4f881190873e27a688b624803bc25ccc8fb4b9b 100644
--- a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt
+++ b/apps/cpu/MultiphaseDropletTest/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(MultiphaseDropletTest)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids  FILES droplet.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids  FILES droplet.cpp )
diff --git a/apps/cpu/MultiphaseDropletTest/droplet.cpp b/apps/cpu/MultiphaseDropletTest/droplet.cpp
index 1ae1d18996dfd0e3ae7854e349631ed141cbbc58..9474a1fe575d498c0930b554b4c77d064a418126 100644
--- a/apps/cpu/MultiphaseDropletTest/droplet.cpp
+++ b/apps/cpu/MultiphaseDropletTest/droplet.cpp
@@ -203,7 +203,7 @@ void run(string configname)
         grid->setPeriodicX3(true);
         grid->setGhostLayerWidth(2);
 
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
 
         //////////////////////////////////////////////////////////////////////////
         // restart
diff --git a/apps/cpu/Nozzle/CMakeLists.txt b/apps/cpu/Nozzle/CMakeLists.txt
index 9764934d46b39abca2ceda133e3434a78980f294..f72fcd0af885fc6577872fc92ce6d3b263ac2ab3 100644
--- a/apps/cpu/Nozzle/CMakeLists.txt
+++ b/apps/cpu/Nozzle/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(Nozzle)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleSinglePhase.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleSinglePhase.cpp )
diff --git a/apps/cpu/Nozzle/nozzle.cpp.1 b/apps/cpu/Nozzle/nozzle.cpp.1
index 57bac14e13ce30981e2572d5570e869eab1f253f..ff3374e6ec0e2b53dd2d888b8998619d34f3eae8 100644
--- a/apps/cpu/Nozzle/nozzle.cpp.1
+++ b/apps/cpu/Nozzle/nozzle.cpp.1
@@ -532,7 +532,7 @@ int main(int argc, char *argv[])
         /////////////////////////////////////////////////////////////////////
         /////////////////////////////////////////////////////////////////////
         
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
 
         SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
diff --git a/apps/cpu/Nozzle/nozzleSinglePhase.cpp b/apps/cpu/Nozzle/nozzleSinglePhase.cpp
index fe70ce94516a60ed17b559b3b8470b77341f7aaa..90a84c35dbbfee39fa186ce68c98452a6f4a6cf5 100644
--- a/apps/cpu/Nozzle/nozzleSinglePhase.cpp
+++ b/apps/cpu/Nozzle/nozzleSinglePhase.cpp
@@ -547,7 +547,7 @@ int main(int argc, char *argv[])
         /////////////////////////////////////////////////////////////////////
         /////////////////////////////////////////////////////////////////////
         
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
 
         SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
diff --git a/apps/cpu/NozzleMultiphase/CMakeLists.txt b/apps/cpu/NozzleMultiphase/CMakeLists.txt
index f92a4267e94c3899565812181fa0fd6af45fc1ca..e5ecf02f2be1a3c12a904e42ae55ddb54c991f92 100644
--- a/apps/cpu/NozzleMultiphase/CMakeLists.txt
+++ b/apps/cpu/NozzleMultiphase/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(NozzleMultiphase)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleMultiPhase.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleMultiPhase.cpp )
diff --git a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp b/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp
index ced2724ee6e8dddd3102428696a8647fee322326..1f0d3d0354dbfbe89c63167abe897073a9c9e5cd 100644
--- a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp
+++ b/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp
@@ -550,7 +550,7 @@ int main(int argc, char *argv[])
         /////////////////////////////////////////////////////////////////////
         /////////////////////////////////////////////////////////////////////
         
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
 
         SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
diff --git a/apps/cpu/PoiseuilleFlow/CMakeLists.txt b/apps/cpu/PoiseuilleFlow/CMakeLists.txt
index 1959719d81013762d37f655b342f755135c9ef85..f4fa1ace87a734e7e1826551f2097ec7d9858a5e 100644
--- a/apps/cpu/PoiseuilleFlow/CMakeLists.txt
+++ b/apps/cpu/PoiseuilleFlow/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(pf)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES pf.cpp pf1.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES pf.cpp pf1.cpp )
 
 vf_get_library_name (library_name)
 target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU})
\ No newline at end of file
diff --git a/apps/cpu/PoiseuilleFlow/pf1.cpp b/apps/cpu/PoiseuilleFlow/pf1.cpp
index dffd5fde6c71dfd0ab647cee2c3e6ee1a81455d0..853a3b084df597b5994cab8fbd4912098eaed853 100644
--- a/apps/cpu/PoiseuilleFlow/pf1.cpp
+++ b/apps/cpu/PoiseuilleFlow/pf1.cpp
@@ -78,7 +78,7 @@ void pf1()
 
    //set boundary conditions for blocks and create process decomposition for MPI
    SPtr<D3Q27Interactor> cylinderInt(new D3Q27Interactor(cylinder, grid, noSlipBC, Interactor3D::INVERSESOLID));
-   SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M));
+   SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M));
    InteractorsHelper intHelper(grid, metisVisitor);
    intHelper.addInteractor(cylinderInt);
    intHelper.selectBlocks();
diff --git a/apps/cpu/RisingBubble2D/CMakeLists.txt b/apps/cpu/RisingBubble2D/CMakeLists.txt
index 3f8f3e56cd7ab41979f72121a405b93c862dcce2..eb41f408e66218645e32a36daf910160d26954e1 100644
--- a/apps/cpu/RisingBubble2D/CMakeLists.txt
+++ b/apps/cpu/RisingBubble2D/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(RisingBubble2D)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES RisingBubble2D.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES RisingBubble2D.cpp )
diff --git a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp b/apps/cpu/RisingBubble2D/RisingBubble2D.cpp
index 90c912152f7e3cfbc8cf27a8d7170ca74ae71919..15da79550ae7f4e954f91d06a393d988b1c1db9d 100644
--- a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp
+++ b/apps/cpu/RisingBubble2D/RisingBubble2D.cpp
@@ -193,7 +193,7 @@ void run(string configname)
         grid->setPeriodicX3(true);
         grid->setGhostLayerWidth(2);
 
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
 
         //////////////////////////////////////////////////////////////////////////
         // restart
diff --git a/apps/cpu/ShotcreteJet/CMakeLists.txt b/apps/cpu/ShotcreteJet/CMakeLists.txt
index 6c82d37e10ac965dff939740f28b2200b0aec239..cd2efcfc9e15fa4f1744ba92bafd4dbfd2520847 100644
--- a/apps/cpu/ShotcreteJet/CMakeLists.txt
+++ b/apps/cpu/ShotcreteJet/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(ShotcreteJet)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES jet.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES jet.cpp )
diff --git a/apps/cpu/ShotcreteJet/jet.cpp b/apps/cpu/ShotcreteJet/jet.cpp
index baaa572353ecfa91a14c12ab0f7c5ae1bcfd97c1..fbb6b07e76d4b7844c17af4186ae9e2ac682fab5 100644
--- a/apps/cpu/ShotcreteJet/jet.cpp
+++ b/apps/cpu/ShotcreteJet/jet.cpp
@@ -604,7 +604,7 @@ int main(int argc, char *argv[])
         // /////////////////////////////////////////////////////////////////////
         // /////////////////////////////////////////////////////////////////////
         
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::KWAY));
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::KWAY));
 
         //////////////////////////////////////////////////////////////////////////
         // restart
diff --git a/apps/cpu/TPMSRow/CMakeLists.txt b/apps/cpu/TPMSRow/CMakeLists.txt
index 6ea54915ed2eb339e0e6e71c9d40c638120e58fa..f8c696c38152e73deb74a057360f9640ffc58983 100644
--- a/apps/cpu/TPMSRow/CMakeLists.txt
+++ b/apps/cpu/TPMSRow/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(TPMSRow)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES TPMSRow.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES TPMSRow.cpp )
 
 vf_get_library_name (library_name)
 #target_include_dires(${library_name} PRIVATE ${APPS_ROOT_CPU})
diff --git a/apps/cpu/TPMSRow/TPMSRow.cpp b/apps/cpu/TPMSRow/TPMSRow.cpp
index 09be56c68ed6cc0db2d911b19a21feae2c890d80..c4d41489740ca9717cfeb11d9eff591123d27aa4 100644
--- a/apps/cpu/TPMSRow/TPMSRow.cpp
+++ b/apps/cpu/TPMSRow/TPMSRow.cpp
@@ -405,7 +405,7 @@ void run(string configname)
 
             intHelper.setBC();
 
-            SpongeLayerBlockVisitor spongeLayerVisitor(spongecube, kernel, nu, DIR_P00);
+            SpongeLayerBlockVisitor spongeLayerVisitor(spongecube, kernel, nu, dP00);
             grid->accept(spongeLayerVisitor);
 
             grid->accept(bcVisitor);
diff --git a/apps/cpu/ViskomatXL/CMakeLists.txt b/apps/cpu/ViskomatXL/CMakeLists.txt
index 6dcfeabc73259c72138c2c4ac84c017c6e96463a..17b147d92b5f09e5379bb9f8594b217388bebab0 100644
--- a/apps/cpu/ViskomatXL/CMakeLists.txt
+++ b/apps/cpu/ViskomatXL/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(viskomat)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES viskomat.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES viskomat.cpp )
\ No newline at end of file
diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp
index 7db98670e2325825a76b60559d09d818838f9430..72417c70ebd5315716f5362aac4acb938d93a103 100644
--- a/apps/cpu/ViskomatXL/viskomat.cpp
+++ b/apps/cpu/ViskomatXL/viskomat.cpp
@@ -194,7 +194,7 @@ void bflow(string configname)
 
       ////////////////////////////////////////////
       //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
       ////////////////////////////////////////////
       //////////////////////////////////////////////////////////////////////////
       //restart
diff --git a/apps/cpu/pChannel/CMakeLists.txt b/apps/cpu/pChannel/CMakeLists.txt
index 336ac6c018044246d9c6c2f26f6009cc1e19e485..8af2de6d0580e0ca5cc9a10591474ec378e2145a 100644
--- a/apps/cpu/pChannel/CMakeLists.txt
+++ b/apps/cpu/pChannel/CMakeLists.txt
@@ -2,4 +2,4 @@ PROJECT(PChannel)
 
 INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore VirtualFluidsBasic FILES pChannel.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core VirtualFluidsBasic FILES pChannel.cpp)
diff --git a/apps/cpu/poiseuille_example/CMakeLists.txt b/apps/cpu/poiseuille_example/CMakeLists.txt
index 14782a6459a0b8689f7f81dd69055a2a43f9ecb7..9500d497a50866553a4bd2cdb3e74a19a00ef8fd 100644
--- a/apps/cpu/poiseuille_example/CMakeLists.txt
+++ b/apps/cpu/poiseuille_example/CMakeLists.txt
@@ -1,7 +1,7 @@
 
 PROJECT(poiseuille_example)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES poiseuille.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES poiseuille.cpp )
 
 vf_get_library_name (library_name)
 target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU})
\ No newline at end of file
diff --git a/apps/cpu/rheometer/CMakeLists.txt b/apps/cpu/rheometer/CMakeLists.txt
index 58177bdd14a1c55985818bd70e336072c62f6dc5..b095887e02ca0ca6a4a63189b431147da78ba3c5 100644
--- a/apps/cpu/rheometer/CMakeLists.txt
+++ b/apps/cpu/rheometer/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(rheometer)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES rheometer.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES rheometer.cpp )
\ No newline at end of file
diff --git a/apps/cpu/rheometer/rheometer.cpp b/apps/cpu/rheometer/rheometer.cpp
index 68db541bc922d3c269d3f626e19ddd6a1001d071..6c3c545f87d17f5a4b4e90492dfd879612028644 100644
--- a/apps/cpu/rheometer/rheometer.cpp
+++ b/apps/cpu/rheometer/rheometer.cpp
@@ -226,7 +226,7 @@ void bflow(string configname)
 
       ////////////////////////////////////////////
       //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
       ////////////////////////////////////////////
       //////////////////////////////////////////////////////////////////////////
       //restart
@@ -316,7 +316,7 @@ void bflow(string configname)
 
          ////////////////////////////////////////////
          //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY));
+         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
          ////////////////////////////////////////////
          /////delete solid blocks
          if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
diff --git a/apps/cpu/sphere/CMakeLists.txt b/apps/cpu/sphere/CMakeLists.txt
index 8346e80d26800582c37090b208e846737e087d5d..be839b6cd6e1f0a67637beb10e6a67b690f7db40 100644
--- a/apps/cpu/sphere/CMakeLists.txt
+++ b/apps/cpu/sphere/CMakeLists.txt
@@ -3,4 +3,4 @@
 ########################################################
 PROJECT(sphere LANGUAGES CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES sphere.cpp )
\ No newline at end of file
+vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} FILES sphere.cpp )
\ No newline at end of file
diff --git a/apps/cpu/sphere/sphere.cpp b/apps/cpu/sphere/sphere.cpp
index 5411449c79fcbf0bece01517eb81c4b7f1d4d52f..6809d2a9fd501da2cc3205bf697dc68c1b788ed8 100644
--- a/apps/cpu/sphere/sphere.cpp
+++ b/apps/cpu/sphere/sphere.cpp
@@ -182,7 +182,7 @@ void run(string configname)
          //outflow
          SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID));
 
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M));
+         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M));
          InteractorsHelper intHelper(grid, metisVisitor);
          intHelper.addInteractor(sphereInt);
          intHelper.addInteractor(addWallYminInt);
diff --git a/apps/gpu/ActuatorLine/ActuatorLine.cpp b/apps/gpu/ActuatorLine/ActuatorLine.cpp
index 5e43a552205b139ce14b2b8e1e25022a38f4de7a..8262a33892a53df438db90ae0b6447beff1f1775 100644
--- a/apps/gpu/ActuatorLine/ActuatorLine.cpp
+++ b/apps/gpu/ActuatorLine/ActuatorLine.cpp
@@ -65,21 +65,21 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/PreCollisionInteractor/ActuatorFarm.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/ActuatorLine/CMakeLists.txt b/apps/gpu/ActuatorLine/CMakeLists.txt
index c437ac81a0e23fadd925ca81af596f81ff59f820..52f225ae4f592131e5e6e3684464b175bf3b3b12 100644
--- a/apps/gpu/ActuatorLine/CMakeLists.txt
+++ b/apps/gpu/ActuatorLine/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(ActuatorLine LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES ActuatorLine.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES ActuatorLine.cpp)
 
 set_source_files_properties(ActuatorLine.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp b/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp
index 5ff3151d1313fd5a67b83930e963035203ff532e..bff963de58e048982ec2878235d87b12894f8c20 100644
--- a/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp
+++ b/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp
@@ -65,22 +65,22 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/PreCollisionInteractor/ActuatorFarm.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/Probe.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/ActuatorLineRegression/CMakeLists.txt b/apps/gpu/ActuatorLineRegression/CMakeLists.txt
index f7eb952945e726a43895356937d03dff29e6478f..d22ef9c7263899a83ccecaffdbc7c59ffea20d4a 100644
--- a/apps/gpu/ActuatorLineRegression/CMakeLists.txt
+++ b/apps/gpu/ActuatorLineRegression/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(ActuatorLineRegression LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES ActuatorLineRegression.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES ActuatorLineRegression.cpp)
 
 set_source_files_properties(ActuatorLineRegression.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/Basel/CMakeLists.txt b/apps/gpu/Basel/CMakeLists.txt
index 6ef6241b52aa9b5dc73a19b82f2b9fd5248c77c5..2d05f78bd85244eee12b8b65c9df157ff175b1e5 100644
--- a/apps/gpu/Basel/CMakeLists.txt
+++ b/apps/gpu/Basel/CMakeLists.txt
@@ -1,8 +1,8 @@
 setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) 
 
 set(linkDirectories "")
-set(libsToLink VirtualFluids_GPU GridGenerator)
-set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics")
+set(libsToLink gpu_core GridGenerator)
+set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/gpu_core" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics")
 
 #glob files and save in MY_SRCS
 include(CMakePackage.cmake)
diff --git a/apps/gpu/Basel/main.cpp b/apps/gpu/Basel/main.cpp
index 16161dc6a83846f2730c5920dfd64363b6e77b30..59708add1acd865b55bb3ca8d1f1e2e2e3032dac 100644
--- a/apps/gpu/Basel/main.cpp
+++ b/apps/gpu/Basel/main.cpp
@@ -18,15 +18,15 @@
 #include "StringUtilities/StringUtil.h"
 #include "Input/ConfigFileReader/ConfigFileReader.h"
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Communication/MpiCommunicator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Communication/MpiCommunicator.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/BaselMultiGPU/CMakeLists.txt b/apps/gpu/BaselMultiGPU/CMakeLists.txt
index 6ef6241b52aa9b5dc73a19b82f2b9fd5248c77c5..2d05f78bd85244eee12b8b65c9df157ff175b1e5 100644
--- a/apps/gpu/BaselMultiGPU/CMakeLists.txt
+++ b/apps/gpu/BaselMultiGPU/CMakeLists.txt
@@ -1,8 +1,8 @@
 setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) 
 
 set(linkDirectories "")
-set(libsToLink VirtualFluids_GPU GridGenerator)
-set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics")
+set(libsToLink gpu_core GridGenerator)
+set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/gpu_core" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics")
 
 #glob files and save in MY_SRCS
 include(CMakePackage.cmake)
diff --git a/apps/gpu/BaselMultiGPU/main.cpp b/apps/gpu/BaselMultiGPU/main.cpp
index 346ab7ca36ccd147d1f8427974ce2510b5d637fb..794d9c1ee5ef502997a1bc82709cdca277e8b61b 100644
--- a/apps/gpu/BaselMultiGPU/main.cpp
+++ b/apps/gpu/BaselMultiGPU/main.cpp
@@ -18,15 +18,15 @@
 #include "StringUtilities/StringUtil.h"
 #include "Input/ConfigFileReader/ConfigFileReader.h"
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Communication/MpiCommunicator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Communication/MpiCommunicator.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/BaselNU/CMakeLists.txt b/apps/gpu/BaselNU/CMakeLists.txt
index 6ef6241b52aa9b5dc73a19b82f2b9fd5248c77c5..2d05f78bd85244eee12b8b65c9df157ff175b1e5 100644
--- a/apps/gpu/BaselNU/CMakeLists.txt
+++ b/apps/gpu/BaselNU/CMakeLists.txt
@@ -1,8 +1,8 @@
 setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) 
 
 set(linkDirectories "")
-set(libsToLink VirtualFluids_GPU GridGenerator)
-set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics")
+set(libsToLink gpu_core GridGenerator)
+set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/gpu_core" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics")
 
 #glob files and save in MY_SRCS
 include(CMakePackage.cmake)
diff --git a/apps/gpu/BaselNU/main.cpp b/apps/gpu/BaselNU/main.cpp
index 97c4c48afb5caffb89bad89e3f3fe99670c889bc..991f5b3fa639f90562b5d220b27aedc21a71bf5a 100644
--- a/apps/gpu/BaselNU/main.cpp
+++ b/apps/gpu/BaselNU/main.cpp
@@ -18,15 +18,15 @@
 #include "StringUtilities/StringUtil.h"
 #include "Input/ConfigFileReader/ConfigFileReader.h"
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Communication/MpiCommunicator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Communication/MpiCommunicator.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/BoundaryLayer/BoundaryLayer.cpp b/apps/gpu/BoundaryLayer/BoundaryLayer.cpp
index 436ced919ee86ca5f9abab1285360633d9f4f423..ac2dbf785764b529653d122b9edcad31ca08be6c 100644
--- a/apps/gpu/BoundaryLayer/BoundaryLayer.cpp
+++ b/apps/gpu/BoundaryLayer/BoundaryLayer.cpp
@@ -69,23 +69,23 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h"
+#include "gpu/core/PreCollisionInteractor/PrecursorWriter.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 #include "utilities/communication.h"
 
diff --git a/apps/gpu/BoundaryLayer/CMakeLists.txt b/apps/gpu/BoundaryLayer/CMakeLists.txt
index 248c7a1616610715d38bcbff129b226da2cfd1f2..30efeb6bf4fe9b24f9857f348e21bcaaa1e7f555 100644
--- a/apps/gpu/BoundaryLayer/CMakeLists.txt
+++ b/apps/gpu/BoundaryLayer/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(BoundaryLayer LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES BoundaryLayer.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES BoundaryLayer.cpp)
 
 set_source_files_properties(BoundaryLayer.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/ChannelFlow/CMakeLists.txt b/apps/gpu/ChannelFlow/CMakeLists.txt
index 3884074e05097b392d96a47287d5e5cad4c0d6f3..3aab31339616f98f4f5c14138686fe04ac4e28ae 100644
--- a/apps/gpu/ChannelFlow/CMakeLists.txt
+++ b/apps/gpu/ChannelFlow/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(ChannelFlow LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES ChannelFlow.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES ChannelFlow.cpp)
 
 set_source_files_properties(ChannelFlow.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/ChannelFlow/ChannelFlow.cpp b/apps/gpu/ChannelFlow/ChannelFlow.cpp
index c51e8705c895bf511227a383be3c64de392975e5..5596cee8178f6e302224fa62b3fc78e66add4530 100644
--- a/apps/gpu/ChannelFlow/ChannelFlow.cpp
+++ b/apps/gpu/ChannelFlow/ChannelFlow.cpp
@@ -60,14 +60,14 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Kernel/Utilities/KernelTypes.h"
 
 //////////////////////////////////////////////////////////////////////////
 
diff --git a/apps/gpu/DrivenCavity/CMakeLists.txt b/apps/gpu/DrivenCavity/CMakeLists.txt
index 8646f29c13d689eaabee4274418620636643c592..c040b1810768cf6930f564d0fb89632931326380 100644
--- a/apps/gpu/DrivenCavity/CMakeLists.txt
+++ b/apps/gpu/DrivenCavity/CMakeLists.txt
@@ -2,4 +2,4 @@ PROJECT(DrivenCavity LANGUAGES CXX)
 
 #LIST(APPEND CS_COMPILER_FLAGS_CXX "-DOMPI_SKIP_MPICXX" )
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES DrivenCavity.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES DrivenCavity.cpp)
diff --git a/apps/gpu/DrivenCavity/DrivenCavity.cpp b/apps/gpu/DrivenCavity/DrivenCavity.cpp
index 6fa193fcd7852f8393172f7251a8e72a1b41e417..d7b897cd53a724d0cfa747124451423006853fba 100644
--- a/apps/gpu/DrivenCavity/DrivenCavity.cpp
+++ b/apps/gpu/DrivenCavity/DrivenCavity.cpp
@@ -57,15 +57,15 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 //////////////////////////////////////////////////////////////////////////
 
diff --git a/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt b/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt
index 6460abb1cb56b770cf91f57239eeb8262f34595a..abecc9fd9618051ef05cbb7b4ba5ba9f53af624a 100644
--- a/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt
+++ b/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(DrivenCavityMultiGPU LANGUAGES CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES DrivenCavityMultiGPU.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES DrivenCavityMultiGPU.cpp)
diff --git a/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp b/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
index 29d0a8beff5f1b93a3d6a4edbc2f7a39323239f4..f35bfe5c151e3821af5952e6c9d921691dfe08dd 100755
--- a/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
+++ b/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
@@ -33,20 +33,20 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#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/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
-#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+
+#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
+#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 //////////////////////////////////////////////////////////////////////////
 #include <parallel/MPICommunicator.h>
diff --git a/apps/gpu/DrivenCavityUniform/CMakeLists.txt b/apps/gpu/DrivenCavityUniform/CMakeLists.txt
index 78d6d693a54b251b8c3361ac908f6099f4d7ccf0..b223717b7f6f1f506847d7bd2436ff295c2bd73e 100644
--- a/apps/gpu/DrivenCavityUniform/CMakeLists.txt
+++ b/apps/gpu/DrivenCavityUniform/CMakeLists.txt
@@ -2,4 +2,4 @@ PROJECT(DrivenCavityUniform LANGUAGES CXX)
 
 #LIST(APPEND CS_COMPILER_FLAGS_CXX "-DOMPI_SKIP_MPICXX" )
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES DrivenCavity.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES DrivenCavity.cpp)
diff --git a/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp b/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp
index 38c9ac08d15dac64099ea1584129bc9d896dd659..0ffe9bd39e2fc461dd8e08e8f3ed411b2550a42f 100644
--- a/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp
+++ b/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp
@@ -57,15 +57,15 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/MusselOyster/CMakeLists.txt b/apps/gpu/MusselOyster/CMakeLists.txt
index 966c802b233fd333c7e7b44a57c7f4177b419ca3..2661a46547eb651c23ce48550e571998d414bc34 100644
--- a/apps/gpu/MusselOyster/CMakeLists.txt
+++ b/apps/gpu/MusselOyster/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(MusselOyster LANGUAGES CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES MusselOyster.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES MusselOyster.cpp)
diff --git a/apps/gpu/MusselOyster/MusselOyster.cpp b/apps/gpu/MusselOyster/MusselOyster.cpp
index 1c3a9dd642b2af43bb04d7d96f182cb77a4ab280..1bcfb60c8ca1a91acda8426b1e52de75fa1a07c3 100644
--- a/apps/gpu/MusselOyster/MusselOyster.cpp
+++ b/apps/gpu/MusselOyster/MusselOyster.cpp
@@ -36,15 +36,15 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 //////////////////////////////////////////////////////////////////////////
 
diff --git a/apps/gpu/SphereGPU/CMakeLists.txt b/apps/gpu/SphereGPU/CMakeLists.txt
index 1a162d6d200e4c0e533764b8f9927314b1f28ee9..df9f6b57197f594461805375238bab534ee6cdb5 100644
--- a/apps/gpu/SphereGPU/CMakeLists.txt
+++ b/apps/gpu/SphereGPU/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(SphereGPU LANGUAGES CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES Sphere.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES Sphere.cpp)
diff --git a/apps/gpu/SphereGPU/Sphere.cpp b/apps/gpu/SphereGPU/Sphere.cpp
index 9cf84f8c433d8eb843e0d7ad40866762328acfae..66d381809d3f37bc85238a459b86fd54e9477b4a 100644
--- a/apps/gpu/SphereGPU/Sphere.cpp
+++ b/apps/gpu/SphereGPU/Sphere.cpp
@@ -60,17 +60,17 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h"
-#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
+#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 int main(int argc, char *argv[])
 {
diff --git a/apps/gpu/SphereRefined/CMakeLists.txt b/apps/gpu/SphereRefined/CMakeLists.txt
index 87432021ba02e7b56b5dabade18e98d7978bce46..f7bb5716f44d424f834b38e2ce5ff27423ff3265 100644
--- a/apps/gpu/SphereRefined/CMakeLists.txt
+++ b/apps/gpu/SphereRefined/CMakeLists.txt
@@ -2,7 +2,7 @@ PROJECT(SphereRefined LANGUAGES CUDA CXX)
 
 #LIST(APPEND CS_COMPILER_FLAGS_CXX "-DOMPI_SKIP_MPICXX" )
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES SphereRefined.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES SphereRefined.cpp)
 
 set_source_files_properties(SphereRefined.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/SphereRefined/SphereRefined.cpp b/apps/gpu/SphereRefined/SphereRefined.cpp
index 12605db750d405198b732cb4524900c92a27475a..8d03154b34f0bb04b72033783195cd857b9ff4a7 100644
--- a/apps/gpu/SphereRefined/SphereRefined.cpp
+++ b/apps/gpu/SphereRefined/SphereRefined.cpp
@@ -58,16 +58,16 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 #include <parallel/MPICommunicator.h>
 
diff --git a/apps/gpu/SphereScaling/CMakeLists.txt b/apps/gpu/SphereScaling/CMakeLists.txt
index 7d2d7722190e02876dc05e581cd9ce67a3362ebd..04b4e6defd8b3e5db96a83f165f4bc5999a4b1cd 100644
--- a/apps/gpu/SphereScaling/CMakeLists.txt
+++ b/apps/gpu/SphereScaling/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(SphereScaling LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES SphereScaling.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES SphereScaling.cpp)
 
 set_source_files_properties(SphereScaling.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/SphereScaling/SphereScaling.cpp b/apps/gpu/SphereScaling/SphereScaling.cpp
index 6be82fef197ad94d5857fde0692162d137d24c2b..cb557bedc7545ee2ddc1dd4b53efcf34a6dceeb7 100755
--- a/apps/gpu/SphereScaling/SphereScaling.cpp
+++ b/apps/gpu/SphereScaling/SphereScaling.cpp
@@ -36,20 +36,20 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#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/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
-#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+
+#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
+#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 //////////////////////////////////////////////////////////////////////////
 
diff --git a/apps/gpu/TGV_3D/CMakeLists.txt b/apps/gpu/TGV_3D/CMakeLists.txt
index 6a06a92891ac8b7c9714f0a6c98dd918dc08f682..6ff88f79de8b6ea5228bff197096d9178e3f5989 100644
--- a/apps/gpu/TGV_3D/CMakeLists.txt
+++ b/apps/gpu/TGV_3D/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(TGV_3D LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES TGV_3D.cpp)
 
 set_source_files_properties(TGV_3D.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/TGV_3D/TGV_3D.cpp b/apps/gpu/TGV_3D/TGV_3D.cpp
index 6bb6d2b9201a4f21e5b70d31b8e9c60ad5a8a34c..0f467142ed3442cb1322f8d04524a5cff8ab3dfe 100644
--- a/apps/gpu/TGV_3D/TGV_3D.cpp
+++ b/apps/gpu/TGV_3D/TGV_3D.cpp
@@ -64,14 +64,14 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
 
 #include <parallel/MPICommunicator.h>
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/TGV_3D_GridRef/CMakeLists.txt b/apps/gpu/TGV_3D_GridRef/CMakeLists.txt
index efb4310669f9c0de7aa5cf3f1e4dffa00bd66cbf..92e125b2d4a1b9239a91a6086bc0b6ec005e0f54 100644
--- a/apps/gpu/TGV_3D_GridRef/CMakeLists.txt
+++ b/apps/gpu/TGV_3D_GridRef/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(TGV_3D_GridRef LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D_GridRef.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES TGV_3D_GridRef.cpp)
 
 set_source_files_properties(TGV_3D_GridRef.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp b/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp
index 5f30cba2bd8a8d5a2e2b19b2e1b96faa74da80e4..876d4e32e6e5702db857876f060f619fddb37fb6 100644
--- a/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp
+++ b/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp
@@ -68,16 +68,16 @@
 //////////////////////////////////////////////////////////////////////////
 
 #include "parallel/MpiCommunicator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt b/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt
index cc25432a3151ce0805242f720d58794e8bc7feed..cfa39677e41f8b399eccf441f8752a77cf9327fe 100644
--- a/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt
+++ b/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(TGV_3D_MultiGPU LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D_MultiGPU.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES TGV_3D_MultiGPU.cpp)
 
 set_source_files_properties(TGV_3D_MultiGPU.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp b/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
index f409b417378b0a2eab05b65181fac4d86e981c50..503768d882848f941ab8dd0deeca77ef36499eb8 100644
--- a/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
+++ b/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
@@ -53,19 +53,19 @@
 #include "StringUtilities/StringUtil.h"
 #include "basics/config/ConfigurationFile.h"
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/Communication/MpiCommunicator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
-#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Communication/MpiCommunicator.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+
+#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
+#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/WTG_RUB/CMakeLists.txt b/apps/gpu/WTG_RUB/CMakeLists.txt
index d67ec1c079fa418bcfc7374aa7aa7673756329a8..98cd844fa13fe6220a9bb01eb3e6ecf6f32e01da 100644
--- a/apps/gpu/WTG_RUB/CMakeLists.txt
+++ b/apps/gpu/WTG_RUB/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(WTG_RUB LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES WTG_RUB.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES WTG_RUB.cpp)
 
 set_source_files_properties(WTG_RUB.cpp PROPERTIES LANGUAGE CUDA)
 
diff --git a/apps/gpu/WTG_RUB/WTG_RUB.cpp b/apps/gpu/WTG_RUB/WTG_RUB.cpp
index 0f6ae8617afad6919209bfb6a1dd8108336c9715..1a40c4f127ddabb52faa29fb581106026e92f452 100644
--- a/apps/gpu/WTG_RUB/WTG_RUB.cpp
+++ b/apps/gpu/WTG_RUB/WTG_RUB.cpp
@@ -65,15 +65,15 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 #include <parallel/MPICommunicator.h>
 
diff --git a/apps/gpu/gridGeneratorTest/CMakeLists.txt b/apps/gpu/gridGeneratorTest/CMakeLists.txt
index b946a710edffbdcb98894e0d49763c6ead3dabf9..7edf505365cc8b05abbf30ef89c0a127e28d75c3 100644
--- a/apps/gpu/gridGeneratorTest/CMakeLists.txt
+++ b/apps/gpu/gridGeneratorTest/CMakeLists.txt
@@ -1,3 +1,3 @@
 PROJECT(GridGeneratorTest LANGUAGES CXX)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator MPI::MPI_CXX FILES gridGenerator.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator MPI::MPI_CXX FILES gridGenerator.cpp)
diff --git a/apps/gpu/gridGeneratorTest/gridGenerator.cpp b/apps/gpu/gridGeneratorTest/gridGenerator.cpp
index e9ef5ae4790105471c227800d494f68deeb73c8d..0648c45827ab748779e399a79bbe0c3ecc78a23c 100644
--- a/apps/gpu/gridGeneratorTest/gridGenerator.cpp
+++ b/apps/gpu/gridGeneratorTest/gridGenerator.cpp
@@ -8,18 +8,18 @@
 #include "StringUtilities/StringUtil.h"
 #include "basics/config/ConfigurationFile.h"
 
-#include "VirtualFluids_GPU/LBM/Simulation.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
-#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Output/FileWriter.h"
+
+#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
+#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+
+#include "gpu/core/GPU/CudaMemoryManager.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt b/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt
index 4114004886660af9c9f95a0a7d5ed4fc90a7bd00..b58271c34025802fce64c8d381da0022f9e4f6a7 100644
--- a/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt
+++ b/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt
@@ -1,6 +1,6 @@
 project(NumericalTestPostProcessing)
 
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU basics cudart_static)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK gpu_core basics cudart_static)
 
 vf_get_library_name(library_name)
 groupTarget(${library_name} ${testFolder})
diff --git a/apps/gpu/tests/NumericalTests/CMakeLists.txt b/apps/gpu/tests/NumericalTests/CMakeLists.txt
index 80c6318756ce115f18a4fa4b6324dd0d087935e4..a188420492ff477ff4ddf86f0d4f34373438737e 100644
--- a/apps/gpu/tests/NumericalTests/CMakeLists.txt
+++ b/apps/gpu/tests/NumericalTests/CMakeLists.txt
@@ -1,6 +1,6 @@
 project(NumericalTestsGPU)
 set(collectTestFiles ON)
-vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU GridGenerator basics logger fftw3 gtest gmock gmock_main cudart_static)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK gpu_core GridGenerator basics logger fftw3 gtest gmock gmock_main cudart_static)
 
 vf_get_library_name(library_name)
 groupTarget(${library_name} ${testFolder})
diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp
index 5a779e0c958f74876f6f206193cf32a9c2e68935..078bc7297679c6761ce387739735ace9805cc368 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp
@@ -1,9 +1,9 @@
 #include "ToVectorWriter.h"
 
-#include "VirtualFluids_GPU/Output/FileWriter.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Output/FileWriter.h"
+#include "gpu/core/Output/FileWriter.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/Output/FileWriter.h"
 
 #include "Utilities/Structs/VectorWriterInformationStruct.h"
 
diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h
index 43f0ae86e0bd1231414a5d1ec11347849eac03d8..1123a36a35e0de5971ce892058c0a62659edfb24 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h
+++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h
@@ -1,7 +1,7 @@
 #ifndef WRITE_TO_VECTOR_H
 #define WRITE_TO_VECTOR_H
 
-#include "VirtualFluids_GPU/Output/DataWriter.h"
+#include "gpu/core/Output/DataWriter.h"
 
 class Parameter;
 class FileWriter;
diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp
index c13f6f748463287fc4e7401d56d7c7ab40cc1a77..d19491ed5e08d182a966d1b87140ecf667e7dbd5 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp
@@ -1,7 +1,7 @@
 #include "Y2dSliceToResults.h"
 
 #include "Utilities/Results/SimulationResults/SimulationResults.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
+#include "gpu/core/Parameter/Parameter.h"
 
 #include <cmath>
 #include <sstream>
diff --git a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h
index 1c9b322a29c80c28173d5791adc75e3756f22bbc..62cead9311e1ab581091e7eceb660dbd6200c1cc 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h
+++ b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h
@@ -1,7 +1,7 @@
 #ifndef INITIAL_CONDITION_H
 #define INITIAL_CONDITION_H
 
-#include "VirtualFluids_GPU/LBM/LB.h"
+#include "gpu/core/LBM/LB.h"
 
 #include <vector>
 #include <memory>
diff --git a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp
index 72045afbe7a68ba9c8595ee5c736dd5b2da89ec7..60b37a5be4fb0afc01509467c22b50e220f106f8 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp
@@ -1,6 +1,6 @@
 #include "InitialConditionImp.h"
 
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
+#include "gpu/core/Parameter/Parameter.h"
 
 void InitialConditionImp::setParameter(std::shared_ptr<Parameter> para)
 {
diff --git a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp
index b0368e4e4215aca06cda79faf47403d7a2650f8d..494eb79657ae9057496b50fa83d510159386b041 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp
@@ -1,6 +1,6 @@
 #include "NumericalTestGridReader.h"
 
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
+#include "gpu/core/Parameter/Parameter.h"
 
 #include "Utilities/InitialCondition/InitialCondition.h"
 
diff --git a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h
index 99363655817874672eaf5b898fb087cb20effb02..bde0a2bcb0c4740ed393e301b58339a9afcd180a 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h
+++ b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h
@@ -1,7 +1,7 @@
 #ifndef NUMERICAL_TESTS_GRID_READER_H
 #define NUMERICAL_TESTS_GRID_READER_H
 
-#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
 
 #include <memory>
 
diff --git a/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h b/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h
index 8320d9e1076fad3ed0a6bf5461a58826dbe36418..7c1e09b9de89f972d3256e91507695c2960bee6e 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h
+++ b/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h
@@ -3,7 +3,7 @@
 
 #include "AnalyticalResult.h"
 
-#include "VirtualFluids_GPU/LBM/LB.h"
+#include "gpu/core/LBM/LB.h"
 
 class AnalyticalResultsImp : public AnalyticalResults
 {
diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp
index 8646cc1991802b10d284c41acade4f5002df906b..9399652f4e1681eb53bc4960a7df9bbc9f22849d 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp
@@ -5,11 +5,11 @@
 #include "Utilities/NumericalTestGridReader/NumericalTestGridReader.h"
 #include "Utilities/SimulationParameter/SimulationParameter.h"
 
-#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Parameter/Parameter.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/Parameter/Parameter.h"
 
-#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "VirtualFluids_GPU/LBM/Simulation.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/LBM/Simulation.h"
 
 #include <parallel/MPICommunicator.h>
 
diff --git a/cpu.cmake b/cpu.cmake
index 78034bc927f8c01ce25d882e7d04f9f5e278ba01..226791b1bef78cf7c76c916424889982c7ce6073 100644
--- a/cpu.cmake
+++ b/cpu.cmake
@@ -88,7 +88,7 @@ endif()
 
 add_subdirectory(${VF_THIRD_DIR}/MuParser)
 
-add_subdirectory(src/cpu/VirtualFluidsCore)
+add_subdirectory(src/cpu/core)
 
 if(BUILD_VF_PYTHON_BINDINGS)
     add_subdirectory(src/cpu/simulationconfig)
diff --git a/gpu.cmake b/gpu.cmake
index 8f3fde523efa4cbf2f0884723728832f82a53231..9dd181b89c848c40c2dc9c2da2628d2c9bf9188d 100644
--- a/gpu.cmake
+++ b/gpu.cmake
@@ -3,7 +3,7 @@
 #############################################################
 
 add_subdirectory(src/gpu/GridGenerator)
-add_subdirectory(src/gpu/VirtualFluids_GPU)
+add_subdirectory(src/gpu/core)
 
 #############################################################
 ###                  Apps                                 ###
diff --git a/pythonbindings/CMakeLists.txt b/pythonbindings/CMakeLists.txt
index 8dbf9047ac964b2886a180c6be5d1b753e4fcb24..53700cc8d2769581bcbfbe6e984fb3c90bbd2996 100644
--- a/pythonbindings/CMakeLists.txt
+++ b/pythonbindings/CMakeLists.txt
@@ -61,7 +61,7 @@ IF(BUILD_VF_GPU)
 
     target_include_directories(gpu_bindings PRIVATE ${VF_THIRD_DIR}/cuda_samples/)
 
-    target_link_libraries(gpu_bindings PRIVATE basics GridGenerator VirtualFluids_GPU parallel)
+    target_link_libraries(gpu_bindings PRIVATE basics GridGenerator gpu_core parallel)
 
     target_include_directories(gpu_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/)
     target_include_directories(gpu_bindings PRIVATE ${CMAKE_BINARY_DIR})
@@ -74,7 +74,7 @@ IF(BUILD_VF_CPU)
     set_target_properties(  cpu_bindings PROPERTIES
                             LIBRARY_OUTPUT_DIRECTORY ${PYFLUIDS_DIR}
                             OUTPUT_NAME "cpu")
-    target_link_libraries(cpu_bindings PRIVATE simulationconfig VirtualFluidsCore muparser)
+    target_link_libraries(cpu_bindings PRIVATE simulationconfig cpu_core muparser)
 
     target_include_directories(cpu_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/)
     target_include_directories(cpu_bindings PRIVATE ${CMAKE_BINARY_DIR})
diff --git a/pythonbindings/src/gpu/submodules/actuator_farm.cpp b/pythonbindings/src/gpu/submodules/actuator_farm.cpp
index 86e3f5a42152e60d6b62e32fb894406efc8384ea..ee5275483f85559a15aefa769ba30a87af993355 100644
--- a/pythonbindings/src/gpu/submodules/actuator_farm.cpp
+++ b/pythonbindings/src/gpu/submodules/actuator_farm.cpp
@@ -33,8 +33,8 @@
 
 #include <pybind11/pybind11.h>
 #include <pybind11/numpy.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h>
+#include <gpu/core/PreCollisionInteractor/ActuatorFarm.h>
+#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h>
 
 
 class PyActuatorFarm : public ActuatorFarm 
diff --git a/pythonbindings/src/gpu/submodules/boundary_conditions.cpp b/pythonbindings/src/gpu/submodules/boundary_conditions.cpp
index 865817bb16f7b164c40bdc066645fb2e1f1c842e..26fdd3e712714074928f452c179b977e3769eec3 100644
--- a/pythonbindings/src/gpu/submodules/boundary_conditions.cpp
+++ b/pythonbindings/src/gpu/submodules/boundary_conditions.cpp
@@ -32,7 +32,7 @@
 //=======================================================================================
 #include <pybind11/pybind11.h>
 #include <gpu/GridGenerator/grid/BoundaryConditions/Side.h>
-#include "gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
 
 namespace boundary_conditions
 {
diff --git a/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp b/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp
index bbff4832cb73f47e3d1a5a6abd78e21da2473deb..d974609d22412121fb4886fa7e4a233a90fc9b9b 100644
--- a/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp
+++ b/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp
@@ -31,8 +31,8 @@
 //! \author Henry Korb
 //=======================================================================================
 #include <pybind11/pybind11.h>
-#include <gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h>
-#include <gpu/VirtualFluids_GPU/Parameter/Parameter.h>
+#include <gpu/core/GPU/CudaMemoryManager.h>
+#include <gpu/core/Parameter/Parameter.h>
 
 
 namespace cuda_memory_manager
diff --git a/pythonbindings/src/gpu/submodules/grid_provider.cpp b/pythonbindings/src/gpu/submodules/grid_provider.cpp
index 717e9d5cd82100636a5398c09662a0895ce8fb56..c9ad3138f54bea78e1575087f3b719267f9ef67b 100644
--- a/pythonbindings/src/gpu/submodules/grid_provider.cpp
+++ b/pythonbindings/src/gpu/submodules/grid_provider.cpp
@@ -30,7 +30,7 @@
 //! \author Henry Korb
 //=======================================================================================
 #include <pybind11/pybind11.h>
-#include "gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridProvider.h"
 
 namespace grid_provider
 {
diff --git a/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp b/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp
index a3a572875a4695871c482a4308acab4214dbb481..dddeef34d528206f4c9a573772109f39797658f9 100644
--- a/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp
+++ b/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp
@@ -31,7 +31,7 @@
 //! \author Henry Korb
 //=======================================================================================
 #include <pybind11/pybind11.h>
-#include <gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h>
+#include <gpu/core/Factories/GridScalingFactory.h>
 
 namespace grid_scaling_factory
 {
diff --git a/pythonbindings/src/gpu/submodules/parameter.cpp b/pythonbindings/src/gpu/submodules/parameter.cpp
index 53c270f16327aee73b55e746d1d0bb94993203a2..6b9d57a715eb309295f6537daaccf56ff5397384 100644
--- a/pythonbindings/src/gpu/submodules/parameter.cpp
+++ b/pythonbindings/src/gpu/submodules/parameter.cpp
@@ -33,10 +33,10 @@
 #include <pybind11/pybind11.h>
 #include <pybind11/functional.h>
 #include <pybind11/stl.h>
-#include <gpu/VirtualFluids_GPU/Parameter/Parameter.h>
+#include <gpu/core/Parameter/Parameter.h>
 #include "basics/constants/NumericConstants.h"
 #include <basics/config/ConfigurationFile.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h>
+#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h>
 
 
 using namespace vf::basics::constant;
diff --git a/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp b/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp
index 308f6c37aada14c8c25c69245f603274ae2f18d8..b75aa2f00f4da154b5ef53c9e1d1aa1562e7476c 100644
--- a/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp
+++ b/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp
@@ -32,7 +32,7 @@
 //! \author Henry Korb
 //=======================================================================================
 #include <pybind11/pybind11.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h>
+#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h>
 
 namespace pre_collision_interactor
 {
diff --git a/pythonbindings/src/gpu/submodules/precursor_writer.cpp b/pythonbindings/src/gpu/submodules/precursor_writer.cpp
index 64164ef9993d7b4f22bff2390b418718f7c3208f..94499aff963a55f04d23c179393ff207bc13e9db 100644
--- a/pythonbindings/src/gpu/submodules/precursor_writer.cpp
+++ b/pythonbindings/src/gpu/submodules/precursor_writer.cpp
@@ -33,8 +33,8 @@
 #include <pybind11/pybind11.h>
 #include <pybind11/stl.h>
 #include <pybind11/numpy.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h>
+#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h>
+#include <gpu/core/PreCollisionInteractor/PrecursorWriter.h>
 
 namespace precursor_writer
 {
diff --git a/pythonbindings/src/gpu/submodules/probes.cpp b/pythonbindings/src/gpu/submodules/probes.cpp
index 9c3fc8ab15234013a093dbe00f6654ea3257d4b0..5a679bb4d32b3b24fb4fe8ccd327d185e2b3a6df 100644
--- a/pythonbindings/src/gpu/submodules/probes.cpp
+++ b/pythonbindings/src/gpu/submodules/probes.cpp
@@ -32,12 +32,12 @@
 //=======================================================================================
 #include <pybind11/pybind11.h>
 #include <pybind11/stl.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h>
-#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h>
+#include <gpu/core/PreCollisionInteractor/Probes/Probe.h>
+#include <gpu/core/PreCollisionInteractor/Probes/PointProbe.h>
+#include <gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h>
+#include <gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h>
+#include <gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h>
+#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h>
 
 namespace probes
 {
diff --git a/pythonbindings/src/gpu/submodules/simulation.cpp b/pythonbindings/src/gpu/submodules/simulation.cpp
index 545fe082fe59cacabde07052ccf1b041d0af7e25..2e45e58915461f3137011a9086eaacf9c6ec87d7 100644
--- a/pythonbindings/src/gpu/submodules/simulation.cpp
+++ b/pythonbindings/src/gpu/submodules/simulation.cpp
@@ -31,17 +31,17 @@
 //! \author Henry Korb
 //=======================================================================================
 #include <pybind11/pybind11.h>
-#include <gpu/VirtualFluids_GPU/LBM/Simulation.h>
-#include <gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h>
-#include <gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h>
-#include <gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h>
-#include <gpu/VirtualFluids_GPU/Parameter/Parameter.h>
-#include <gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h>
-#include <gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h>
-#include <gpu/VirtualFluids_GPU/Output/DataWriter.h>
-#include "gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
-#include "gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h"
-#include "gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h"
+#include <gpu/core/LBM/Simulation.h>
+#include <gpu/core/Kernel/KernelFactory/KernelFactory.h>
+#include <gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h>
+#include <gpu/core/DataStructureInitializer/GridProvider.h>
+#include <gpu/core/Parameter/Parameter.h>
+#include <gpu/core/GPU/CudaMemoryManager.h>
+#include <gpu/core/DataStructureInitializer/GridProvider.h>
+#include <gpu/core/Output/DataWriter.h>
+#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
+#include "gpu/core/Factories/GridScalingFactory.h"
 #include "parallel/Communicator.h"
 
 namespace simulation
diff --git a/pythonbindings/src/gpu/submodules/turbulence_models.cpp b/pythonbindings/src/gpu/submodules/turbulence_models.cpp
index 79b8ac00d66e2c32abf2e2b708404f7c265de013..025d544b66ae085fa1cbcbdc5e0ffad9fb3a168b 100644
--- a/pythonbindings/src/gpu/submodules/turbulence_models.cpp
+++ b/pythonbindings/src/gpu/submodules/turbulence_models.cpp
@@ -31,8 +31,8 @@
 //! \author Henry Korb
 //=======================================================================================
 #include "pybind11/pybind11.h"
-#include "gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h"
-#include "gpu/VirtualFluids_GPU/LBM/LB.h"
+#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
+#include "gpu/core/LBM/LB.h"
 
 namespace turbulence_model
 {
diff --git a/src/basics/CMakeLists.txt b/src/basics/CMakeLists.txt
index 7e4cccf26f0c54a47d720f8d33fad435800838b7..8ef4841bf640f156f8f2573f286e7613ea3c0941 100644
--- a/src/basics/CMakeLists.txt
+++ b/src/basics/CMakeLists.txt
@@ -13,6 +13,7 @@ target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/pa
 target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/transmitter)
 target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/utilities)
 target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/writer)
+target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 
 
 
diff --git a/src/basics/constants/NumericConstants.h b/src/basics/constants/NumericConstants.h
index 305805de4f1532de51bae15b92cfda80a5b2f4ab..5e1a32c8fb696ee0c9fcebc0a4ba84a1b39fd971 100644
--- a/src/basics/constants/NumericConstants.h
+++ b/src/basics/constants/NumericConstants.h
@@ -114,10 +114,10 @@ static constexpr double c264o1 = 264.;
 static constexpr double c290o1 = 290.;
 static constexpr double c367o1 = 367.;
 
-static constexpr double Op0000002 = 0.0000002;
+static constexpr double c0p0000002 = 0.0000002;
 static constexpr double c10eM30 = 1e-30;
 static constexpr double c10eM10 = 1e-10;
-static constexpr double smallSingle = 0.0000000002;
+static constexpr double cSmallSingle = 0.0000000002;
 
 #ifndef __CUDACC__
 static const double cPi = 4.0 * std::atan(1.0);               // 3.1415926535
@@ -131,10 +131,10 @@ static constexpr double cPio180 = 1.74532925199e-2;
 static constexpr double c180oPi = 57.2957795131;
 #endif
 
-static const double one_over_sqrt2 = 1.0 / sqrt(2.0); // 0.707106781
-static const double one_over_sqrt3 = 1.0 / sqrt(3.0); // 0.577350269
-static const double sqrt2 = sqrt(2.0);       // 1.4142135
-static const double sqrt3 = sqrt(3.0);       // 1.7320508
+static const double c1oSqrt2 = 1.0 / sqrt(2.0); // 0.707106781
+static const double c1oSqrt3 = 1.0 / sqrt(3.0); // 0.577350269
+static const double cSqrt2 = sqrt(2.0);         // 1.4142135
+static const double cSqrt3 = sqrt(3.0);         // 1.7320508
 
 #else
 static constexpr float c1o2 = 1.0f / 2.0f;
@@ -242,10 +242,10 @@ static constexpr float c264o1 = 264.0f;
 static constexpr float c290o1 = 290.0f;
 static constexpr float c367o1 = 367.0f;
 
-static constexpr float Op0000002 = 0.0000002f;
+static constexpr float c0p0000002 = 0.0000002f;
 static constexpr float c10eM30 = 1e-30f;
 static constexpr float c10eM10 = 1e-10f;
-static constexpr float smallSingle = 0.0000000002f;
+static constexpr float cSmallSingle = 0.0000000002f;
 
 #ifndef __CUDACC__
 static const float cPi = 4.0f * std::atan(1.0f);               // 3.1415926535
@@ -259,10 +259,10 @@ static constexpr float cPio180 = 1.74532925199e-2f;
 static constexpr float c180oPi = 57.2957795131f;
 #endif
 
-static const float one_over_sqrt2 = 1.0 / sqrtf(2.0); // 0.707106781
-static const float one_over_sqrt3 = 1.0 / sqrtf(3.0); // 0.577350269
-static const float sqrt2 = sqrtf(2.0);                // 1.4142135
-static const float sqrt3 = sqrtf(3.0);                // 1.7320508
+static const float c1oSqrt2 = 1.0 / sqrtf(2.0); // 0.707106781
+static const float c1oSqrt3 = 1.0 / sqrtf(3.0); // 0.577350269
+static const float cSqrt2 = sqrtf(2.0);                // 1.4142135
+static const float cSqrt3 = sqrtf(3.0);                // 1.7320508
 
 #endif
 
diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.h b/src/basics/geometry3d/GbTriFaceMesh3D.h
index 33ddbe2fdd82fb1cfd8fe96fd8b98843a6e82879..dadbd86276b87a4eac61067a832dd9da25e4fa07 100644
--- a/src/basics/geometry3d/GbTriFaceMesh3D.h
+++ b/src/basics/geometry3d/GbTriFaceMesh3D.h
@@ -46,6 +46,8 @@
 
 #include <PointerDefinitions.h>
 
+#include "basics/constants/NumericConstants.h"
+
 #include <basics_export.h>
 
 namespace Kd
@@ -201,15 +203,15 @@ public:
 
         float getX1Centroid(std::vector<Vertex> &nodes)
         {
-            return (float)UbMath::c1o3 * (getV1x(nodes) + getV2x(nodes) + getV3x(nodes));
+            return (float)vf::basics::constant::c1o3 * (getV1x(nodes) + getV2x(nodes) + getV3x(nodes));
         }
         float getX2Centroid(std::vector<Vertex> &nodes)
         {
-            return (float)UbMath::c1o3 * (getV1y(nodes) + getV2y(nodes) + getV3y(nodes));
+            return (float)vf::basics::constant::c1o3 * (getV1y(nodes) + getV2y(nodes) + getV3y(nodes));
         }
         float getX3Centroid(std::vector<Vertex> &nodes)
         {
-            return (float)UbMath::c1o3 * (getV1z(nodes) + getV2z(nodes) + getV3z(nodes));
+            return (float)vf::basics::constant::c1o3 * (getV1z(nodes) + getV2z(nodes) + getV3z(nodes));
         }
 
         double calculateDistanceToPoint3D(const double &x1, const double &x2, const double &x3,
diff --git a/src/basics/geometry3d/GbVoxelMatrix3D.cpp b/src/basics/geometry3d/GbVoxelMatrix3D.cpp
index 5040b54c8dacbd17317a35c451d82f1ad20b0edf..130eaf655c3fb42544d71508a16b6b9212039df7 100644
--- a/src/basics/geometry3d/GbVoxelMatrix3D.cpp
+++ b/src/basics/geometry3d/GbVoxelMatrix3D.cpp
@@ -174,11 +174,11 @@ double GbVoxelMatrix3D::getIntersectionRaytraceFactor(const double &x1, const do
                                                       const double &rx1, const double &rx2, const double &rx3)
 {
     if (!((UbMath::equal(rx1, 0.0) || UbMath::equal(fabs(rx1), 1.0) ||
-           UbMath::equal(fabs(rx1), vf::basics::constant::one_over_sqrt2) || UbMath::equal(fabs(rx1), vf::basics::constant::one_over_sqrt3)) &&
+           UbMath::equal(fabs(rx1), vf::basics::constant::c1oSqrt2) || UbMath::equal(fabs(rx1), vf::basics::constant::c1oSqrt3)) &&
           (UbMath::equal(rx2, 0.0) || UbMath::equal(fabs(rx2), 1.0) ||
-           UbMath::equal(fabs(rx2), vf::basics::constant::one_over_sqrt2) || UbMath::equal(fabs(rx2), vf::basics::constant::one_over_sqrt3)) &&
+           UbMath::equal(fabs(rx2), vf::basics::constant::c1oSqrt2) || UbMath::equal(fabs(rx2), vf::basics::constant::c1oSqrt3)) &&
           (UbMath::equal(rx3, 0.0) || UbMath::equal(fabs(rx3), 1.0) ||
-           UbMath::equal(fabs(rx3), vf::basics::constant::one_over_sqrt2) || UbMath::equal(fabs(rx3), vf::basics::constant::one_over_sqrt3)))) {
+           UbMath::equal(fabs(rx3), vf::basics::constant::c1oSqrt2) || UbMath::equal(fabs(rx3), vf::basics::constant::c1oSqrt3)))) {
         throw UbException(UB_EXARGS, "nur fuer diskrete Boltzmannrichungen implementiert!!!");
     }
 
diff --git a/src/basics/utilities/UbMath.h b/src/basics/utilities/UbMath.h
index 5ba42eb6b0c00941c72ea8370ab3fe0cef71ba98..d9deaeab61412835829fe66d98d20cc9d42fca35 100644
--- a/src/basics/utilities/UbMath.h
+++ b/src/basics/utilities/UbMath.h
@@ -408,99 +408,6 @@ inline const T &min(const T &a1, const T &a2, const T &a3, const T &a4)
     //       return tmp;
 }
 
-//////////////////////////////////////////////////////////////////////////
-//
-// constants
-//
-//////////////////////////////////////////////////////////////////////////
-//static const double c8o27  = 8. / 27.;
-//static const double c2o27  = 2. / 27.;
-//static const double c1o54  = 1. / 54.;
-//static const double c1o216 = 1. / 216.;
-//static const double c9o2   = 9. / 2.; // 4.5
-//static const double c9o4   = 9. / 4.; // 2.25
-//static const double c3o9   = 3. / 9.;
-//static const double c3o54  = 3. / 54.;
-//static const double c3o216 = 3. / 216.;
-//
-//static const double c1o27 = 1. / 27.;
-//
-//static const double c1o72          = 1. / 72.; // 0.01388888
-//static const double c1o36          = 1. / 36.; // 0.02777777
-//static const double c1o48          = 1. / 48.; // 0.02083333
-//static const double c1o32          = 1. / 32.; // 0.03125
-//static const double c1o24          = 1. / 24.; // 0.04166666
-//static const double c1o20          = 1. / 20.; // 0.05
-//static const double c1o18          = 1. / 18.; // 0.05555555
-//static const double c1o16          = 1. / 16.; // 0.0625
-//static const double c1o12          = 1. / 12.; // 0.08333333
-//static const double c1o9           = 1. / 9.;  // 0.11111111
-//static const double c1o8           = 1. / 8.;  // 0.125
-//static const double c1o6           = 1. / 6.;  // 0.16666666
-//static const double c1o5           = 1. / 5.;  // 0.2
-//static const double c1o4           = 1. / 4.;  // 0.25
-//static const double c1o100         = 1. / 100.;
-//static const double c5o16          = 5. / 16.;        // 0.3125
-static const double c1o3           = 1. / 3.;         // 0.33333333
-//static const double c3o8           = 3. / 8.;         // 0.375
-//static const double c4o9           = 4. / 9.;         // 0.44444444
-//static const double c1o2           = 1. / 2.;         // 0.5
-//static const double c9o16          = 9. / 16.;        // 0.5625
-//static const double c2o3           = 2. / 3.;         // 0.66666666
-//static const double c3o4           = 3. / 4.;         // 0.75
-//static const double c3o2           = 3. / 2.;         // 1.5
-//static const double c4o3           = 4. / 3.;         // 1.33333333
-//static const double c5o3           = 5. / 3.;         // 1.66666666
-//static const double c9o5           = 9. / 5.;         // 1.8
-//static const double c2o9           = 2. / 9.;         // 0.22222222
-//static const double one_over_sqrt2 = 1.0 / sqrt(2.0); // 0.707106781
-//static const double one_over_sqrt3 = 1.0 / sqrt(3.0); // 0.577350269
-//static const double sqrt2          = sqrt(2.0);       // 1.4142135
-//static const double sqrt3          = sqrt(3.0);       // 1.7320508
-//static const double zeroReal       = 0.0;
-//static const double c1             = 1.0;
-//static const double c2             = 2.0;
-//static const double c3             = 3.0;
-//static const double c4             = 4.0;
-//static const double c5             = 5.0;
-//static const double c6             = 6.0;
-//static const double c7             = 7.0;
-//static const double c8             = 8.0;
-//static const double c9             = 9.0;
-//static const double c14            = 14.0;
-//static const double c15            = 15.0;
-//static const double c16            = 16.0;
-//static const double c18            = 18.0;
-//static const double c21            = 21.0;
-//static const double c24            = 24.0;
-//static const double c28            = 28.0;
-//static const double c29            = 29.0;
-//static const double c36            = 36.0;
-//static const double c48            = 48.0;
-//static const double c50            = 50.0;
-//static const double c56            = 56.0;
-//static const double c152           = 152.0;
-//static const double c130           = 130.0;
-//static const double one            = 1.0;
-//static const double two            = 2.0;
-//static const double three          = 3.0;
-//static const double four           = 4.0;
-//static const double five           = 5.0;
-//static const double six            = 6.0;
-//static const double seven          = 7.0;
-//static const double eight          = 8.0;
-//static const double nine           = 9.0;
-//static const double fourteen       = 14.0;
-//static const double fiveteen       = 15.0;
-//static const double sixteen        = 16.0;
-//static const double twentyone      = 21.0;
-//static const double twentyfour     = 24.0;
-//static const double twentyeight    = 28.0;
-//static const double twentynine     = 29.0;
-//static const double fourtyeight    = 48.0;
-//static const double fifty          = 50.0;
-//static const double fiftysix       = 56.0;
-
 } // namespace UbMath
 
 #endif
diff --git a/src/cpu/LiggghtsCoupling/CMakeLists.txt b/src/cpu/LiggghtsCoupling/CMakeLists.txt
index ed9d1f0e2bd8d0302f1d37aa3bde8a120ceb2312..3aa679efdd83810ec0e55f651589e7b531d3971b 100644
--- a/src/cpu/LiggghtsCoupling/CMakeLists.txt
+++ b/src/cpu/LiggghtsCoupling/CMakeLists.txt
@@ -1,7 +1,7 @@
 
 set(LIGGGHTS_LIBRARIES optimized ${LIGGGHTS_RELEASE_LIBRARY} debug ${LIGGGHTS_DEBUG_LIBRARY})
 
-vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX VirtualFluidsCore ${LIGGGHTS_LIBRARIES})
+vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX cpu_core ${LIGGGHTS_LIBRARIES})
 
 vf_get_library_name(library_name)
 
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp
index efe93f4c951684e41e6dd1c4d2b81c57c711727f..7c85c77b87f6d0079e5cd82520b932e76433d012 100644
--- a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp
+++ b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp
@@ -226,66 +226,66 @@ void IBcumulantK17LBMKernel::calculate(int step)
                     LBMReal fEqSolid[D3Q27System::ENDF + 1];
                     LBMReal fPre[D3Q27System::ENDF + 1];
 
-                    f[vf::lbm::dir::DIR_000] = mfbbb;
-
-                    f[vf::lbm::dir::DIR_P00] = mfcbb;
-                    f[vf::lbm::dir::DIR_0P0] = mfbcb;
-                    f[vf::lbm::dir::DIR_00P] = mfbbc;
-                    f[vf::lbm::dir::DIR_PP0] = mfccb;
-                    f[vf::lbm::dir::DIR_MP0] = mfacb;
-                    f[vf::lbm::dir::DIR_P0P] = mfcbc;
-                    f[vf::lbm::dir::DIR_M0P] = mfabc;
-                    f[vf::lbm::dir::DIR_0PP] = mfbcc;
-                    f[vf::lbm::dir::DIR_0MP] = mfbac;
-                    f[vf::lbm::dir::DIR_PPP] = mfccc;
-                    f[vf::lbm::dir::DIR_MPP] = mfacc;
-                    f[vf::lbm::dir::DIR_PMP] = mfcac;
-                    f[vf::lbm::dir::DIR_MMP] = mfaac;
-
-                    f[vf::lbm::dir::DIR_M00] = mfabb;
-                    f[vf::lbm::dir::DIR_0M0] = mfbab;
-                    f[vf::lbm::dir::DIR_00M] = mfbba;
-                    f[vf::lbm::dir::DIR_MM0] = mfaab;
-                    f[vf::lbm::dir::DIR_PM0] = mfcab;
-                    f[vf::lbm::dir::DIR_M0M] = mfaba;
-                    f[vf::lbm::dir::DIR_P0M] = mfcba;
-                    f[vf::lbm::dir::DIR_0MM] = mfbaa;
-                    f[vf::lbm::dir::DIR_0PM] = mfbca;
-                    f[vf::lbm::dir::DIR_MMM] = mfaaa;
-                    f[vf::lbm::dir::DIR_PMM] = mfcaa;
-                    f[vf::lbm::dir::DIR_MPM] = mfaca;
-                    f[vf::lbm::dir::DIR_PPM] = mfcca;
+                    f[vf::lbm::dir::d000] = mfbbb;
+
+                    f[vf::lbm::dir::dP00] = mfcbb;
+                    f[vf::lbm::dir::d0P0] = mfbcb;
+                    f[vf::lbm::dir::d00P] = mfbbc;
+                    f[vf::lbm::dir::dPP0] = mfccb;
+                    f[vf::lbm::dir::dMP0] = mfacb;
+                    f[vf::lbm::dir::dP0P] = mfcbc;
+                    f[vf::lbm::dir::dM0P] = mfabc;
+                    f[vf::lbm::dir::d0PP] = mfbcc;
+                    f[vf::lbm::dir::d0MP] = mfbac;
+                    f[vf::lbm::dir::dPPP] = mfccc;
+                    f[vf::lbm::dir::dMPP] = mfacc;
+                    f[vf::lbm::dir::dPMP] = mfcac;
+                    f[vf::lbm::dir::dMMP] = mfaac;
+
+                    f[vf::lbm::dir::dM00] = mfabb;
+                    f[vf::lbm::dir::d0M0] = mfbab;
+                    f[vf::lbm::dir::d00M] = mfbba;
+                    f[vf::lbm::dir::dMM0] = mfaab;
+                    f[vf::lbm::dir::dPM0] = mfcab;
+                    f[vf::lbm::dir::dM0M] = mfaba;
+                    f[vf::lbm::dir::dP0M] = mfcba;
+                    f[vf::lbm::dir::d0MM] = mfbaa;
+                    f[vf::lbm::dir::d0PM] = mfbca;
+                    f[vf::lbm::dir::dMMM] = mfaaa;
+                    f[vf::lbm::dir::dPMM] = mfcaa;
+                    f[vf::lbm::dir::dMPM] = mfaca;
+                    f[vf::lbm::dir::dPPM] = mfcca;
 
                     if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) {
-                        fPre[vf::lbm::dir::DIR_000] = mfbbb;
-
-                        fPre[vf::lbm::dir::DIR_P00] = mfcbb;
-                        fPre[vf::lbm::dir::DIR_0P0] = mfbcb;
-                        fPre[vf::lbm::dir::DIR_00P] = mfbbc;
-                        fPre[vf::lbm::dir::DIR_PP0] = mfccb;
-                        fPre[vf::lbm::dir::DIR_MP0] = mfacb;
-                        fPre[vf::lbm::dir::DIR_P0P] = mfcbc;
-                        fPre[vf::lbm::dir::DIR_M0P] = mfabc;
-                        fPre[vf::lbm::dir::DIR_0PP] = mfbcc;
-                        fPre[vf::lbm::dir::DIR_0MP] = mfbac;
-                        fPre[vf::lbm::dir::DIR_PPP] = mfccc;
-                        fPre[vf::lbm::dir::DIR_MPP] = mfacc;
-                        fPre[vf::lbm::dir::DIR_PMP] = mfcac;
-                        fPre[vf::lbm::dir::DIR_MMP] = mfaac;
+                        fPre[vf::lbm::dir::d000] = mfbbb;
+
+                        fPre[vf::lbm::dir::dP00] = mfcbb;
+                        fPre[vf::lbm::dir::d0P0] = mfbcb;
+                        fPre[vf::lbm::dir::d00P] = mfbbc;
+                        fPre[vf::lbm::dir::dPP0] = mfccb;
+                        fPre[vf::lbm::dir::dMP0] = mfacb;
+                        fPre[vf::lbm::dir::dP0P] = mfcbc;
+                        fPre[vf::lbm::dir::dM0P] = mfabc;
+                        fPre[vf::lbm::dir::d0PP] = mfbcc;
+                        fPre[vf::lbm::dir::d0MP] = mfbac;
+                        fPre[vf::lbm::dir::dPPP] = mfccc;
+                        fPre[vf::lbm::dir::dMPP] = mfacc;
+                        fPre[vf::lbm::dir::dPMP] = mfcac;
+                        fPre[vf::lbm::dir::dMMP] = mfaac;
                           
-                        fPre[vf::lbm::dir::DIR_M00] = mfabb;
-                        fPre[vf::lbm::dir::DIR_0M0] = mfbab;
-                        fPre[vf::lbm::dir::DIR_00M] = mfbba;
-                        fPre[vf::lbm::dir::DIR_MM0] = mfaab;
-                        fPre[vf::lbm::dir::DIR_PM0] = mfcab;
-                        fPre[vf::lbm::dir::DIR_M0M] = mfaba;
-                        fPre[vf::lbm::dir::DIR_P0M] = mfcba;
-                        fPre[vf::lbm::dir::DIR_0MM] = mfbaa;
-                        fPre[vf::lbm::dir::DIR_0PM] = mfbca;
-                        fPre[vf::lbm::dir::DIR_MMM] = mfaaa;
-                        fPre[vf::lbm::dir::DIR_PMM] = mfcaa;
-                        fPre[vf::lbm::dir::DIR_MPM] = mfaca;
-                        fPre[vf::lbm::dir::DIR_PPM] = mfcca;
+                        fPre[vf::lbm::dir::dM00] = mfabb;
+                        fPre[vf::lbm::dir::d0M0] = mfbab;
+                        fPre[vf::lbm::dir::d00M] = mfbba;
+                        fPre[vf::lbm::dir::dMM0] = mfaab;
+                        fPre[vf::lbm::dir::dPM0] = mfcab;
+                        fPre[vf::lbm::dir::dM0M] = mfaba;
+                        fPre[vf::lbm::dir::dP0M] = mfcba;
+                        fPre[vf::lbm::dir::d0MM] = mfbaa;
+                        fPre[vf::lbm::dir::d0PM] = mfbca;
+                        fPre[vf::lbm::dir::dMMM] = mfaaa;
+                        fPre[vf::lbm::dir::dPMM] = mfcaa;
+                        fPre[vf::lbm::dir::dMPM] = mfaca;
+                        fPre[vf::lbm::dir::dPPM] = mfcca;
                     }
 
                     (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0);
@@ -783,35 +783,35 @@ void IBcumulantK17LBMKernel::calculate(int step)
 
                     (*this->restDistributionsF)(x1, x2, x3) = mfbbb;
                     //////////////////////////////////////////////////////////////////////////
-                    f[vf::lbm::dir::DIR_000] = mfbbb;
+                    f[vf::lbm::dir::d000] = mfbbb;
                      
-                    f[vf::lbm::dir::DIR_P00]  = mfcbb;
-                    f[vf::lbm::dir::DIR_0P0]  = mfbcb;
-                    f[vf::lbm::dir::DIR_00P]  = mfbbc;
-                    f[vf::lbm::dir::DIR_PP0]  = mfccb;
-                    f[vf::lbm::dir::DIR_MP0]  = mfacb;
-                    f[vf::lbm::dir::DIR_P0P]  = mfcbc;
-                    f[vf::lbm::dir::DIR_M0P]  = mfabc;
-                    f[vf::lbm::dir::DIR_0PP]  = mfbcc;
-                    f[vf::lbm::dir::DIR_0MP]  = mfbac;
-                    f[vf::lbm::dir::DIR_PPP]  = mfccc;
-                    f[vf::lbm::dir::DIR_MPP]  = mfacc;
-                    f[vf::lbm::dir::DIR_PMP]  = mfcac;
-                    f[vf::lbm::dir::DIR_MMP]  = mfaac;
+                    f[vf::lbm::dir::dP00]  = mfcbb;
+                    f[vf::lbm::dir::d0P0]  = mfbcb;
+                    f[vf::lbm::dir::d00P]  = mfbbc;
+                    f[vf::lbm::dir::dPP0]  = mfccb;
+                    f[vf::lbm::dir::dMP0]  = mfacb;
+                    f[vf::lbm::dir::dP0P]  = mfcbc;
+                    f[vf::lbm::dir::dM0P]  = mfabc;
+                    f[vf::lbm::dir::d0PP]  = mfbcc;
+                    f[vf::lbm::dir::d0MP]  = mfbac;
+                    f[vf::lbm::dir::dPPP]  = mfccc;
+                    f[vf::lbm::dir::dMPP]  = mfacc;
+                    f[vf::lbm::dir::dPMP]  = mfcac;
+                    f[vf::lbm::dir::dMMP]  = mfaac;
                                      
-                    f[vf::lbm::dir::DIR_M00]  = mfabb;
-                    f[vf::lbm::dir::DIR_0M0]  = mfbab;
-                    f[vf::lbm::dir::DIR_00M]  = mfbba;
-                    f[vf::lbm::dir::DIR_MM0]  = mfaab;
-                    f[vf::lbm::dir::DIR_PM0]  = mfcab;
-                    f[vf::lbm::dir::DIR_M0M]  = mfaba;
-                    f[vf::lbm::dir::DIR_P0M]  = mfcba;
-                    f[vf::lbm::dir::DIR_0MM]  = mfbaa;
-                    f[vf::lbm::dir::DIR_0PM]  = mfbca;
-                    f[vf::lbm::dir::DIR_MMM]  = mfaaa;
-                    f[vf::lbm::dir::DIR_PMM]  = mfcaa;
-                    f[vf::lbm::dir::DIR_MPM]  = mfaca;
-                    f[vf::lbm::dir::DIR_PPM]  = mfcca;
+                    f[vf::lbm::dir::dM00]  = mfabb;
+                    f[vf::lbm::dir::d0M0]  = mfbab;
+                    f[vf::lbm::dir::d00M]  = mfbba;
+                    f[vf::lbm::dir::dMM0]  = mfaab;
+                    f[vf::lbm::dir::dPM0]  = mfcab;
+                    f[vf::lbm::dir::dM0M]  = mfaba;
+                    f[vf::lbm::dir::dP0M]  = mfcba;
+                    f[vf::lbm::dir::d0MM]  = mfbaa;
+                    f[vf::lbm::dir::d0PM]  = mfbca;
+                    f[vf::lbm::dir::dMMM]  = mfaaa;
+                    f[vf::lbm::dir::dPMM]  = mfcaa;
+                    f[vf::lbm::dir::dMPM]  = mfaca;
+                    f[vf::lbm::dir::dPPM]  = mfcca;
                 }
                     if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) {
                     //                    if ((*particleData)(x1, x2, x3)->solidFraction < SOLFRAC_MIN)
@@ -829,8 +829,8 @@ void IBcumulantK17LBMKernel::calculate(int step)
                                         D3Q27System::calcCompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]);
                     
                                         if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) {
-                                        double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000];
-                                        f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + bb0;
+                                        double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
+                                        f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0;
                                             for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
                                                 const int iOpp        = D3Q27System::INVDIR[iPop];
                                                 double const bb       = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
@@ -853,8 +853,8 @@ void IBcumulantK17LBMKernel::calculate(int step)
                     //#endif
                                             double const oneMinB = 1. - B;
                     
-                                            double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000];
-                                            f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + oneMinB * (f[vf::lbm::dir::DIR_000] - fPre[vf::lbm::dir::DIR_000]) + B * bb0;
+                                            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
+                                            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0;
                     
                                             for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
                                                 int const iOpp = D3Q27System::INVDIR[iPop];
@@ -870,35 +870,35 @@ void IBcumulantK17LBMKernel::calculate(int step)
                                             }
                                         } /* if solidFraction > SOLFRAC_MAX */
 
-                    (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::DIR_000];
-
-                    (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::DIR_M00];
-                    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::DIR_0M0];
-                    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::DIR_00M];
-                    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::DIR_MM0];
-                    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PM0];
-                    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::DIR_M0M];
-                    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::DIR_P0M];
-                    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::DIR_0MM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::DIR_0PM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::DIR_MMM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PMM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MPM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PPM];
-
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::DIR_P00];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::DIR_0P0];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::DIR_00P];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PP0];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MP0];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_P0P];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::DIR_M0P];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::DIR_0PP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::DIR_0MP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::DIR_PPP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::DIR_MPP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_PMP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::DIR_MMP];
+                    (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000];
+
+                    (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00];
+                    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0];
+                    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M];
+                    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0];
+                    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0];
+                    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M];
+                    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M];
+                    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM];
+                    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM];
+                    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM];
+                    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM];
+                    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM];
+                    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM];
+
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP];
+                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP];
                     }
                 }
             }
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp
index c502c4b48150e558aa785fa1bdc8c16bbecc1986..c935693c7157b77df9fe2566363e0a424f0737b3 100644
--- a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp
+++ b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp
@@ -305,24 +305,24 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                     ////////////////////////////////Momentum conservation experiment 06.03.2023
                     // surfacetension
 
-                    if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[DIR_000] <= c1o2) &&
-                        ((phi[DIR_P00] > c1o2) || (phi[DIR_M00] > c1o2) || (phi[DIR_00P] > c1o2) || (phi[DIR_00M] > c1o2) || (phi[DIR_0M0] > c1o2) || (phi[DIR_0P0] > c1o2) || (phi[DIR_PP0] > c1o2) || (phi[DIR_PM0] > c1o2) || (phi[DIR_P0P] > c1o2) || (phi[DIR_P0M] > c1o2) || (phi[DIR_MP0] > c1o2) ||
-                         (phi[DIR_MM0] > c1o2) || (phi[DIR_M0P] > c1o2) || (phi[DIR_M0M] > c1o2) || (phi[DIR_0PM] > c1o2) || (phi[DIR_0MM] > c1o2) || (phi[DIR_0PP] > c1o2) || (phi[DIR_0MP] > c1o2) || (phi[DIR_PPP] > c1o2) || (phi[DIR_PMP] > c1o2) || (phi[DIR_MPP] > c1o2) || (phi[DIR_MMP] > c1o2) ||
-                         (phi[DIR_PPM] > c1o2) || (phi[DIR_PMM] > c1o2) || (phi[DIR_MPM] > c1o2) || (phi[DIR_MMM] > c1o2))) {
+                    if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000] <= c1o2) &&
+                        ((phi[dP00] > c1o2) || (phi[dM00] > c1o2) || (phi[d00P] > c1o2) || (phi[d00M] > c1o2) || (phi[d0M0] > c1o2) || (phi[d0P0] > c1o2) || (phi[dPP0] > c1o2) || (phi[dPM0] > c1o2) || (phi[dP0P] > c1o2) || (phi[dP0M] > c1o2) || (phi[dMP0] > c1o2) ||
+                         (phi[dMM0] > c1o2) || (phi[dM0P] > c1o2) || (phi[dM0M] > c1o2) || (phi[d0PM] > c1o2) || (phi[d0MM] > c1o2) || (phi[d0PP] > c1o2) || (phi[d0MP] > c1o2) || (phi[dPPP] > c1o2) || (phi[dPMP] > c1o2) || (phi[dMPP] > c1o2) || (phi[dMMP] > c1o2) ||
+                         (phi[dPPM] > c1o2) || (phi[dPMM] > c1o2) || (phi[dMPM] > c1o2) || (phi[dMMM] > c1o2))) {
                         real vx = (*vxNode)(x1, x2, x3);
                         real vy = (*vyNode)(x1, x2, x3);
                         real vz = (*vzNode)(x1, x2, x3);
                         findNeighbors(phaseField, x1, x2, x3);
                         real laplacePressure = c12o1 * sigma * computeCurvature_phi();
                         //                  if (step > 5000)
-                        //                       UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[DIR_000]<< "\n");
+                        //                       UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n");
                         findNeighbors(phaseFieldOld, x1, x2, x3);
 
                         // 16.03.23 c: BB gas side with updated boundary velocity
 
                         distribution->getDistributionInv(ff, x1, x2, x3);
                         real rhoG;
-                        if (phi[DIR_000] > c1o2) { // initialization necessary
+                        if (phi[d000] > c1o2) { // initialization necessary
                             real sumRho = 0;
                             real sumWeight = 1.e-100;
                             for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -356,22 +356,22 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                         // real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
                                         real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; // fL -feqOLD + feqNew;
                                                                                                                                        // real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC);
-                                        distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+                                        distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
                                         ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!)
                                         // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
                                         // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
                                         // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 ));
                                         // real fBC = fG - feqOLD + feqNew;
-                                        // distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir);
+                                        // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
                                     }
                                 }
                             }
-                            // distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+                            // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
                             {
-                                real fL = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
-                                real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-                                real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz);
-                                distribution->setDistributionForDirection(fL - feqOLD + feqNew, x1, x2, x3, DIR_000);
+                                real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
+                                real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
+                                real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz);
+                                distribution->setPostCollisionDistributionForDirection(fL - feqOLD + feqNew, x1, x2, x3, d000);
                             }
 
                         } else { // no refill of gas required
@@ -400,7 +400,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                         // (c1o1 / collFactorL - c1o1) + feqNew;
 
                                         // if ((*phaseField)(x1, x2, x3) <= c1o2)
-                                        distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+                                        distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
                                         if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
                                             // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
                                             // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -414,10 +414,10 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                             // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) *
                                             // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-                                            // distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1,
-                                            // x2, x3, fdir); distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC *
+                                            // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1,
+                                            // x2, x3, fdir); distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC *
                                             // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0
-                                            // - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); real number = 666; distribution->setDistributionForDirection((fBC + fG) / densityRatio *
+                                            // - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); real number = 666; distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio *
                                             // 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
                                             ////	real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
                                             ////	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
@@ -426,7 +426,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                             //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 
                                             ////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            //	distribution->setDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3,
+                                            //	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3,
                                             //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
                                             //	//if (vxBC != 0) {
                                             //	//	int set = 0;
@@ -458,7 +458,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                                                     (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
                                                                 laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
                                             // laplacePressureBC *= sigma;
-                                            distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1,
+                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1,
                                                                                       x2, x3, fdir);
                                         }
                                     }
@@ -499,15 +499,15 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                             // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) *
                                             // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-                                            // distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
-                                            // distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC *
-                                            // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); distribution->setDistributionForDirection(0, x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0
+                                            // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
+                                            // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC *
+                                            // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0
                                             // - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
                                             //	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
                                             //D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); 	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
                                             //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
                                             //	//real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC;
-                                            //	distribution->setDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG)  - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3,
+                                            //	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG)  - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3,
                                             //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 
                                             ////	real number = 666;
@@ -538,7 +538,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                                                     (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
                                                                 laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
                                             // laplacePressureBC *= sigma;
-                                            distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1,
+                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1,
                                                                                       x2, x3, fdir);
                                         }
 
@@ -581,7 +581,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                         real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
                                         real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
                                         ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-                                        distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+                                        distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
                                     }
                                 }
 
@@ -595,7 +595,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                 //		//vBC = (vBC + vDir) / (c2o1 -( vBC - vDir));
                                 //		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir;
                                 //		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz *
-                                //D3Q27System::DX3[fdir]); 		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); 		distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); 		ff[fdir] = fL;
+                                //D3Q27System::DX3[fdir]); 		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); 		distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); 		ff[fdir] = fL;
                                 //	}
                                 //	if (!(phi[fdir] > c1o2)) {
                                 //		//std::cout << "Eq at dir=" << fdir << "\n";
@@ -603,7 +603,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                 //		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
                                 //		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
                                 //		real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-                                //		distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+                                //		distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
                                 //		ff[fdir] = feqL;
                                 //	}
                                 // }
@@ -611,26 +611,26 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                                 // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
                                 //	sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
                                 // }
-                                // ff[DIR_000] = rhoL - sumRho2;
+                                // ff[d000] = rhoL - sumRho2;
                                 // rhoL = 27.0 / 18.0 * sumRho2;
                                 // std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n";
                                 D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-                                // std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[DIR_000]<<"\n";
-                                // distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+                                // std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n";
+                                // distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
                                 {
-                                    real fG = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
-                                    real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-                                    real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-                                    distribution->setDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, DIR_000);
+                                    real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
+                                    real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
+                                    real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+                                    distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000);
                                 }
                                 // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
                                 //	ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
                                 // }
                                 // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-                                // std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
+                                // std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
 
-                                // real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-                                // distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000);
+                                // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+                                // distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
                             }
                         }
 
@@ -687,66 +687,66 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                     real fEqSolid[D3Q27System::ENDF + 1];
                     real fPre[D3Q27System::ENDF + 1];
 
-                    f[vf::lbm::dir::DIR_000] = mfbbb;
-
-                    f[vf::lbm::dir::DIR_P00] = mfcbb;
-                    f[vf::lbm::dir::DIR_0P0] = mfbcb;
-                    f[vf::lbm::dir::DIR_00P] = mfbbc;
-                    f[vf::lbm::dir::DIR_PP0] = mfccb;
-                    f[vf::lbm::dir::DIR_MP0] = mfacb;
-                    f[vf::lbm::dir::DIR_P0P] = mfcbc;
-                    f[vf::lbm::dir::DIR_M0P] = mfabc;
-                    f[vf::lbm::dir::DIR_0PP] = mfbcc;
-                    f[vf::lbm::dir::DIR_0MP] = mfbac;
-                    f[vf::lbm::dir::DIR_PPP] = mfccc;
-                    f[vf::lbm::dir::DIR_MPP] = mfacc;
-                    f[vf::lbm::dir::DIR_PMP] = mfcac;
-                    f[vf::lbm::dir::DIR_MMP] = mfaac;
-
-                    f[vf::lbm::dir::DIR_M00] = mfabb;
-                    f[vf::lbm::dir::DIR_0M0] = mfbab;
-                    f[vf::lbm::dir::DIR_00M] = mfbba;
-                    f[vf::lbm::dir::DIR_MM0] = mfaab;
-                    f[vf::lbm::dir::DIR_PM0] = mfcab;
-                    f[vf::lbm::dir::DIR_M0M] = mfaba;
-                    f[vf::lbm::dir::DIR_P0M] = mfcba;
-                    f[vf::lbm::dir::DIR_0MM] = mfbaa;
-                    f[vf::lbm::dir::DIR_0PM] = mfbca;
-                    f[vf::lbm::dir::DIR_MMM] = mfaaa;
-                    f[vf::lbm::dir::DIR_PMM] = mfcaa;
-                    f[vf::lbm::dir::DIR_MPM] = mfaca;
-                    f[vf::lbm::dir::DIR_PPM] = mfcca;
+                    f[vf::lbm::dir::d000] = mfbbb;
+
+                    f[vf::lbm::dir::dP00] = mfcbb;
+                    f[vf::lbm::dir::d0P0] = mfbcb;
+                    f[vf::lbm::dir::d00P] = mfbbc;
+                    f[vf::lbm::dir::dPP0] = mfccb;
+                    f[vf::lbm::dir::dMP0] = mfacb;
+                    f[vf::lbm::dir::dP0P] = mfcbc;
+                    f[vf::lbm::dir::dM0P] = mfabc;
+                    f[vf::lbm::dir::d0PP] = mfbcc;
+                    f[vf::lbm::dir::d0MP] = mfbac;
+                    f[vf::lbm::dir::dPPP] = mfccc;
+                    f[vf::lbm::dir::dMPP] = mfacc;
+                    f[vf::lbm::dir::dPMP] = mfcac;
+                    f[vf::lbm::dir::dMMP] = mfaac;
+
+                    f[vf::lbm::dir::dM00] = mfabb;
+                    f[vf::lbm::dir::d0M0] = mfbab;
+                    f[vf::lbm::dir::d00M] = mfbba;
+                    f[vf::lbm::dir::dMM0] = mfaab;
+                    f[vf::lbm::dir::dPM0] = mfcab;
+                    f[vf::lbm::dir::dM0M] = mfaba;
+                    f[vf::lbm::dir::dP0M] = mfcba;
+                    f[vf::lbm::dir::d0MM] = mfbaa;
+                    f[vf::lbm::dir::d0PM] = mfbca;
+                    f[vf::lbm::dir::dMMM] = mfaaa;
+                    f[vf::lbm::dir::dPMM] = mfcaa;
+                    f[vf::lbm::dir::dMPM] = mfaca;
+                    f[vf::lbm::dir::dPPM] = mfcca;
 
                     if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) {
-                        fPre[vf::lbm::dir::DIR_000] = mfbbb;
-
-                        fPre[vf::lbm::dir::DIR_P00] = mfcbb;
-                        fPre[vf::lbm::dir::DIR_0P0] = mfbcb;
-                        fPre[vf::lbm::dir::DIR_00P] = mfbbc;
-                        fPre[vf::lbm::dir::DIR_PP0] = mfccb;
-                        fPre[vf::lbm::dir::DIR_MP0] = mfacb;
-                        fPre[vf::lbm::dir::DIR_P0P] = mfcbc;
-                        fPre[vf::lbm::dir::DIR_M0P] = mfabc;
-                        fPre[vf::lbm::dir::DIR_0PP] = mfbcc;
-                        fPre[vf::lbm::dir::DIR_0MP] = mfbac;
-                        fPre[vf::lbm::dir::DIR_PPP] = mfccc;
-                        fPre[vf::lbm::dir::DIR_MPP] = mfacc;
-                        fPre[vf::lbm::dir::DIR_PMP] = mfcac;
-                        fPre[vf::lbm::dir::DIR_MMP] = mfaac;
-
-                        fPre[vf::lbm::dir::DIR_M00] = mfabb;
-                        fPre[vf::lbm::dir::DIR_0M0] = mfbab;
-                        fPre[vf::lbm::dir::DIR_00M] = mfbba;
-                        fPre[vf::lbm::dir::DIR_MM0] = mfaab;
-                        fPre[vf::lbm::dir::DIR_PM0] = mfcab;
-                        fPre[vf::lbm::dir::DIR_M0M] = mfaba;
-                        fPre[vf::lbm::dir::DIR_P0M] = mfcba;
-                        fPre[vf::lbm::dir::DIR_0MM] = mfbaa;
-                        fPre[vf::lbm::dir::DIR_0PM] = mfbca;
-                        fPre[vf::lbm::dir::DIR_MMM] = mfaaa;
-                        fPre[vf::lbm::dir::DIR_PMM] = mfcaa;
-                        fPre[vf::lbm::dir::DIR_MPM] = mfaca;
-                        fPre[vf::lbm::dir::DIR_PPM] = mfcca;
+                        fPre[vf::lbm::dir::d000] = mfbbb;
+
+                        fPre[vf::lbm::dir::dP00] = mfcbb;
+                        fPre[vf::lbm::dir::d0P0] = mfbcb;
+                        fPre[vf::lbm::dir::d00P] = mfbbc;
+                        fPre[vf::lbm::dir::dPP0] = mfccb;
+                        fPre[vf::lbm::dir::dMP0] = mfacb;
+                        fPre[vf::lbm::dir::dP0P] = mfcbc;
+                        fPre[vf::lbm::dir::dM0P] = mfabc;
+                        fPre[vf::lbm::dir::d0PP] = mfbcc;
+                        fPre[vf::lbm::dir::d0MP] = mfbac;
+                        fPre[vf::lbm::dir::dPPP] = mfccc;
+                        fPre[vf::lbm::dir::dMPP] = mfacc;
+                        fPre[vf::lbm::dir::dPMP] = mfcac;
+                        fPre[vf::lbm::dir::dMMP] = mfaac;
+
+                        fPre[vf::lbm::dir::dM00] = mfabb;
+                        fPre[vf::lbm::dir::d0M0] = mfbab;
+                        fPre[vf::lbm::dir::d00M] = mfbba;
+                        fPre[vf::lbm::dir::dMM0] = mfaab;
+                        fPre[vf::lbm::dir::dPM0] = mfcab;
+                        fPre[vf::lbm::dir::dM0M] = mfaba;
+                        fPre[vf::lbm::dir::dP0M] = mfcba;
+                        fPre[vf::lbm::dir::d0MM] = mfbaa;
+                        fPre[vf::lbm::dir::d0PM] = mfbca;
+                        fPre[vf::lbm::dir::dMMM] = mfaaa;
+                        fPre[vf::lbm::dir::dPMM] = mfcaa;
+                        fPre[vf::lbm::dir::dMPM] = mfaca;
+                        fPre[vf::lbm::dir::dPPM] = mfcca;
                     }
 
                     (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0);
@@ -768,13 +768,13 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                         real normX2 = dX2_phi / denom;
                         real normX3 = dX3_phi / denom;
 
-                        collFactorM = phi[DIR_000] > c1o2 ? collFactorL : collFactorG;
-                        // real collFactorMInv = phi[DIR_000] > c1o2 ? collFactorG : collFactorL;
+                        collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG;
+                        // real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL;
 
-                        // real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+                        // real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
-                        real rho = phi[DIR_000] > c1o2 ? rhoH : rhoL;
+                        real rho = phi[d000] > c1o2 ? rhoH : rhoL;
 
                         real m0, m1, m2;
                         real rhoRef = c1o1;
@@ -790,7 +790,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
 
                         if (withForcing) {
                             muRho = rho;
-                            muPhi = phi[DIR_000];
+                            muPhi = phi[d000];
                             forcingX1 += muForcingX1.Eval();
                             forcingX2 += muForcingX2.Eval();
                             forcingX3 += muForcingX3.Eval();
@@ -838,8 +838,8 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
 
                         ////////////////////////////////////////////////////////////////////////////////////
                         real wadjust;
-                        //					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[DIR_000] * (c1o1 - phi[DIR_000]));
-                        // real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[DIR_000] * (c1o1 - phi[DIR_000]):c0o1));
+                        //					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000]));
+                        // real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1));
                         real qudricLimit = 0.01;
 
                         ////////////////////////////////////////////////////////////////////////////////////
@@ -955,7 +955,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                         real Dxz = -c3o1 * collFactorM * mfbab;
                         real Dyz = -c3o1 * collFactorM * mfabb;
 
-                        if (phi[DIR_000] > c1o2) {
+                        if (phi[d000] > c1o2) {
                             /// QR eddyviscosity:
                             real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
                             real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz);
@@ -975,7 +975,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
 
                         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                         // non Newtonian fluid collision factor
-                        if (phi[DIR_000] > c1o2) {
+                        if (phi[d000] > c1o2) {
                             real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
                             collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
                             collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM;
@@ -1141,7 +1141,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                         //////////////////////////////////////////////////////////////////////////
                         // write distribution
                         //////////////////////////////////////////////////////////////////////////
-                        //	if (phi[DIR_000] < c1o2) {
+                        //	if (phi[d000] < c1o2) {
                         (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;         //* rho * c1o3;
                         (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;         //* rho * c1o3;
                         (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;         //* rho * c1o3;
@@ -1171,35 +1171,35 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
 
                         (*this->restDistributionsF)(x1, x2, x3) = mfbbb; // *rho* c1o3;
 
-                        f[vf::lbm::dir::DIR_000] = mfbbb;
-
-                        f[vf::lbm::dir::DIR_P00] = mfcbb;
-                        f[vf::lbm::dir::DIR_0P0] = mfbcb;
-                        f[vf::lbm::dir::DIR_00P] = mfbbc;
-                        f[vf::lbm::dir::DIR_PP0] = mfccb;
-                        f[vf::lbm::dir::DIR_MP0] = mfacb;
-                        f[vf::lbm::dir::DIR_P0P] = mfcbc;
-                        f[vf::lbm::dir::DIR_M0P] = mfabc;
-                        f[vf::lbm::dir::DIR_0PP] = mfbcc;
-                        f[vf::lbm::dir::DIR_0MP] = mfbac;
-                        f[vf::lbm::dir::DIR_PPP] = mfccc;
-                        f[vf::lbm::dir::DIR_MPP] = mfacc;
-                        f[vf::lbm::dir::DIR_PMP] = mfcac;
-                        f[vf::lbm::dir::DIR_MMP] = mfaac;
-
-                        f[vf::lbm::dir::DIR_M00] = mfabb;
-                        f[vf::lbm::dir::DIR_0M0] = mfbab;
-                        f[vf::lbm::dir::DIR_00M] = mfbba;
-                        f[vf::lbm::dir::DIR_MM0] = mfaab;
-                        f[vf::lbm::dir::DIR_PM0] = mfcab;
-                        f[vf::lbm::dir::DIR_M0M] = mfaba;
-                        f[vf::lbm::dir::DIR_P0M] = mfcba;
-                        f[vf::lbm::dir::DIR_0MM] = mfbaa;
-                        f[vf::lbm::dir::DIR_0PM] = mfbca;
-                        f[vf::lbm::dir::DIR_MMM] = mfaaa;
-                        f[vf::lbm::dir::DIR_PMM] = mfcaa;
-                        f[vf::lbm::dir::DIR_MPM] = mfaca;
-                        f[vf::lbm::dir::DIR_PPM] = mfcca;
+                        f[vf::lbm::dir::d000] = mfbbb;
+
+                        f[vf::lbm::dir::dP00] = mfcbb;
+                        f[vf::lbm::dir::d0P0] = mfbcb;
+                        f[vf::lbm::dir::d00P] = mfbbc;
+                        f[vf::lbm::dir::dPP0] = mfccb;
+                        f[vf::lbm::dir::dMP0] = mfacb;
+                        f[vf::lbm::dir::dP0P] = mfcbc;
+                        f[vf::lbm::dir::dM0P] = mfabc;
+                        f[vf::lbm::dir::d0PP] = mfbcc;
+                        f[vf::lbm::dir::d0MP] = mfbac;
+                        f[vf::lbm::dir::dPPP] = mfccc;
+                        f[vf::lbm::dir::dMPP] = mfacc;
+                        f[vf::lbm::dir::dPMP] = mfcac;
+                        f[vf::lbm::dir::dMMP] = mfaac;
+
+                        f[vf::lbm::dir::dM00] = mfabb;
+                        f[vf::lbm::dir::d0M0] = mfbab;
+                        f[vf::lbm::dir::d00M] = mfbba;
+                        f[vf::lbm::dir::dMM0] = mfaab;
+                        f[vf::lbm::dir::dPM0] = mfcab;
+                        f[vf::lbm::dir::dM0M] = mfaba;
+                        f[vf::lbm::dir::dP0M] = mfcba;
+                        f[vf::lbm::dir::d0MM] = mfbaa;
+                        f[vf::lbm::dir::d0PM] = mfbca;
+                        f[vf::lbm::dir::dMMM] = mfaaa;
+                        f[vf::lbm::dir::dPMM] = mfcaa;
+                        f[vf::lbm::dir::dMPM] = mfaca;
+                        f[vf::lbm::dir::dPPM] = mfcca;
                     }
                     if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) {
                         real vx1, vx2, vx3, drho;
@@ -1212,10 +1212,10 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                         uPart[2] = (*particleData)(x1, x2, x3)->uPart[2];
 
                         D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]);
-                        real rhoPhaseField = (phi[DIR_000] > c1o2) ? c1o1 : c1o1 / densityRatio;
+                        real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio;
                         if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) {
-                            double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000];
-                            f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + bb0;
+                            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
+                            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0;
                             for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
                                 const int iOpp = D3Q27System::INVDIR[iPop];
                                 double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
@@ -1237,8 +1237,8 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                             // #endif
                             double const oneMinB = 1. - B;
 
-                            double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000];
-                            f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + oneMinB * (f[vf::lbm::dir::DIR_000] - fPre[vf::lbm::dir::DIR_000]) + B * bb0;
+                            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
+                            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0;
 
                             for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
                                 int const iOpp = D3Q27System::INVDIR[iPop];
@@ -1254,35 +1254,35 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
                             }
                         } /* if solidFraction > SOLFRAC_MAX */
 
-                        (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::DIR_000];
-
-                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::DIR_M00];
-                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::DIR_0M0];
-                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::DIR_00M];
-                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::DIR_MM0];
-                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PM0];
-                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::DIR_M0M];
-                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::DIR_P0M];
-                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::DIR_0MM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::DIR_0PM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::DIR_MMM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PMM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MPM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PPM];
-
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::DIR_P00];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::DIR_0P0];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::DIR_00P];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PP0];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MP0];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_P0P];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::DIR_M0P];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::DIR_0PP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::DIR_0MP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::DIR_PPP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::DIR_MPP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_PMP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::DIR_MMP];                   
+                        (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000];
+
+                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00];
+                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0];
+                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M];
+                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0];
+                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0];
+                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M];
+                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M];
+                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM];
+                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM];
+                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM];
+                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM];
+                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM];
+                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM];
+
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP];
+                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP];                   
                     }
 
 
@@ -1542,89 +1542,89 @@ void IBsharpInterfaceLBMKernel::calculate(int step)
 real IBsharpInterfaceLBMKernel::gradX1_phi()
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) +
-                   WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-                  +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+    return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) +
+                   WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+                  +WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
 }
 
 real IBsharpInterfaceLBMKernel::gradX2_phi()
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP]) - (phi[DIR_PMP] - phi[DIR_MPM]))) +
-                   WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0]) - (phi[DIR_PM0] - phi[DIR_MP0])))) +
-                  +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+    return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP]) - (phi[dPMP] - phi[dMPM]))) +
+                   WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0]) - (phi[dPM0] - phi[dMP0])))) +
+                  +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
 }
 
 real IBsharpInterfaceLBMKernel::gradX3_phi()
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) +
-                   WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-                  +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+    return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) +
+                   WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+                  +WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
 }
 
 real IBsharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL, real rhoDIV)
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) +
-                   WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) +
-                  +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00])));
+    return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) +
+                                      ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) +
+                   WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) +
+                                      ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
+                  +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
 }
 
 real IBsharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL, real rhoDIV)
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])))) +
-                   WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) +
-                  +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0])));
+    return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) +
+                                      ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) +
+                   WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) +
+                                      ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
+                  +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
 }
 
 real IBsharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) +
-                   WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) +
-                  +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M])));
+    return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) +
+                                      ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) +
+                   WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) +
+                                      ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
+                  +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
 }
 
 real IBsharpInterfaceLBMKernel::gradX1_phi2()
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) +
-                   WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-                  +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+    return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) +
+                   WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+                  +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 }
 
 real IBsharpInterfaceLBMKernel::gradX2_phi2()
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) +
-                   WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-                  +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+    return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) +
+                   WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+                  +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 }
 
 real IBsharpInterfaceLBMKernel::gradX3_phi2()
 {
     using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) +
-                   WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-                  +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+    return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) +
+                   WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+                  +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 }
 
 real IBsharpInterfaceLBMKernel::nabla2_phi()
 {
     using namespace D3Q27System;
     real sum = 0.0;
-    sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-    sum += WEIGTH[DIR_0PP] * ((((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) +
-                              (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))));
-    sum += WEIGTH[DIR_00P] * (((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])));
+    sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+    sum += WEIGTH[d0PP] * ((((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) +
+                              (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))));
+    sum += WEIGTH[d00P] * (((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])));
 
     return 6.0 * sum;
 }
@@ -1638,29 +1638,29 @@ real IBsharpInterfaceLBMKernel::computeCurvature_phi()
     real phiY = gradX2_phi();
     real phiZ = gradX3_phi();
     real phiXX =
-        c4o9 * (phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_0P0] + phi[DIR_MP0]) + (phi[DIR_PM0] - c2o1 * phi[DIR_0M0] + phi[DIR_MM0])) + ((phi[DIR_P0P] - c2o1 * phi[DIR_00P] + phi[DIR_M0P]) + (phi[DIR_P0M] - c2o1 * phi[DIR_00M] + phi[DIR_M0M]))) +
-                                                                      c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_0PP] + phi[DIR_MPP]) + (phi[DIR_PMP] - c2o1 * phi[DIR_0MP] + phi[DIR_MMP])) + ((phi[DIR_PPM] - c2o1 * phi[DIR_0PM] + phi[DIR_MPM]) + (phi[DIR_PMM] - c2o1 * phi[DIR_0MM] + phi[DIR_MMM]))));
+        c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) +
+                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM]))));
     real phiYY =
-        c4o9 * (phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_P00] + phi[DIR_PM0]) + (phi[DIR_MP0] - c2o1 * phi[DIR_M00] + phi[DIR_MM0])) + ((phi[DIR_0PP] - c2o1 * phi[DIR_00P] + phi[DIR_0MP]) + (phi[DIR_0PM] - c2o1 * phi[DIR_00M] + phi[DIR_0MM]))) +
-                                                                      c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_P0P] + phi[DIR_PMP]) + (phi[DIR_MPM] - c2o1 * phi[DIR_M0M] + phi[DIR_MMM])) + ((phi[DIR_MPP] - c2o1 * phi[DIR_M0P] + phi[DIR_MMP]) + (phi[DIR_PPM] - c2o1 * phi[DIR_P0M] + phi[DIR_PMM]))));
+        c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) +
+                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM]))));
     real phiZZ =
-        c4o9 * (phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]) + (c1o9 * (((phi[DIR_M0P] - c2o1 * phi[DIR_M00] + phi[DIR_M0M]) + (phi[DIR_P0P] - c2o1 * phi[DIR_P00] + phi[DIR_P0M])) + ((phi[DIR_0MP] - c2o1 * phi[DIR_0M0] + phi[DIR_0MM]) + (phi[DIR_0PP] - c2o1 * phi[DIR_0P0] + phi[DIR_0PM]))) +
-                                                                      c1o36 * (((phi[DIR_MPP] - c2o1 * phi[DIR_MP0] + phi[DIR_MPM]) + (phi[DIR_PMP] - c2o1 * phi[DIR_PM0] + phi[DIR_PMM])) + ((phi[DIR_MMP] - c2o1 * phi[DIR_MM0] + phi[DIR_MMM]) + (phi[DIR_PPP] - c2o1 * phi[DIR_PP0] + phi[DIR_PPM]))));
-    real phiXY = c1o4 * (c2o3 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]) + c1o6 * ((phi[DIR_MMP] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PPM] - phi[DIR_MPM])));
-    real phiXZ = c1o4 * (c2o3 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]) + c1o6 * ((phi[DIR_MPM] - phi[DIR_PPM] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PMP] - phi[DIR_MMP])));
-    real phiYZ = c1o4 * (c2o3 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]) + c1o6 * ((phi[DIR_MMM] - phi[DIR_MMP] + phi[DIR_MPP] - phi[DIR_MPM]) + (phi[DIR_PMM] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_PPM])));
+        c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) +
+                                                                      c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM]))));
+    real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM])));
+    real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP])));
+    real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM])));
 
     // non isotropic FD (to be improved):
-    // real phiX = (phi[DIR_P00] - phi[DIR_M00]) * c1o2; //gradX1_phi();
-    // real phiY = (phi[DIR_0P0] - phi[DIR_0M0]) * c1o2; //gradX2_phi();
-    // real phiZ = (phi[DIR_00P] - phi[DIR_00M]) * c1o2; //gradX3_phi();
-
-    // real phiXX = phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00];
-    // real phiYY = phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0];
-    // real phiZZ =( phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]);
-    // real phiXY = c1o4 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]);
-    // real phiXZ = c1o4 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]);
-    // real phiYZ = c1o4 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]);
+    // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi();
+    // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi();
+    // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi();
+
+    // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00];
+    // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0];
+    // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]);
+    // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]);
+    // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]);
+    // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]);
     // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
     return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
 }
@@ -1687,35 +1687,35 @@ void IBsharpInterfaceLBMKernel::computePhasefield()
                     int x2p = x2 + 1;
                     int x3p = x3 + 1;
 
-                    h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[DIR_000] = (*this->restDistributionsH1)(x1, x2, x3);
+                    h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+                    h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+                    h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+                    h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[d000] = (*this->restDistributionsH1)(x1, x2, x3);
                 }
             }
         }
@@ -1728,7 +1728,7 @@ void IBsharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::Cb
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi[DIR_000] = (*ph)(x1, x2, x3);
+    phi[d000] = (*ph)(x1, x2, x3);
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 
@@ -1747,7 +1747,7 @@ void IBsharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::C
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi2[DIR_000] = (*ph)(x1, x2, x3);
+    phi2[d000] = (*ph)(x1, x2, x3);
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 
diff --git a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp
index ff7a3bf1b19d5efd626f638d47dc05727fc2bc89..44109a14c34745af6a7fbc13ca71fc7cdbb405fb 100644
--- a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp
+++ b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp
@@ -17,10 +17,10 @@
 //        uPart[2] = (*particleData)(x1, x2, x3)->uPart[2];
 //
 //        D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]);
-//        real rhoPhaseField = (phi[DIR_000] > c1o2) ? c1o1 : c1o1 / densityRatio;
+//        real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio;
 //        if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) {
-//            double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000];
-//            f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + bb0;
+//            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
+//            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0;
 //            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
 //                const int iOpp = D3Q27System::INVDIR[iPop];
 //                double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
@@ -42,8 +42,8 @@
 //            // #endif
 //            double const oneMinB = 1. - B;
 //
-//            double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000];
-//            f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + oneMinB * (f[vf::lbm::dir::DIR_000] - fPre[vf::lbm::dir::DIR_000]) + B * bb0;
+//            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
+//            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0;
 //
 //            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
 //                int const iOpp = D3Q27System::INVDIR[iPop];
@@ -59,34 +59,34 @@
 //            }
 //        } /* if solidFraction > SOLFRAC_MAX */
 //
-//    //    (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::DIR_000];
+//    //    (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000];
 //
-//    //    (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::DIR_M00];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::DIR_0M0];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::DIR_00M];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::DIR_MM0];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PM0];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::DIR_M0M];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::DIR_P0M];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::DIR_0MM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::DIR_0PM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::DIR_MMM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PMM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MPM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PPM];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM];
+//    //    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM];
 //
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::DIR_P00];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::DIR_0P0];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::DIR_00P];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PP0];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MP0];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_P0P];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::DIR_M0P];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::DIR_0PP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::DIR_0MP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::DIR_PPP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::DIR_MPP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_PMP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::DIR_MMP];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP];
+//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP];
 //    //}
 //}
\ No newline at end of file
diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp
index 487077f080205cb33ca11748d1f611ca1f1a423d..ad192bf91868a321577f4e79f0729b2947bb0411 100644
--- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp
+++ b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp
@@ -34,8 +34,8 @@
 
 #include <comm.h>
 #include "LiggghtsPartitioningGridVisitor.h"
-#include "VirtualFluidsCore/Simulation/Grid3D.h"
-#include "VirtualFluidsCore/Simulation/Block3D.h"
+#include "cpu/core/Simulation/Grid3D.h"
+#include "cpu/core/Simulation/Block3D.h"
 
 LiggghtsPartitioningGridVisitor::LiggghtsPartitioningGridVisitor(int nx, int ny, int nz, LAMMPS_NS::LAMMPS *lmp) : nx(nx), ny(ny), nz(nz), lmp(*lmp)
 {
diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h
index 6fb5560ad7a93ca13005a24fcf976d4019576dd1..02a44807604cb7b122ec0a00a54dd90bc56b9ae6 100644
--- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h
+++ b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h
@@ -36,7 +36,7 @@
 #include <lammps.h>
 #include <vector>
 #include "basics/PointerDefinitions.h"
-#include "VirtualFluidsCore/Visitors/Grid3DVisitor.h"
+#include "cpu/core/Visitors/Grid3DVisitor.h"
 
 class LiggghtsCouplingWrapper;
 class Grid3D;
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp
index d438f80f53fcefd553813b0c9517e0fe545af96f..b9651628513343198190e3632c07a3f14e74d867 100644
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp
+++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp
@@ -69,10 +69,10 @@ void MultiphaseNoSlipBCStrategy::applyBC()
    real h2[D3Q27System::ENDF + 1];
    //LBMReal feq[D3Q27System::ENDF+1];
    //LBMReal heq[D3Q27System::ENDF+1];
-   distributions ->getDistributionInv(f, x1, x2, x3);
+   distributions ->getPostCollisionDistribution(f, x1, x2, x3);
    if (distributionsH2)
-       distributionsH2->getDistributionInv(h2, x1, x2, x3);
-   distributionsH->getDistributionInv(h, x1, x2, x3);
+       distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3);
+   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
   // LBMReal phi, vx1, vx2, vx3, p1;
    
  //  D3Q27System::calcDensity(h, phi);
@@ -88,16 +88,16 @@ void MultiphaseNoSlipBCStrategy::applyBC()
          //quadratic bounce back
          const int invDir = D3Q27System::INVDIR[fdir];
 		 real fReturn = f[invDir];
-         //distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-         distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
+         //distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
          real hReturn = h[invDir];
-		// distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-         distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
+		// distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
          if (distributionsH2)
          {
              real h2Return = h2[invDir];
-             distributionsH2->setDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB
-            // distributionsH2->setDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+             distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB
+            // distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
 
          }
       }
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp
index aae7dec82bde0bd3477558fd937f4058a26eddd0..6f858e837e1d8eeea6c10927338c9a7a64890d32 100644
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp
+++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp
@@ -87,33 +87,33 @@ void MultiphaseNonReflectingOutflowBCStrategy::applyBC()
     int direction = -1;
 
     // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) {
+    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
         nx1 += 1;
-        direction = DIR_P00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) {
+        direction = dP00;
+    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
         nx1 -= 1;
-        direction = DIR_M00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) {
+        direction = dM00;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
         nx2 += 1;
-        direction = DIR_0P0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) {
+        direction = d0P0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
         nx2 -= 1;
-        direction = DIR_0M0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) {
+        direction = d0M0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
         nx3 += 1;
-        direction = DIR_00P;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) {
+        direction = d00P;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
         nx3 -= 1;
-        direction = DIR_00M;
+        direction = d00M;
     } else
         UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
 
-    distributions->getDistribution(f, x1, x2, x3);
-    distributions->getDistribution(ftemp, nx1, nx2, nx3);
-    distributionsH->getDistribution(h, x1, x2, x3);
-    distributionsH->getDistribution(htemp, nx1, nx2, nx3);
-    distributionsH2->getDistribution(h2, x1, x2, x3);
-    distributionsH2->getDistribution(h2temp, nx1, nx2, nx3);
+    distributions->getPreCollisionDistribution(f, x1, x2, x3);
+    distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
+    distributionsH->getPreCollisionDistribution(h, x1, x2, x3);
+    distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3);
+    distributionsH2->getPreCollisionDistribution(h2, x1, x2, x3);
+    distributionsH2->getPreCollisionDistribution(h2temp, nx1, nx2, nx3);
 
     real /* phi,*/ p1, vx1, vx2, vx3;
 
@@ -122,375 +122,375 @@ void MultiphaseNonReflectingOutflowBCStrategy::applyBC()
     calcMacrosFct(f, p1, vx1, vx2, vx3);
 
     switch (direction) {
-        case DIR_P00:
-            f[DIR_P00] = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00];
-            f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0];
-            f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0];
-            f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P];
-            f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-
-            h[DIR_P00] = htemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P00];
-            h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PP0];
-            h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PM0];
-            h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0P];
-            h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0M];
-            h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPP];
-            h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMP];
-            h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPM];
-            h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMM];
-
-            distributionsH->setDistributionInvForDirection(h[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-            distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-
-            h2[DIR_P00] = c1o2 * (h2temp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_P00]);
-            h2[DIR_PP0] = c1o2 * (h2temp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PP0]);
-            h2[DIR_PM0] = c1o2 * (h2temp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PM0]);
-            h2[DIR_P0P] = c1o2 * (h2temp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_P0P]);
-            h2[DIR_P0M] = c1o2 * (h2temp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_P0M]);
-            h2[DIR_PPP] = c1o2 * (h2temp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PPP]);
-            h2[DIR_PMP] = c1o2 * (h2temp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PMP]);
-            h2[DIR_PPM] = c1o2 * (h2temp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PPM]);
-            h2[DIR_PMM] = c1o2 * (h2temp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PMM]);
-
-            distributionsH2->setDistributionInvForDirection(h2[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
+        case dP00:
+            f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00];
+            f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0];
+            f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0];
+            f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P];
+            f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+
+            h[dP00] = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00];
+            h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0];
+            h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0];
+            h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P];
+            h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M];
+            h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP];
+            h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP];
+            h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM];
+            h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM];
+
+            distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+
+            h2[dP00] = c1o2 * (h2temp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP00]);
+            h2[dPP0] = c1o2 * (h2temp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPP0]);
+            h2[dPM0] = c1o2 * (h2temp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPM0]);
+            h2[dP0P] = c1o2 * (h2temp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0P]);
+            h2[dP0M] = c1o2 * (h2temp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0M]);
+            h2[dPPP] = c1o2 * (h2temp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPP]);
+            h2[dPMP] = c1o2 * (h2temp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMP]);
+            h2[dPPM] = c1o2 * (h2temp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPM]);
+            h2[dPMM] = c1o2 * (h2temp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMM]);
+
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
 
             break;
-        case DIR_M00:
-            f[DIR_M00] = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00];
-            f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0];
-            f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0];
-            f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P];
-            f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-
-            h[DIR_M00] = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M00];
-            h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MP0];
-            h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MM0];
-            h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0P];
-            h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0M];
-            h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPP];
-            h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMP];
-            h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPM];
-            h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMM];
-
-            distributionsH->setDistributionInvForDirection(h[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-            distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-
-            h2[DIR_M00] = c1o2 * (htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_M00]);
-            h2[DIR_MP0] = c1o2 * (htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MP0]);
-            h2[DIR_MM0] = c1o2 * (htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MM0]);
-            h2[DIR_M0P] = c1o2 * (htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_M0P]);
-            h2[DIR_M0M] = c1o2 * (htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_M0M]);
-            h2[DIR_MPP] = c1o2 * (htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MPP]);
-            h2[DIR_MMP] = c1o2 * (htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MMP]);
-            h2[DIR_MPM] = c1o2 * (htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MPM]);
-            h2[DIR_MMM] = c1o2 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MMM]);
-
-            distributionsH2->setDistributionInvForDirection(h2[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+        case dM00:
+            f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00];
+            f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0];
+            f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0];
+            f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P];
+            f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+
+            h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00];
+            h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0];
+            h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0];
+            h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P];
+            h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M];
+            h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP];
+            h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP];
+            h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM];
+            h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM];
+
+            distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+
+            h2[dM00] = c1o2 * (htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM00]);
+            h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMP0]);
+            h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMM0]);
+            h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0P]);
+            h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0M]);
+            h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPP]);
+            h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMP]);
+            h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPM]);
+            h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMM]);
+
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
             break;
-        case DIR_0P0:
-            f[DIR_0P0] = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0];
-            f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0];
-            f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0];
-            f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP];
-            f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-
-            h[DIR_0P0] = htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0P0];
-            h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PP0];
-            h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MP0];
-            h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PP];
-            h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PM];
-            h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPP];
-            h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPP];
-            h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPM];
-            h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPM];
-
-            distributionsH->setDistributionInvForDirection(h[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-            distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-
-            h2[DIR_0P0] = c1o2 * (htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_0P0]);
-            h2[DIR_PP0] = c1o2 * (htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_PP0]);
-            h2[DIR_MP0] = c1o2 * (htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_MP0]);
-            h2[DIR_0PP] = c1o2 * (htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_0PP]);
-            h2[DIR_0PM] = c1o2 * (htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_0PM]);
-            h2[DIR_PPP] = c1o2 * (htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_PPP]);
-            h2[DIR_MPP] = c1o2 * (htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_MPP]);
-            h2[DIR_PPM] = c1o2 * (htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_PPM]);
-            h2[DIR_MPM] = c1o2 * (htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_MPM]);
-
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+        case d0P0:
+            f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0];
+            f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0];
+            f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0];
+            f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP];
+            f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+
+            h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0];
+            h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0];
+            h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0];
+            h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP];
+            h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM];
+            h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP];
+            h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP];
+            h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM];
+            h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM];
+
+            distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+
+            h2[d0P0] = c1o2 * (htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0P0]);
+            h2[dPP0] = c1o2 * (htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPP0]);
+            h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMP0]);
+            h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PP]);
+            h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PM]);
+            h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPP]);
+            h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPP]);
+            h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPM]);
+            h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPM]);
+
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
 
             break;
-        case DIR_0M0:
-            f[DIR_0M0] = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0];
-            f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0];
-            f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0];
-            f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP];
-            f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-
-            h[DIR_0M0] = htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0M0];
-            h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PM0];
-            h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MM0];
-            h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MP];
-            h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MM];
-            h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMP];
-            h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMP];
-            h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMM];
-            h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMM];
-
-            distributionsH->setDistributionInvForDirection(h[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-            distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-
-            h2[DIR_0M0] = c1o2 * (htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_0M0]);
-            h2[DIR_PM0] = c1o2 * (htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_PM0]);
-            h2[DIR_MM0] = c1o2 * (htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_MM0]);
-            h2[DIR_0MP] = c1o2 * (htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_0MP]);
-            h2[DIR_0MM] = c1o2 * (htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_0MM]);
-            h2[DIR_PMP] = c1o2 * (htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_PMP]);
-            h2[DIR_MMP] = c1o2 * (htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_MMP]);
-            h2[DIR_PMM] = c1o2 * (htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_PMM]);
-            h2[DIR_MMM] = c1o2 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_MMM]);
-
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+        case d0M0:
+            f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0];
+            f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0];
+            f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0];
+            f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP];
+            f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+
+            h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0];
+            h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0];
+            h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0];
+            h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP];
+            h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM];
+            h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP];
+            h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP];
+            h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM];
+            h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM];
+
+            distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+
+            h2[d0M0] = c1o2 * (htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0M0]);
+            h2[dPM0] = c1o2 * (htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPM0]);
+            h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMM0]);
+            h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MP]);
+            h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MM]);
+            h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMP]);
+            h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMP]);
+            h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMM]);
+            h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMM]);
+
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
 
             break;
-        case DIR_00P:
-            f[DIR_00P] = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P];
-            f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P];
-            f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P];
-            f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP];
-            f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP];
-
-            distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-
-            h[DIR_00P] = htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_00P];
-            h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_P0P];
-            h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_M0P];
-            h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0PP];
-            h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0MP];
-            h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PPP];
-            h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MPP];
-            h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PMP];
-            h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MMP];
-
-            distributionsH->setDistributionInvForDirection(h[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-            distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-
-            h2[DIR_00P] = c1o2 * (htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_00P]);
-            h2[DIR_P0P] = c1o2 * (htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_P0P]);
-            h2[DIR_M0P] = c1o2 * (htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_M0P]);
-            h2[DIR_0PP] = c1o2 * (htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_0PP]);
-            h2[DIR_0MP] = c1o2 * (htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_0MP]);
-            h2[DIR_PPP] = c1o2 * (htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_PPP]);
-            h2[DIR_MPP] = c1o2 * (htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_MPP]);
-            h2[DIR_PMP] = c1o2 * (htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_PMP]);
-            h2[DIR_MMP] = c1o2 * (htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_MMP]);
-
-            distributionsH2->setDistributionInvForDirection(h2[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+        case d00P:
+            f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P];
+            f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P];
+            f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P];
+            f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP];
+            f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+
+            h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P];
+            h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P];
+            h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P];
+            h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP];
+            h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP];
+            h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP];
+            h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP];
+            h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP];
+            h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP];
+
+            distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+            distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+
+            h2[d00P] = c1o2 * (htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d00P]);
+            h2[dP0P] = c1o2 * (htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dP0P]);
+            h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dM0P]);
+            h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0PP]);
+            h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0MP]);
+            h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPPP]);
+            h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMPP]);
+            h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPMP]);
+            h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMMP]);
+
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
 
             break;
-        case DIR_00M:
-            f[DIR_00M] = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M];
-            f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M];
-            f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M];
-            f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM];
-            f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-
-            h[DIR_00M] = htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_00M];
-            h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_P0M];
-            h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_M0M];
-            h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0PM];
-            h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0MM];
-            h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PPM];
-            h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MPM];
-            h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PMM];
-            h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MMM];
-
-            distributionsH->setDistributionInvForDirection(h[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-            distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-
-            h2[DIR_00M] = c1o2 * (htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_00M]);
-            h2[DIR_P0M] = c1o2 * (htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_P0M]);
-            h2[DIR_M0M] = c1o2 * (htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_M0M]);
-            h2[DIR_0PM] = c1o2 * (htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_0PM]);
-            h2[DIR_0MM] = c1o2 * (htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_0MM]);
-            h2[DIR_PPM] = c1o2 * (htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_PPM]);
-            h2[DIR_MPM] = c1o2 * (htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_MPM]);
-            h2[DIR_PMM] = c1o2 * (htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_PMM]);
-            h2[DIR_MMM] = c1o2 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_MMM]);
-
-            distributionsH2->setDistributionInvForDirection(h2[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+        case d00M:
+            f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M];
+            f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M];
+            f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M];
+            f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM];
+            f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+
+            h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M];
+            h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M];
+            h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M];
+            h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM];
+            h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM];
+            h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM];
+            h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM];
+            h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM];
+            h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM];
+
+            distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+            distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+
+            h2[d00M] = c1o2 * (htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d00M]);
+            h2[dP0M] = c1o2 * (htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dP0M]);
+            h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dM0M]);
+            h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0PM]);
+            h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0MM]);
+            h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPPM]);
+            h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMPM]);
+            h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPMM]);
+            h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMMM]);
+
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
 
             break;
         default:
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp
index f85d3c6503fbe645ecef115351c6e8fd11c287d1..adf21a72e9c3f4b58487af125e661ea787694a16 100644
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp
+++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp
@@ -77,10 +77,10 @@ void MultiphasePressureBCStrategy::applyBC()
    //LBMReal heq[D3Q27System::ENDF+1];
    LBMReal htemp[D3Q27System::ENDF+1];
    
-   distributions->getDistributionInv(f, x1, x2, x3);
-   distributionsH->getDistributionInv(h, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
+   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
    if (distributionsH2)
-       distributionsH2->getDistributionInv(h2, x1, x2, x3);
+       distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3);
    LBMReal phi, vx1, vx2, vx3, p1, phiBC;
    
    D3Q27System::calcDensity(h, phi);
@@ -97,10 +97,10 @@ void MultiphasePressureBCStrategy::applyBC()
    for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
        if (bcPtr->hasDensityBoundaryFlag(fdir)) {
            LBMReal ftemp = -f[D3Q27System::INVDIR[fdir]] + feq[fdir] + feq[D3Q27System::INVDIR[fdir]];
-           distributions->setDistributionForDirection(ftemp, x1, x2, x3, D3Q27System::INVDIR[fdir]);
+           distributions->setPostCollisionDistributionForDirection(ftemp, x1, x2, x3, D3Q27System::INVDIR[fdir]);
 
            LBMReal hReturn = -h[D3Q27System::INVDIR[fdir]] + htemp[fdir] + htemp[D3Q27System::INVDIR[fdir]];
-           distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, D3Q27System::INVDIR[fdir]);
+           distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, D3Q27System::INVDIR[fdir]);
        }
    }
 }
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp
index b394d2d5d249004225b533c63fdbd596224e4b33..a7d9d1c10a0495b7c33c3ded481e4c27c10262bd 100644
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp
+++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp
@@ -70,8 +70,8 @@ void MultiphaseSlipBCStrategy::applyBC()
    real h[D3Q27System::ENDF+1];
    real feq[D3Q27System::ENDF+1];
    real heq[D3Q27System::ENDF+1];
-   distributions->getDistributionInv(f, x1, x2, x3);
-   distributionsH->getDistributionInv(h, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
+   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
 
    real p1, vx1, vx2, vx3, phi, rho;
 
@@ -104,40 +104,40 @@ void MultiphaseSlipBCStrategy::applyBC()
          real velocity = vf::basics::constant::c0o1;
          switch (invDir)
          {
-         case DIR_P00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
-         case DIR_M00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
-         case DIR_0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
-         case DIR_0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
-         case DIR_00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
-         case DIR_00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
-         case DIR_PP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
-         case DIR_MM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
-         case DIR_PM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
-         case DIR_MP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
-         case DIR_P0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
-         case DIR_M0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
-         case DIR_P0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
-         case DIR_M0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
-         case DIR_0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
-         case DIR_0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
-         case DIR_0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
-         case DIR_0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
-         case DIR_PPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
-         case DIR_MMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
-         case DIR_PPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
-         case DIR_MMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
-         case DIR_PMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
-         case DIR_MPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
-         case DIR_PMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
-         case DIR_MPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
+         case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
+         case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
+         case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
+         case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
+         case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
+         case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
+         case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
+         case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
+         case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
+         case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
+         case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
+         case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
+         case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
+         case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
+         case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
+         case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
+         case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
+         case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
+         case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
+         case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
+         case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
+         case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
+         case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
+         case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
+         case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
+         case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
          default: throw UbException(UB_EXARGS, "unknown error");
          }
          real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q));
-         distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
 
 		 //real hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir]));
 		 real hReturn = h[invDir];
-		 distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+		 distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
       }
    }
 }
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp
index a0b334d8ee7a88471ca3e5c640e04a914f4171bd..d1037fa27a950dca373b13762849a2e040ccc03c 100644
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp
+++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp
@@ -77,10 +77,10 @@ void MultiphaseVelocityBCStrategy::applyBC()
    real heq[D3Q27System::ENDF+1];
    real htemp[D3Q27System::ENDF+1];
    
-   distributions->getDistributionInv(f, x1, x2, x3);
-   distributionsH->getDistributionInv(h, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
+   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
    if (distributionsH2)
-       distributionsH2->getDistributionInv(h2, x1, x2, x3);
+       distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3);
    real phi, vx1, vx2, vx3, p1, phiBC;
    
    D3Q27System::calcDensity(h, phi);
@@ -106,9 +106,9 @@ void MultiphaseVelocityBCStrategy::applyBC()
 		 //  LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir];
    //        //17.03.2021 Let us just set the plain eq
    //        //LBMReal hReturn = htemp[fdir];
-		 //  distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
+		 //  distributionsH->setPostCollisionDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
    //      //  if (distributionsH2)
-   //      //      distributionsH2->setDistributionForDirection(0, nx1, nx2, nx3, fdir);
+   //      //      distributionsH2->setPostCollisionDistributionForDirection(0, nx1, nx2, nx3, fdir);
 	  // }
    //}
    
@@ -122,15 +122,15 @@ void MultiphaseVelocityBCStrategy::applyBC()
 		 //16.03.2021 quick fix for velocity BC
          real fReturn = f[invDir] - velocity;
          //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q));
-        // distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB
-         distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB  
+        // distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB
+         distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB  
 
          real hReturn = htemp[invDir] + h[invDir] - heq[invDir] - velocity*phi;
-         distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
+         distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
          if (distributionsH2) {
              fReturn = h2[invDir] ;
-            // distributionsH2->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-             distributionsH2->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
+            // distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+             distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
          }
 
       }
diff --git a/src/cpu/MultiphaseFlow/CMakeLists.txt b/src/cpu/MultiphaseFlow/CMakeLists.txt
index 35765164bce5ce208f1c43fcc7345cbd77f4e999..261919282ce830bfcf1e364443c439338b642d88 100644
--- a/src/cpu/MultiphaseFlow/CMakeLists.txt
+++ b/src/cpu/MultiphaseFlow/CMakeLists.txt
@@ -1 +1 @@
-vf_add_library(PUBLIC_LINK VirtualFluidsCore)
\ No newline at end of file
+vf_add_library(PUBLIC_LINK cpu_core)
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp
index 2655e916025b1d2b085348c06cb95c425813d83d..f98663a3a2b7cb32e4b62c98abb354dc55b82564 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp
@@ -237,13 +237,13 @@ void MultiphaseCumulantLBMKernel::calculate(int step)
                         real dX3_phi = gradX3_phi();
 
                         real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-                        collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+                        collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-                        real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
                         if (withForcing) {
                             // muX1 = static_cast<double>(x1-1+ix1*maxX1);
@@ -310,41 +310,41 @@ void MultiphaseCumulantLBMKernel::calculate(int step)
                                                (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
                         }
 
-                        real gamma = WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                        real fac1      = (gamma - WEIGTH[DIR_000]) * c1o3 * rhoToPhi;
-                        forcingTerm[DIR_000] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
+                        real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+                        real fac1      = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi;
+                        forcingTerm[d000] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
                                             (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
                                             (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
 
                         //--------------------------------------------------------
 
-                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[DIR_0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[DIR_00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[DIR_PP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[DIR_MP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[DIR_P0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[DIR_M0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[DIR_0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[DIR_0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[DIR_PPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[DIR_MPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[DIR_PMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[DIR_MMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[DIR_M00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[DIR_0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[DIR_00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[DIR_MM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[DIR_PM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[DIR_M0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[DIR_P0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[DIR_0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[DIR_0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[DIR_MMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[DIR_PMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[DIR_MPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[DIR_PPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
+                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
 
                         real rho1 = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
                                        (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
@@ -1026,33 +1026,33 @@ void MultiphaseCumulantLBMKernel::calculate(int step)
                         }
 #endif
 
-                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00];
-                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[DIR_0P0];
-                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[DIR_00P];
-                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[DIR_PP0];
-                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[DIR_MP0];
-                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[DIR_P0P];
-                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[DIR_M0P];
-                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[DIR_0PP];
-                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[DIR_0MP];
-                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[DIR_PPP];
-                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[DIR_MPP];
-                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[DIR_PMP];
-                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[DIR_MMP];
-                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[DIR_M00];
-                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[DIR_0M0];
-                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[DIR_00M];
-                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[DIR_MM0];
-                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[DIR_PM0];
-                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[DIR_M0M];
-                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[DIR_P0M];
-                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[DIR_0MM];
-                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[DIR_0PM];
-                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[DIR_MMM];
-                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[DIR_PMM];
-                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[DIR_MPM];
-                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[DIR_PPM];
-                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[DIR_000];
+                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
+                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[d0P0];
+                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[d00P];
+                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[dPP0];
+                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[dMP0];
+                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[dP0P];
+                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[dM0P];
+                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[d0PP];
+                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[d0MP];
+                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[dPPP];
+                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[dMPP];
+                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[dPMP];
+                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[dMMP];
+                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[dM00];
+                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[d0M0];
+                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[d00M];
+                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[dMM0];
+                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[dPM0];
+                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[dM0M];
+                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[dP0M];
+                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[d0MM];
+                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[d0PM];
+                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[dMMM];
+                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[dPMM];
+                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[dMPM];
+                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[dPPM];
+                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[d000];
 
                         //////////////////////////////////////////////////////////////////////////
                         // write distribution for F
@@ -1093,84 +1093,84 @@ void MultiphaseCumulantLBMKernel::calculate(int step)
 
                         /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
 
-                        h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        h[DIR_0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        h[DIR_00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        h[DIR_PP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        h[DIR_MP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        h[DIR_P0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        h[DIR_M0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        h[DIR_0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        h[DIR_0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        h[DIR_PPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        h[DIR_MPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        h[DIR_PMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        h[DIR_MMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                        h[DIR_M00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        h[DIR_0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        h[DIR_00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        h[DIR_MM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        h[DIR_PM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        h[DIR_M0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        h[DIR_P0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        h[DIR_0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        h[DIR_0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        h[DIR_MMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        h[DIR_PMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        h[DIR_MPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        h[DIR_PPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        h[DIR_000] = (*this->zeroDistributionsH)(x1, x2, x3);
+                        h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                        h[d0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+                        h[d00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+                        h[dPP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+                        h[dMP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+                        h[dP0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+                        h[dM0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+                        h[d0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+                        h[d0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+                        h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+                        h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+                        h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+                        h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                        h[dM00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+                        h[d0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+                        h[d00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+                        h[dMM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+                        h[dPM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+                        h[dM0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+                        h[dP0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+                        h[d0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+                        h[d0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+                        h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                        h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                        h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                        h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                        h[d000] = (*this->zeroDistributionsH)(x1, x2, x3);
 
                         for (int dir = STARTF; dir < (ENDF + 1); dir++) {
                             real velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
                             real velSq1  = velProd * velProd;
                             real hEq; //, gEq;
 
-                            if (dir != DIR_000) {
+                            if (dir != d000) {
                                 real dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-                                real hSource     = (tauH - 0.5) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * (dirGrad_phi) / denom; 
-                                hEq = phi[DIR_000] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
+                                real hSource     = (tauH - 0.5) * (1.0 - phi[d000]) * (phi[d000]) * (dirGrad_phi) / denom; 
+                                hEq = phi[d000] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
 
                                 // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
                                 h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
 
                             } else {
-                                hEq = phi[DIR_000] * WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                                h[DIR_000] = h[DIR_000] - (h[DIR_000] - hEq) / (tauH); 
+                                hEq = phi[d000] * WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+                                h[d000] = h[d000] - (h[d000] - hEq) / (tauH); 
                             }
                         }
 
-                        (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[INV_P00];
-                        (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[INV_0P0];
-                        (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[INV_00P];
-                        (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[INV_PP0];
-                        (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[INV_MP0];
-                        (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[INV_P0P];
-                        (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[INV_M0P];
-                        (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[INV_0PP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[INV_0MP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[INV_PPP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[INV_MPP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[INV_PMP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[INV_MMP];
-
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[INV_M00];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[INV_0M0];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[INV_00M];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[INV_MM0];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[INV_PM0];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[INV_M0M];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[INV_P0M];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[INV_0MM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[INV_0PM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[INV_MMM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[INV_PMM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[INV_MPM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[INV_PPM];
-
-                        (*this->zeroDistributionsH)(x1, x2, x3) = h[DIR_000];
+                        (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[iP00];
+                        (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[i0P0];
+                        (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[i00P];
+                        (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[iPP0];
+                        (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[iMP0];
+                        (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[iP0P];
+                        (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[iM0P];
+                        (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[i0PP];
+                        (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[i0MP];
+                        (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[iPPP];
+                        (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[iMPP];
+                        (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[iPMP];
+                        (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[iMMP];
+
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[iM00];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[i0M0];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[i00M];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[iMM0];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[iPM0];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[iM0M];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[iP0M];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[i0MM];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[i0PM];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[iMMM];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[iPMM];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[iMPM];
+                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[iPPM];
+
+                        (*this->zeroDistributionsH)(x1, x2, x3) = h[d000];
 
                         /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
                     }
@@ -1219,7 +1219,7 @@ real MultiphaseCumulantLBMKernel::nabla2_phi()
 
     real sum = 0.0;
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (phi[k] - phi[DIR_000]);
+        sum += WEIGTH[k] * (phi[k] - phi[d000]);
     }
     return 6.0 * sum;
 }
@@ -1248,35 +1248,35 @@ void MultiphaseCumulantLBMKernel::computePhasefield()
                     int x2p = x2 + 1;
                     int x3p = x3 + 1;
 
-                    h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                    h[DIR_0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                    h[DIR_00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                    h[DIR_PP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[DIR_MP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[DIR_P0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[DIR_M0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[DIR_0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[DIR_0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[DIR_PPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[DIR_MPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[DIR_PMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[DIR_MMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[DIR_M00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[DIR_0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[DIR_00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[DIR_MM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[DIR_PM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[DIR_M0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[DIR_P0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[DIR_0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[DIR_0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[DIR_MMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[DIR_PMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[DIR_MPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[DIR_PPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[DIR_000] = (*this->zeroDistributionsH)(x1, x2, x3);
+                    h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                    h[d0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+                    h[d00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+                    h[dPP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[dMP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[dP0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[dM0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[d0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[d0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[dM00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[d0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[d00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[dMM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[dPM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[dM0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[dP0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[d0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[d0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[d000] = (*this->zeroDistributionsH)(x1, x2, x3);
                 }
             }
         }
@@ -1292,7 +1292,7 @@ void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi[DIR_000] = (*ph)(x1, x2, x3);
+    phi[d000] = (*ph)(x1, x2, x3);
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp
index 6dc3b454e1874382bb539d716147867f03514c38..e8776121b19b3d2a8e3b8f315a18433092c8559a 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp
@@ -394,13 +394,13 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step)
 
 
 
-					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-					real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+					real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
 					//----------- Calculating Macroscopic Values -------------
-					real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible
+					real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible
 					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[REST] + (one - phi[REST]) * (*pressure)(x1, x2, x3) * three; //compressible
 
 					real m0, m1, m2;
@@ -468,7 +468,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step)
 					}
 
 					//Viscosity increase by pressure gradient
-					real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom);
+					real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
 					//LBMReal limVis = 0.0000001*10;//0.01;
 					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
 					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
@@ -778,7 +778,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step)
 					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
 					//    LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
 					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
 					real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
 
 
@@ -1344,11 +1344,11 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step)
 
 						// collision of 1st order moments
 						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 
 						cx2 = cx * cx;
 						cy2 = cy * cy;
@@ -1488,9 +1488,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
 }
 
 real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi()
@@ -1498,9 +1498,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
 }
 
 real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi()
@@ -1508,9 +1508,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
 }
 
 real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi2()
@@ -1518,9 +1518,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 }
 
 real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi2()
@@ -1528,9 +1528,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 }
 
 real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi2()
@@ -1538,9 +1538,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 }
 
 real MultiphasePressureFilterCompressibleAirLBMKernel::nabla2_phi()
@@ -1549,17 +1549,17 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
 	real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-		(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-		((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
 
 	return 6.0 * sum;
@@ -1589,35 +1589,35 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::computePhasefield()
 					int x2p = x2 + 1;
 					int x3p = x3 + 1;
 
-					h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
 				}
 			}
 		}
@@ -1632,7 +1632,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors(CbArray3D<r
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi[DIR_000] = (*ph)(x1, x2, x3);
+	phi[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
@@ -1653,7 +1653,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors2(CbArray3D<
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp
index 1d0d66a1803968f98cdff629d0578ecb197ddc31..48c2039cc710ac92ce5d2f4d0aa704f1a46bdb8a 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp
@@ -385,17 +385,17 @@ void MultiphasePressureFilterLBMKernel::calculate(int step)
 					real normX2 = dX2_phi / denom;
 					real normX3 = dX3_phi / denom;
 
-					dX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-                    dX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-                    dX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					dX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+                    dX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+                    dX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
 
-					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-					real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+					real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
 					//----------- Calculating Macroscopic Values -------------
-					real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+					real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
 					real m0, m1, m2;
 					real rhoRef=c1o1;
@@ -462,7 +462,7 @@ void MultiphasePressureFilterLBMKernel::calculate(int step)
 					}
 
 					//Viscosity increase by pressure gradient
-					real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom);
+					real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
 					//LBMReal limVis = 0.0000001*10;//0.01;
 					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
 					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
@@ -894,7 +894,7 @@ void MultiphasePressureFilterLBMKernel::calculate(int step)
 					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
 					real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
 					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
 					real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
 
 
@@ -1492,11 +1492,11 @@ void MultiphasePressureFilterLBMKernel::calculate(int step)
 
 						// collision of 1st order moments
 						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 
 						cx2 = cx * cx;
 						cy2 = cy * cy;
@@ -1636,9 +1636,9 @@ real MultiphasePressureFilterLBMKernel::gradX1_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
 }
 
 real MultiphasePressureFilterLBMKernel::gradX2_phi()
@@ -1646,9 +1646,9 @@ real MultiphasePressureFilterLBMKernel::gradX2_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
 }
 
 real MultiphasePressureFilterLBMKernel::gradX3_phi()
@@ -1656,9 +1656,9 @@ real MultiphasePressureFilterLBMKernel::gradX3_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
 }
 
 real MultiphasePressureFilterLBMKernel::nabla2_phi()
@@ -1667,17 +1667,17 @@ real MultiphasePressureFilterLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
 	real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-		(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-		((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
 
 	return 6.0 * sum;
@@ -1707,35 +1707,35 @@ void MultiphasePressureFilterLBMKernel::computePhasefield()
 					int x2p = x2 + 1;
 					int x3p = x3 + 1;
 
-					h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
 				}
 			}
 		}
@@ -1750,7 +1750,7 @@ void MultiphasePressureFilterLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi[DIR_000] = (*ph)(x1, x2, x3);
+	phi[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp
index 64a08aa86f29104ad725169adf6bce5887ceb105..092a8d9b8cd53efe6ae1d54187024402910df75b 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp
@@ -291,7 +291,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					
 					SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions();
 					real hh[27];
-					distributionH->getDistributionInv(hh, x1, x2, x3);
+					distributionH->getPostCollisionDistribution(hh, x1, x2, x3);
 					real phiD, vxP, vyP, vzP;
 
 					D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP);
@@ -412,7 +412,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 
 					SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
 					real ff[27];
-					distribution->getDistributionInv(ff, x1, x2, x3);
+					distribution->getPostCollisionDistribution(ff, x1, x2, x3);
 					real rhoG,vx,vy,vz;
 					//real rhoGG = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
 					//				+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
@@ -504,9 +504,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 
 //16.03.23 c: BB gas side with updated boundary velocity
 
-						distribution->getDistributionInv(ff, x1, x2, x3);
+						distribution->getPostCollisionDistribution(ff, x1, x2, x3);
 						real rhoG;
-                        if (phi[DIR_000] > phiLim) { // initialization necessary
+                        if (phi[d000] > phiLim) { // initialization necessary
 							real sumRho = 0;
 							real sumWeight = 1.e-100;
 							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -592,36 +592,36 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
                                     //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (collFactorG )/(c3o1-collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC);
 										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew;
 										//real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC);
-									distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
                                     ff[D3Q27System::INVDIR[fdir]] = fBC;
 									///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!)
 									//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
 									//real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
 									//real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 ));
 									//real fBC = fG - feqOLD + feqNew;
-									//distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir);
+									//distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
 
 
 									}
 								}
 							}
-							//distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+							//distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
 							{
-								real fL = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
-								real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx,vy,vz);
-								real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoG,vx,vy,vz);
-								distribution->setDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, DIR_000);
+								real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
+								real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz);
+								real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz);
+								distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000);
 							}
                             D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-                            ff[DIR_000] = vx * vx + vy * vy + vz * vz +
-                                          (((ff[DIR_MM0] + ff[DIR_PP0]) + (ff[DIR_MP0] + ff[DIR_PM0])) + ((ff[DIR_0MM] + ff[DIR_0PP]) + (ff[DIR_0MP] + ff[DIR_0PM])) + ((ff[DIR_M0M] + ff[DIR_P0P]) + (ff[DIR_M0P] + ff[DIR_P0M])) +
-                                           c2o1 * ((((ff[DIR_MMM] + ff[DIR_PPP]) + (ff[DIR_MMP] + ff[DIR_PPM]))) + (((ff[DIR_MPM] + ff[DIR_PMP]) + (ff[DIR_MPP] + ff[DIR_PMM])))));
-                            distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+                            ff[d000] = vx * vx + vy * vy + vz * vz +
+                                          (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) +
+                                           c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM])))));
+                            distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
 
 						}
 						else {//no refill of gas required
 							rhoG = (*rhoNode)(x1, x2, x3);
-                            if (phi2[DIR_000] <= phiLim) { // no refill liquid
+                            if (phi2[d000] <= phiLim) { // no refill liquid
 								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
                                     if ((phi[fdir] > phiLim)) {
 										// real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -710,7 +710,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
 
 										//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-										distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+										distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
                                         //if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > phiLim)
                                         if (phi2[fdir] > phiLim)
 										{
@@ -723,13 +723,13 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
 											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
 											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
 											//real number = 666;
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
 											//real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
 											//real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
 											real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -743,7 +743,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
                                             // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
                                             real laplacePressureBC;
                                             if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1) &&
-                                                phi2[DIR_000] != phi2[fdir]) {
+                                                phi2[d000] != phi2[fdir]) {
                                                 findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
                                                 laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma;
                                                 findNeighbors(phaseFieldOld, x1, x2, x3);
@@ -753,7 +753,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
             //                                    laplacePressureBC = laplacePressure;
             //                                }
 											// curv; // reset to the above
-                                            if (phi2[DIR_000] != phi2[fdir])
+                                            if (phi2[d000] != phi2[fdir])
                                                 {
 
                                                     laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
@@ -764,9 +764,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
                                                 laplacePressureBC = laplacePressure;
                                             // laplacePressureBC *= sigma;
                                             // eqBCN = eqBC;
-                                            // distribution->setDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2,
+                                            // distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2,
                                             // x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-                                            distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL, x1, x2, x3, fdir);
+                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL, x1, x2, x3, fdir);
 
 
 
@@ -799,8 +799,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 										//	////fL = fL*0.99 +0.01*(eqLL - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1));
 										//	//LaplacePressure *= sigma;
 										//	//eqBCN = eqBC;
-										//	//distribution->setDistributionForDirection(LaplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1-c1o1 / densityRatio*0 ) - fL -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-										//	distribution->setDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio ) - fL, x1, x2, x3, fdir);
+										//	//distribution->setPostCollisionDistributionForDirection(LaplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1-c1o1 / densityRatio*0 ) - fL -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+										//	distribution->setPostCollisionDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio ) - fL, x1, x2, x3, fdir);
 											//if (vxBC != 0) {
 											//	int set = 0;
 											//}
@@ -901,9 +901,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setDistributionForDirection(0, x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir);
 											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
 											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
 											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
@@ -937,7 +937,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 											//if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) {
            //                                     laplacePressureBC = laplacePressure;
            //                                 }
-                                            if (phi2[DIR_000] != phi2[fdir])
+                                            if (phi2[d000] != phi2[fdir])
                                             {
 
                                                 laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
@@ -950,7 +950,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
                                             //real pp2 = (*phaseField)(x1, x2, x3);
 
 											//eqBCN = eqBC;
-											//distribution->setDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
                                            // fBC = (fG) / (densityRatio - c1o1) +
                                            //       ((densityRatio) / (densityRatio - c1o1)) * ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - c2o1 * fL + (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) + laplacePressureBC * WEIGTH[fdir]);
                                             // 13.07.2023
@@ -963,7 +963,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
                                             real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1);
 
 											
-											distribution->setDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio)  - fL , x1, x2, x3, fdir);
+											distribution->setPostCollisionDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio)  - fL , x1, x2, x3, fdir);
 										//	real number = 666;
 
 
@@ -1102,13 +1102,13 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 										//real fBC = (distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) ;
                                         //ff[D3Q27System::INVDIR[fdir]] = (feqNew - c6o1 * WEIGTH[fdir] * dvDir * (collFactorL)/(c3o1-collFactorL));
 										//ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-										distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+										distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 									}
 								}
-                                real eqRest = D3Q27System::getIncompFeqForDirection(DIR_000, 0, (*vxNode)(x1, x2 , x3 ),
+                                real eqRest = D3Q27System::getIncompFeqForDirection(d000, 0, (*vxNode)(x1, x2 , x3 ),
                                                                                    (*vyNode)(x1, x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
-                                real fRest = distribution->getDistributionInvForDirection(x1 , x2 , x3 , DIR_000);
-                                distribution->setDistributionForDirection((laplacePressure * WEIGTH[DIR_000] + c2o1*(fRest) / densityRatio + (eqRest) * (c1o1 - c1o1 / densityRatio))  , x1, x2, x3, DIR_000);
+                                real fRest = distribution->getDistributionInvForDirection(x1 , x2 , x3 , d000);
+                                distribution->setPostCollisionDistributionForDirection((laplacePressure * WEIGTH[d000] + c2o1*(fRest) / densityRatio + (eqRest) * (c1o1 - c1o1 / densityRatio))  , x1, x2, x3, d000);
 
                                 //03.04.2023 alternative initialization of liquid nodes based on FD
 								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -1124,7 +1124,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 								//		//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
 								//		real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
 								//		ff[D3Q27System::INVDIR[fdir]] =  feqNew - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1);
-								//		distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+								//		distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 								//	}
 								//}
 
@@ -1139,7 +1139,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir;
 								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);
 								//		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+								//		distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 								//		ff[fdir] = fL;
 								//	}
 								//	if (!(phi[fdir] > c1o2)) {
@@ -1148,7 +1148,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 								//		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
 								//		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
 								//		real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+								//		distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 								//		ff[fdir] = feqL;
 								//	}
 								//}
@@ -1156,31 +1156,31 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 						//	sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
 						//}
-						//ff[DIR_000] = rhoL - sumRho2;
+						//ff[d000] = rhoL - sumRho2;
 						//rhoL = 27.0 / 18.0 * sumRho2;
 						//std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n";
 						//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[DIR_000]<<"\n";
-//						distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+						//std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n";
+//						distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
 						//{
-						//	real fG = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
-						//	real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-						//	real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-						//	distribution->setDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, DIR_000);
+						//	real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
+						//	real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
+						//	real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+						//	distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000);
 						//}
-                        //ff[DIR_000] = vx * vx + vy * vy + vz * vz +
-                        //              (((ff[DIR_MM0] + ff[DIR_PP0]) + (ff[DIR_MP0] + ff[DIR_PM0])) + ((ff[DIR_0MM] + ff[DIR_0PP]) + (ff[DIR_0MP] + ff[DIR_0PM])) + ((ff[DIR_M0M] + ff[DIR_P0P]) + (ff[DIR_M0P] + ff[DIR_P0M])) +
-                        //               c2o1 * ((((ff[DIR_MMM] + ff[DIR_PPP]) + (ff[DIR_MMP] + ff[DIR_PPM]))) + (((ff[DIR_MPM] + ff[DIR_PMP]) + (ff[DIR_MPP] + ff[DIR_PMM])))));
-                        //distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+                        //ff[d000] = vx * vx + vy * vy + vz * vz +
+                        //              (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) +
+                        //               c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM])))));
+                        //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
 
                         //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 						//	ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 						//}
 						//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
+						//std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
 
-								//real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-								//distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000);
+								//real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+								//distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
 
 
 
@@ -1196,13 +1196,13 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//		
 						//		real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, 0, 0.0001, 0);
 						//		ff[D3Q27System::INVDIR[fdir]] = feqNew;
-						//		distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+						//		distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 						//	}
 						//}
 						//16.03.23 B: Bounce Back gas side
 						//distribution->getDistributionInv(ff, x1, x2, x3);
 						//real rhoG;
-						//if (phi[DIR_000] > c1o2) { //initialization necessary
+						//if (phi[d000] > c1o2) { //initialization necessary
 						//	real sumRho = 0;
 						//	real sumWeight = 0;
 						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -1222,11 +1222,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//			real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
 						//			real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
 
-						//			distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+						//			distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 
 						//		}
 						//	}
-						//	distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+						//	distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
 
 
 
@@ -1244,7 +1244,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//				real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
 
 						//				//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-						//				distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+						//				distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 						//				if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
 						//					//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 						//					//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -1255,7 +1255,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-						//					distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 						//				}
 
 						//			}
@@ -1282,7 +1282,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-						//					distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 						//				}
 
 						//			}
@@ -1310,16 +1310,16 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
 						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);;
-						//				distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+						//				distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 						//			}
 						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) {
 						//				real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-						//				distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+						//				distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 						//			}
 						//		}
 
-						//		real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-						//		distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000);
+						//		real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+						//		distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
 
 
 
@@ -1335,7 +1335,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//16.03.23 A: scaled pressure
 						//distribution->getDistributionInv(ff, x1, x2, x3);
 						//real rhoG;
-						//if (phi[DIR_000] > c1o2) { //initialization necessary
+						//if (phi[d000] > c1o2) { //initialization necessary
 						//	real sumRho = 0;
 						//	real sumWeight = 0;
 						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -1353,11 +1353,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//			real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 						//			real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
 
-						//			distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+						//			distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 
 						//		}
 						//	}
-						//	distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+						//	distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
 
 
 
@@ -1374,7 +1374,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//				real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
 
 						//				//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-						//					distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+						//					distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 						//				if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
 						//					real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 						//					real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -1385,7 +1385,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-						//					distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 						//				}
 
 						//			}
@@ -1414,7 +1414,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-						//					distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 						//				}
 
 						//			}
@@ -1442,16 +1442,16 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
 						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);;
-						//				distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+						//				distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 						//			}
 						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) {
 						//				real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-						//				distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+						//				distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 						//			}
 						//		}
 
-						//		real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-						//		distribution->setDistributionForDirection(feqL, x1 , x2, x3 , DIR_000);
+						//		real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+						//		distribution->setPostCollisionDistributionForDirection(feqL, x1 , x2, x3 , d000);
 
 
 
@@ -1491,32 +1491,32 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//				//real scalRefill = 0.0;
 	//				real slowerFactor = 1.0e6;
 	//				if (((*phaseField)(x1, x2, x3) <= c1o2) && (
-	//					(phi[DIR_P00] > c1o2) ||
-	//					(phi[DIR_M00] > c1o2) ||
-	//					(phi[DIR_00P] > c1o2) ||
-	//					(phi[DIR_00M] > c1o2) ||
-	//					(phi[DIR_0M0] > c1o2) ||
-	//					(phi[DIR_0P0] > c1o2) ||
-	//					(phi[DIR_PP0] > c1o2) ||
-	//					(phi[DIR_PM0] > c1o2) ||
-	//					(phi[DIR_P0P] > c1o2) ||
-	//					(phi[DIR_P0M] > c1o2) ||
-	//					(phi[DIR_MP0] > c1o2) ||
-	//					(phi[DIR_MM0] > c1o2) ||
-	//					(phi[DIR_M0P] > c1o2) ||
-	//					(phi[DIR_M0M] > c1o2) ||
-	//					(phi[DIR_0PM] > c1o2) ||
-	//					(phi[DIR_0MM] > c1o2) ||
-	//					(phi[DIR_0PP] > c1o2) ||
-	//					(phi[DIR_0MP] > c1o2) ||
-	//					(phi[DIR_PPP] > c1o2) ||
-	//					(phi[DIR_PMP] > c1o2) ||
-	//					(phi[DIR_MPP] > c1o2) ||
-	//					(phi[DIR_MMP] > c1o2) ||
-	//					(phi[DIR_PPM] > c1o2) ||
-	//					(phi[DIR_PMM] > c1o2) ||
-	//					(phi[DIR_MPM] > c1o2) ||
-	//					(phi[DIR_MMM] > c1o2)
+	//					(phi[dP00] > c1o2) ||
+	//					(phi[dM00] > c1o2) ||
+	//					(phi[d00P] > c1o2) ||
+	//					(phi[d00M] > c1o2) ||
+	//					(phi[d0M0] > c1o2) ||
+	//					(phi[d0P0] > c1o2) ||
+	//					(phi[dPP0] > c1o2) ||
+	//					(phi[dPM0] > c1o2) ||
+	//					(phi[dP0P] > c1o2) ||
+	//					(phi[dP0M] > c1o2) ||
+	//					(phi[dMP0] > c1o2) ||
+	//					(phi[dMM0] > c1o2) ||
+	//					(phi[dM0P] > c1o2) ||
+	//					(phi[dM0M] > c1o2) ||
+	//					(phi[d0PM] > c1o2) ||
+	//					(phi[d0MM] > c1o2) ||
+	//					(phi[d0PP] > c1o2) ||
+	//					(phi[d0MP] > c1o2) ||
+	//					(phi[dPPP] > c1o2) ||
+	//					(phi[dPMP] > c1o2) ||
+	//					(phi[dMPP] > c1o2) ||
+	//					(phi[dMMP] > c1o2) ||
+	//					(phi[dPPM] > c1o2) ||
+	//					(phi[dPMM] > c1o2) ||
+	//					(phi[dMPM] > c1o2) ||
+	//					(phi[dMMM] > c1o2)
 	//					)) {
 	//						real vx = (*vxNode)(x1, x2, x3);
 	//						real vy =  (*vyNode)(x1, x2, x3);
@@ -1525,7 +1525,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 
 	//						distribution->getDistributionInv(ff, x1, x2, x3);
 	//						real rhoG;
-	//						if (phi[DIR_000] > c1o2) { //initialization necessary
+	//						if (phi[d000] > c1o2) { //initialization necessary
 	//							real sumRho = 0;
 	//							real sumWeight = 0;
 	//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -1543,11 +1543,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 	//									real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
 
-	//									distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+	//									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 
 	//								}
 	//							}
-	//							distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+	//							distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
 
 
 
@@ -1563,7 +1563,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//									real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
 	//									real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
 
-	//									distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+	//									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 	//									if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
 	//										real vxBC =c1o2*(vx+ (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 	//										real vyBC =c1o2*(vy+ (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -1574,7 +1574,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//										real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 	//										//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-	//										distribution->setDistributionForDirection((fBC+fG) / densityRatio-fL+kapkap* WEIGTH[fdir]* computeCurvature_phi() -(feqG-feqL)*(c1o1/densityRatio-c1o1)*(vxBC* D3Q27System::DX1[fdir]+vyBC* D3Q27System::DX2[fdir]+vzBC* D3Q27System::DX3[fdir]), x1 , x2 , x3 , fdir);
+	//										distribution->setPostCollisionDistributionForDirection((fBC+fG) / densityRatio-fL+kapkap* WEIGTH[fdir]* computeCurvature_phi() -(feqG-feqL)*(c1o1/densityRatio-c1o1)*(vxBC* D3Q27System::DX1[fdir]+vyBC* D3Q27System::DX2[fdir]+vzBC* D3Q27System::DX3[fdir]), x1 , x2 , x3 , fdir);
 	//									}
 
 	//									}
@@ -1587,7 +1587,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//										real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower * vx, slower * vy, slower * vz);
 	//										real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
 
-	//										distribution->setDistributionForDirection(fBC, x1, x2 , x3 , fdir);
+	//										distribution->setPostCollisionDistributionForDirection(fBC, x1, x2 , x3 , fdir);
 
 	//										////inverse refill from here
 	//										//int xn1 = x1 + D3Q27System::DX1[fdir];
@@ -1623,8 +1623,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//										//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 	//										//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 	//										////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//										//distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-	//										////distribution->setDistributionForDirection(( fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+	//										//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+	//										////distribution->setPostCollisionDistributionForDirection(( fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 	//									
 	//									
 	//									}
@@ -1667,7 +1667,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//								real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower*vx, slower*vy, slower*vz);
 	//								real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
 
-	//								distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir);
+	//								distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
 
 	//								/////reverse liquid
 	//								//int xn1 = x1 + D3Q27System::DX1[fdir];
@@ -1703,11 +1703,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//								//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 	//								////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-	//								//distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+	//								//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 
 	//								/////!reverse liquid
 	//								//
-	//								////distribution->setDistributionForDirection((fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+	//								////distribution->setPostCollisionDistributionForDirection((fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 	//							}
 	//							else {
 	//								real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
@@ -1715,7 +1715,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//								real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1, x2, x3), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 	//								real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
 	//								real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-	//								distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+	//								distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 	//							}
 	//						}
 	//					
@@ -1731,33 +1731,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 
 					//////////////////////////////////////
 
-//					//if ((phi[DIR_000] > c1o2) && (
-//					//	(phi[DIR_P00] <= c1o2) ||
-//					//	(phi[DIR_M00] <= c1o2) ||
-//					//	(phi[DIR_00P] <= c1o2) ||
-//					//	(phi[DIR_00M] <= c1o2) ||
-//					//	(phi[DIR_0M0] <= c1o2) ||
-//					//	(phi[DIR_0P0] <= c1o2) ||
-//					//	(phi[DIR_PP0] <= c1o2) ||
-//					//	(phi[DIR_PM0] <= c1o2) ||
-//					//	(phi[DIR_P0P] <= c1o2) ||
-//					//	(phi[DIR_P0M] <= c1o2) ||
-//					//	(phi[DIR_MP0] <= c1o2) ||
-//					//	(phi[DIR_MM0] <= c1o2) ||
-//					//	(phi[DIR_M0P] <= c1o2) ||
-//					//	(phi[DIR_M0M] <= c1o2) ||
-//					//	(phi[DIR_0PM] <= c1o2) ||
-//					//	(phi[DIR_0MM] <= c1o2) ||
-//					//	(phi[DIR_0PP] <= c1o2) ||
-//					//	(phi[DIR_0MP] <= c1o2) ||
-//					//	(phi[DIR_PPP] <= c1o2) ||
-//					//	(phi[DIR_PMP] <= c1o2) ||
-//					//	(phi[DIR_MPP] <= c1o2) ||
-//					//	(phi[DIR_MMP] <= c1o2) ||
-//					//	(phi[DIR_PPM] <= c1o2) ||
-//					//	(phi[DIR_PMM] <= c1o2) ||
-//					//	(phi[DIR_MPM] <= c1o2) ||
-//					//	(phi[DIR_MMM] <= c1o2)
+//					//if ((phi[d000] > c1o2) && (
+//					//	(phi[dP00] <= c1o2) ||
+//					//	(phi[dM00] <= c1o2) ||
+//					//	(phi[d00P] <= c1o2) ||
+//					//	(phi[d00M] <= c1o2) ||
+//					//	(phi[d0M0] <= c1o2) ||
+//					//	(phi[d0P0] <= c1o2) ||
+//					//	(phi[dPP0] <= c1o2) ||
+//					//	(phi[dPM0] <= c1o2) ||
+//					//	(phi[dP0P] <= c1o2) ||
+//					//	(phi[dP0M] <= c1o2) ||
+//					//	(phi[dMP0] <= c1o2) ||
+//					//	(phi[dMM0] <= c1o2) ||
+//					//	(phi[dM0P] <= c1o2) ||
+//					//	(phi[dM0M] <= c1o2) ||
+//					//	(phi[d0PM] <= c1o2) ||
+//					//	(phi[d0MM] <= c1o2) ||
+//					//	(phi[d0PP] <= c1o2) ||
+//					//	(phi[d0MP] <= c1o2) ||
+//					//	(phi[dPPP] <= c1o2) ||
+//					//	(phi[dPMP] <= c1o2) ||
+//					//	(phi[dMPP] <= c1o2) ||
+//					//	(phi[dMMP] <= c1o2) ||
+//					//	(phi[dPPM] <= c1o2) ||
+//					//	(phi[dPMM] <= c1o2) ||
+//					//	(phi[dMPM] <= c1o2) ||
+//					//	(phi[dMMM] <= c1o2)
 //					//	)) {
 //
 //					//	real vx = (*vxNode)(x1, x2, x3);
@@ -1778,8 +1778,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //					//			//
 //					//			//real fBB;
 //					//			//fBB = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//					//			//distribution->setDistributionForDirection((ftemp - ff[fdir]), x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//					//			//distribution->setDistributionForDirection(fBB - c6o1 * D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+//					//			//distribution->setPostCollisionDistributionForDirection((ftemp - ff[fdir]), x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//					//			//distribution->setPostCollisionDistributionForDirection(fBB - c6o1 * D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 //					//		//scaled Version
 //
 //					//			real fG;
@@ -1803,11 +1803,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //					//			real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL/densityRatio, vx, vy, vz));
 //					//			real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL*(c1o1-ssrho)+ssrho*rhoGG, vx, vy, vz));
 //					//			//real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoFilter, vx, vy, vz));
-//					//			distribution->setDistributionForDirection( (ff[fdir] - feqOLD)*(c1o1/collFactorG-c1o1)/(c1o1/collFactorL-c1o1) + feqNew, x1, x2, x3, fdir);
+//					//			distribution->setPostCollisionDistributionForDirection( (ff[fdir] - feqOLD)*(c1o1/collFactorG-c1o1)/(c1o1/collFactorL-c1o1) + feqNew, x1, x2, x3, fdir);
 //
 //					//			feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 //					//			feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//					//			distribution->setDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//					//			distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //					//			sumRhoG += (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
 //					//			countRhoG++;
 //
@@ -1816,33 +1816,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //					//	}
 //					//	(*rhoNode)(x1, x2, x3) = sumRhoG / countRhoG;
 //
-//					if ((phi[DIR_000] > c1o2) && (
-//						(phi[DIR_P00] <= c1o2) ||
-//						(phi[DIR_M00] <= c1o2) ||
-//						(phi[DIR_00P] <= c1o2) ||
-//						(phi[DIR_00M] <= c1o2) ||
-//						(phi[DIR_0M0] <= c1o2) ||
-//						(phi[DIR_0P0] <= c1o2) ||
-//						(phi[DIR_PP0] <= c1o2) ||
-//						(phi[DIR_PM0] <= c1o2) ||
-//						(phi[DIR_P0P] <= c1o2) ||
-//						(phi[DIR_P0M] <= c1o2) ||
-//						(phi[DIR_MP0] <= c1o2) ||
-//						(phi[DIR_MM0] <= c1o2) ||
-//						(phi[DIR_M0P] <= c1o2) ||
-//						(phi[DIR_M0M] <= c1o2) ||
-//						(phi[DIR_0PM] <= c1o2) ||
-//						(phi[DIR_0MM] <= c1o2) ||
-//						(phi[DIR_0PP] <= c1o2) ||
-//						(phi[DIR_0MP] <= c1o2) ||
-//						(phi[DIR_PPP] <= c1o2) ||
-//						(phi[DIR_PMP] <= c1o2) ||
-//						(phi[DIR_MPP] <= c1o2) ||
-//						(phi[DIR_MMP] <= c1o2) ||
-//						(phi[DIR_PPM] <= c1o2) ||
-//						(phi[DIR_PMM] <= c1o2) ||
-//						(phi[DIR_MPM] <= c1o2) ||
-//						(phi[DIR_MMM] <= c1o2)
+//					if ((phi[d000] > c1o2) && (
+//						(phi[dP00] <= c1o2) ||
+//						(phi[dM00] <= c1o2) ||
+//						(phi[d00P] <= c1o2) ||
+//						(phi[d00M] <= c1o2) ||
+//						(phi[d0M0] <= c1o2) ||
+//						(phi[d0P0] <= c1o2) ||
+//						(phi[dPP0] <= c1o2) ||
+//						(phi[dPM0] <= c1o2) ||
+//						(phi[dP0P] <= c1o2) ||
+//						(phi[dP0M] <= c1o2) ||
+//						(phi[dMP0] <= c1o2) ||
+//						(phi[dMM0] <= c1o2) ||
+//						(phi[dM0P] <= c1o2) ||
+//						(phi[dM0M] <= c1o2) ||
+//						(phi[d0PM] <= c1o2) ||
+//						(phi[d0MM] <= c1o2) ||
+//						(phi[d0PP] <= c1o2) ||
+//						(phi[d0MP] <= c1o2) ||
+//						(phi[dPPP] <= c1o2) ||
+//						(phi[dPMP] <= c1o2) ||
+//						(phi[dMPP] <= c1o2) ||
+//						(phi[dMMP] <= c1o2) ||
+//						(phi[dPPM] <= c1o2) ||
+//						(phi[dPMM] <= c1o2) ||
+//						(phi[dMPM] <= c1o2) ||
+//						(phi[dMMM] <= c1o2)
 //						)) {
 //							real vx = (*vxNode)(x1, x2, x3);
 //							real vy =  (*vyNode)(x1, x2, x3);
@@ -1853,12 +1853,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //
 //						if ((*phaseField)(x1, x2, x3) > c1o2) {
 //						
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {// populations without DIR_000
+//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {// populations without d000
 //								if ((phi[fdir] <= c1o2)) {
 //										real fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //										real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 //										real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//										distribution->setDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//										distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //
 //								}
 //							}
@@ -1895,10 +1895,10 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //								sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
 //							}
 //							rhoG = 27.0 / 19.0 * sumRho;
-//							distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1 , x2 , x3 , DIR_000);
+//							distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1 , x2 , x3 , d000);
 //							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 //								//if ((phi[fdir] > c1o2)) {
-//									distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//									distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //								//}
 //							}
 //
@@ -1907,33 +1907,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //
 //
 //					}
-//					else if ((phi[DIR_000] <= c1o2) && (
-//						(phi[DIR_P00] > c1o2) ||
-//						(phi[DIR_M00] > c1o2) ||
-//						(phi[DIR_00P] > c1o2) ||
-//						(phi[DIR_00M] > c1o2) ||
-//						(phi[DIR_0M0] > c1o2) ||
-//						(phi[DIR_0P0] > c1o2) ||
-//						(phi[DIR_PP0] > c1o2) ||
-//						(phi[DIR_PM0] > c1o2) ||
-//						(phi[DIR_P0P] > c1o2) ||
-//						(phi[DIR_P0M] > c1o2) ||
-//						(phi[DIR_MP0] > c1o2) ||
-//						(phi[DIR_MM0] > c1o2) ||
-//						(phi[DIR_M0P] > c1o2) ||
-//						(phi[DIR_M0M] > c1o2) ||
-//						(phi[DIR_0PM] > c1o2) ||
-//						(phi[DIR_0MM] > c1o2) ||
-//						(phi[DIR_0PP] > c1o2) ||
-//						(phi[DIR_0MP] > c1o2) ||
-//						(phi[DIR_PPP] > c1o2) ||
-//						(phi[DIR_PMP] > c1o2) ||
-//						(phi[DIR_MPP] > c1o2) ||
-//						(phi[DIR_MMP] > c1o2) ||
-//						(phi[DIR_PPM] > c1o2) ||
-//						(phi[DIR_PMM] > c1o2) ||
-//						(phi[DIR_MPM] > c1o2) ||
-//						(phi[DIR_MMM] > c1o2)
+//					else if ((phi[d000] <= c1o2) && (
+//						(phi[dP00] > c1o2) ||
+//						(phi[dM00] > c1o2) ||
+//						(phi[d00P] > c1o2) ||
+//						(phi[d00M] > c1o2) ||
+//						(phi[d0M0] > c1o2) ||
+//						(phi[d0P0] > c1o2) ||
+//						(phi[dPP0] > c1o2) ||
+//						(phi[dPM0] > c1o2) ||
+//						(phi[dP0P] > c1o2) ||
+//						(phi[dP0M] > c1o2) ||
+//						(phi[dMP0] > c1o2) ||
+//						(phi[dMM0] > c1o2) ||
+//						(phi[dM0P] > c1o2) ||
+//						(phi[dM0M] > c1o2) ||
+//						(phi[d0PM] > c1o2) ||
+//						(phi[d0MM] > c1o2) ||
+//						(phi[d0PP] > c1o2) ||
+//						(phi[d0MP] > c1o2) ||
+//						(phi[dPPP] > c1o2) ||
+//						(phi[dPMP] > c1o2) ||
+//						(phi[dMPP] > c1o2) ||
+//						(phi[dMMP] > c1o2) ||
+//						(phi[dPPM] > c1o2) ||
+//						(phi[dPMM] > c1o2) ||
+//						(phi[dMPM] > c1o2) ||
+//						(phi[dMMM] > c1o2)
 //						)) {
 //						real vx = (*vxNode)(x1, x2, x3);
 //						real vy = (*vyNode)(x1, x2, x3);
@@ -1957,7 +1957,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //						//			real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //						//			real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 //						//			real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//						//			distribution->setDistributionForDirection((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//						//			distribution->setPostCollisionDistributionForDirection((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //						//		}
 //						//	}
 ///////iterative way:
@@ -1981,7 +1981,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //									}
 //									else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); }
 //								}
-//								ff[DIR_000]= distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
+//								ff[d000]= distribution->getDistributionInvForDirection(x1, x2, x3, d000);
 //								D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
 //								//real sumRho = 0;
 //								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -1991,10 +1991,10 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //							}
 //							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 //								
-//								distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//								distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //								
 //							}
-//							//distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+//							//distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
 //
 //
 //
@@ -2007,7 +2007,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //									real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 //									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 //									ff[D3Q27System::INVDIR[fdir]] = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-//									distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+//									distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 //								}
 //								else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);}
 //							}
@@ -2018,7 +2018,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //								sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
 //							}
 //							rhoG = 27.0 / 19.0 * sumRho;
-//							distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+//							distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
 //
 //
 //
@@ -2057,7 +2057,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 // 					D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
 // 					//if (vz != 0) {
 
-// 					//	std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << " vz=" << vz << "ffRest=" << ff[DIR_000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n";
+// 					//	std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << " vz=" << vz << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n";
 // 					//}
 // 				}
 			
@@ -2085,7 +2085,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//					distribution->getDistribution(ff, x1, x2, x3);
 	//					real rhoL;
 	//					D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-	//					std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n";
+	//					std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n";
 	//				}
 	//			}
 	//		}
@@ -2098,7 +2098,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//							sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
 	//						}
 	//						rhoL = 27.0 / 19.0 * sumRho;
-	//						distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz), x1, x2, x3, DIR_000);
+	//						distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000);
 
 
 	//				}
@@ -2132,12 +2132,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //						//vz = (*vzNode)(x1, x2, x3);
 //
 //
-//						//for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {// loop includes DIR_000 position, different from all the others
+//						//for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {// loop includes d000 position, different from all the others
 //						//	real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG,vx,vy,vz);
 //						//	real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG/densityRatio,vx,vy,vz);
 //						//	real fBC = (ff[fdir] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
 //
-//						//	distribution->setDistributionInvForDirection(fBC, x1 , x2 , x3 ,fdir);
+//						//	distribution->setPreCollisionDistributionForDirection(fBC, x1 , x2 , x3 ,fdir);
 //
 //
 //
@@ -2169,7 +2169,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //						sumVx /= sum;
 //						sumVy /= sum;
 //						sumVz /= sum;
-//						distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, sumRho, sumVx, sumVy, sumVz), x1, x2, x3, DIR_000);
+//						distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, sumRho, sumVx, sumVy, sumVz), x1, x2, x3, d000);
 //
 //						std::cout << "x=" << x1 << " " << "y=" << x2 << " " << "z=" << x3 <<" sumVx="<<sumVx<< " sumVy=" << sumVy << " sumVz=" << sumVz << " sumRho=" << sumRho << "\n";
 //
@@ -2187,12 +2187,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //								//ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);
 //								ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (sumVx * D3Q27System::DX1[fdir] + sumVy * D3Q27System::DX2[fdir] + sumVz * D3Q27System::DX3[fdir]);
 //								//ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz);
-//								distribution->setDistributionInvForDirection(ff[fdir], x1, x2, x3, fdir);
+//								distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir);
 //							}
 //							if (phi[fdir] <= c1o2 && phi[D3Q27System::INVDIR[fdir]] <= c1o2) {
 //								//ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, vx, vy, vz);
 //								ff[fdir]= D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz);
-//								distribution->setDistributionInvForDirection(ff[fdir], x1, x2, x3, fdir);
+//								distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir);
 //							}
 //						}
 //					real rhoL;
@@ -2205,10 +2205,10 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 //							sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
 //						}
 //						rhoL = 27.0 / 19.0 * sumRho;
-//						//distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz), x1, x2, x3, DIR_000);
-//						//distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, sumVx, sumVy, sumVz), x1, x2, x3, DIR_000);
-//						ff[DIR_000] = sumRho - sumRho2;
-//						distribution->setDistributionInvForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+//						//distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000);
+//						//distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, sumVx, sumVy, sumVz), x1, x2, x3, d000);
+//						ff[d000] = sumRho - sumRho2;
+//						distribution->setPreCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
 //						D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
 //						std::cout << " calcVx=" << vx << " calcVy=" << vy << " calcVz=" << vz << " rhoG=" << rhoG << "\n";
 //
@@ -2349,7 +2349,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//					for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
 	//						real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, drho, vvx, vvy, vvz));
 	//						real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, drhoScaled, vvx, vvy, vvz));
-	//						distribution->setDistributionInvForDirection((ff[fdir]-feqOLD)* scaleStress +feqNew,x1,x2,x3,fdir);
+	//						distribution->setPreCollisionDistributionForDirection((ff[fdir]-feqOLD)* scaleStress +feqNew,x1,x2,x3,fdir);
 	//					}
 
 
@@ -3221,7 +3221,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//real mfhbbb ;//= (*this->zeroDistributionsH2)(x1, x2, x3);
 
 
-					//if (phi[DIR_000] < c1o2)
+					//if (phi[d000] < c1o2)
 					//{
 						 mfcbb= (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
 						 mfbcb= (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
@@ -3362,24 +3362,24 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 
 
 					//real pushInterface = 2.0;
-					//collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
-					//collFactorM = collFactorL + (collFactorL - collFactorG) * (tanh(pushInterface * (c2o1 * phi[DIR_000] - c1o1)) / tanh(pushInterface) * c1o2 + c1o2 - phiH) / (phiH - phiL);
-					collFactorM = phi[DIR_000] > phiLim ? collFactorL : collFactorG;
+					//collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
+					//collFactorM = collFactorL + (collFactorL - collFactorG) * (tanh(pushInterface * (c2o1 * phi[d000] - c1o1)) / tanh(pushInterface) * c1o2 + c1o2 - phiH) / (phiH - phiL);
+					collFactorM = phi[d000] > phiLim ? collFactorL : collFactorG;
 					//collFactorM=(((*phaseField)(x1, x2, x3) > c1o2) && ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) ? 1.8 : collFactorM;
-					real collFactorMInv = phi[DIR_000] > phiLim ? collFactorG : collFactorL;
+					real collFactorMInv = phi[d000] > phiLim ? collFactorG : collFactorL;
 
-					//real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+					//real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
 					//----------- Calculating Macroscopic Values -------------
-					real rho = phi[DIR_000] > phiLim ? rhoH : rhoL;//rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible
+					real rho = phi[d000] > phiLim ? rhoH : rhoL;//rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible
 
-					//real rho = rhoH + rhoToPhi * (tanh(pushInterface*(c2o1*phi[DIR_000]-c1o1))/tanh(pushInterface)*c1o2 +c1o2 - phiH); //Incompressible
+					//real rho = rhoH + rhoToPhi * (tanh(pushInterface*(c2o1*phi[d000]-c1o1))/tanh(pushInterface)*c1o2 +c1o2 - phiH); //Incompressible
 																		///scaled phase field
 					//real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1o1 - (*phaseField)(x1, x2, x3)) * (c1o1 - (*phaseField)(x1, x2, x3))) - phiH);
 					///!scaled phase field
 					
-					//real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH)+(c1o1-phi[DIR_000])* (*pressure)(x1, x2, x3)*c3o1; //compressible
-					//real rho = rhoL + (rhoH - rhoL) * phi[DIR_000] + (c1o1 - phi[DIR_000]) * (*pressure)(x1, x2, x3) * c3o1; //compressible
+					//real rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(c1o1-phi[d000])* (*pressure)(x1, x2, x3)*c3o1; //compressible
+					//real rho = rhoL + (rhoH - rhoL) * phi[d000] + (c1o1 - phi[d000]) * (*pressure)(x1, x2, x3) * c3o1; //compressible
 
 					real m0, m1, m2;
 					real rhoRef=c1o1;
@@ -3401,14 +3401,14 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//							{{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
 					//							{ {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} };
 					//real LaplaceP = 0.0;
-					//LaplaceP += WEIGTH[DIR_PPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
+					//LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
 					//	+ ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere))));
-					//LaplaceP += WEIGTH[DIR_0PP] * (
+					//LaplaceP += WEIGTH[d0PP] * (
 					//	((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere)))
 					//	+ ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere)))
 					//	+ ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere)))
 					//	);
-					//LaplaceP += WEIGTH[DIR_00P] * (
+					//LaplaceP += WEIGTH[d00P] * (
 					//	(((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere))
 					//	+ (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere))
 					//	+ (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere))
@@ -3523,16 +3523,16 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//}
 
 					//Viscosity increase by phase field residuum
-					//real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom);
+					//real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
 					//real limVis = 0.01;// 0.0000001 * 10;//0.01;
 					// collFactorM =collFactorM/(c1o1+limVis*(errPhi*errPhi)*collFactorM);
 					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
 					//errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
 					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
 
-					//3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-					//+WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-					//+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+					//3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+					//+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+					//+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 
 
 
@@ -3546,34 +3546,34 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//real pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
 					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
 					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) );
+					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) );
 					////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) {
-					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0P0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0M0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL)));
 					//	mfbbb -= pBefore * 8.0 / 9.0;
 					//}
 
@@ -3583,7 +3583,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
 					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
 
-					//rho = rhoH + rhoToPhi * ((phi[DIR_000] - phiH)+fabs(pStarStart)*0); //Incompressible
+					//rho = rhoH + rhoToPhi * ((phi[d000] - phiH)+fabs(pStarStart)*0); //Incompressible
 
 					muRho = rho;
 
@@ -3626,9 +3626,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2;
 					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2;
 					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2;
-					 //real FdX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					 //real FdX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					 //real FdX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					 //real FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					 //real FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					 //real FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
 
 
 					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ;
@@ -3638,7 +3638,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//forcingX1 = (pStar * dRhoInvX* rho *c3o1) ;
 					//forcingX2 = (pStar * dRhoInvY* rho *c3o1) ;
 					//forcingX3 = (pStar * dRhoInvZ* rho *c3o1) ;
-					//if (phi[DIR_000] > 0.1 && phi[DIR_000] < 0.9) std::cout << phi[DIR_000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
+					//if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
 					//real forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ;
 					//real forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ;
 					//real forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ;
@@ -3647,22 +3647,22 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT;
 					//forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT;
 
-					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
 
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1o1- phi[DIR_000]) + pStar * dX1_rhoInv * rho*(phi[DIR_000]));
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1o1- phi[DIR_000]) + pStar * dX2_rhoInv * rho*(phi[DIR_000]));
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1o1- phi[DIR_000]) + pStar * dX3_rhoInv * rho*(phi[DIR_000]));
-						 //if (phi[DIR_000] > 0.3 && phi[DIR_000] < 0.7)
+					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000]));
+					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000]));
+					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000]));
+						 //if (phi[d000] > 0.3 && phi[d000] < 0.7)
 						 //{
 							// int test = 1;
-							// std::cout << phi[DIR_000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
+							// std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
 						 //}
 
 
 
-					 //real scaleGrad = c2o1 * phi[DIR_000] * (1.0 - phi[DIR_000]) / ((phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])) * (phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])));
+					 //real scaleGrad = c2o1 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])));
 					 //dX1_phi *= scaleGrad;
 					 //dX2_phi *= scaleGrad;
 					 //dX3_phi *= scaleGrad;
@@ -3679,9 +3679,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//forcingX3 += mu * dX3_phi/rho;
 
 					//real forcingBIAS = 0.5;
-				//	forcingX1 += muForcingX1.Eval() / rho;//*phi[DIR_000];
-                //     forcingX2 += -5.0e-7;//  *phi[DIR_000];                         // muForcingX2.Eval() / rho - 5.0e-7 * phi[DIR_000] * 0;// * phi[DIR_000];
-				//	forcingX3 += muForcingX3.Eval() / rho;// * phi[DIR_000];
+				//	forcingX1 += muForcingX1.Eval() / rho;//*phi[d000];
+                //     forcingX2 += -5.0e-7;//  *phi[d000];                         // muForcingX2.Eval() / rho - 5.0e-7 * phi[d000] * 0;// * phi[d000];
+				//	forcingX3 += muForcingX3.Eval() / rho;// * phi[d000];
 
 				//	//19.08.2022
 					//vvx += vvxh / rho * c1o2;
@@ -3757,15 +3757,15 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 
 															 ////////////////////////////////////////////////////////////////////////////////////
 					real wadjust;
-					//real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])); //real qudricLimit = 0.01;
-					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) && (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)) ? 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01;
-					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2)&& (normX1*vvx+normX2*vvy+normX3*vvz<0) ) ? 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01 ;
+					//real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01;
+					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) && (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01;
+					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2)&& (normX1*vvx+normX2*vvy+normX3*vvz<0) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ;
                     real qudricLimit = 0.0001;
                     /// (c1o1 + 1.0e3 * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi));
-					//real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) ;
-					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) ) ? 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01 ;
-					//qudricLimit = (((*phaseField)(x1, x2, x3)-c1o2 ) * (normX1 * vvx + normX2 * vvy + normX3 * vvz) < 0) ? 0.01 / (c1o1 + 1.0e8 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01;
-				//	if (phi[DIR_000] > c1o2 && (*phaseFieldOld)(x1, x2, x3) <= c1o2) collFactorM = 1.8;
+					//real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) ;
+					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ;
+					//qudricLimit = (((*phaseField)(x1, x2, x3)-c1o2 ) * (normX1 * vvx + normX2 * vvy + normX3 * vvz) < 0) ? 0.01 / (c1o1 + 1.0e8 * phi[d000] * (c1o1 - phi[d000])) : 0.01;
+				//	if (phi[d000] > c1o2 && (*phaseFieldOld)(x1, x2, x3) <= c1o2) collFactorM = 1.8;
 					
 																													////////////////////////////////////////////////////////////////////////////////////
 						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
@@ -3907,8 +3907,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
 										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
 					//dirty (04.04.2023)
-					//if (phi[DIR_000] > c1o2  &&(dX1_phi*vvx+dX2_phi*vvy+dX3_phi*vvz)<0) {
-					//	//collFactorM = c1o1 / (c1o1 / collFactorM +1e10* fabsf(mxxPyyPzz)*(c1o1-fabsf(phi[DIR_000])));
+					//if (phi[d000] > c1o2  &&(dX1_phi*vvx+dX2_phi*vvy+dX3_phi*vvz)<0) {
+					//	//collFactorM = c1o1 / (c1o1 / collFactorM +1e10* fabsf(mxxPyyPzz)*(c1o1-fabsf(phi[d000])));
 					//	collFactorM = c1o1 / (c1o1 / collFactorM - 1e15*(dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* fabsf(mxxPyyPzz) );
 					//	collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
 					//	 OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
@@ -3937,11 +3937,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					real Dxy = -c3o1 * collFactorM * mfbba;
 					real Dxz = -c3o1 * collFactorM * mfbab;
 					real Dyz = -c3o1 * collFactorM * mfabb;
-                    // if (phi[DIR_000] > phiLim) 
-						if ((phi[DIR_000] > phiLim) && ((phi[DIR_P00] <= phiLim) || (phi[DIR_M00] <= phiLim) || (phi[DIR_00P] <= phiLim) || (phi[DIR_00M] <= phiLim) || (phi[DIR_0M0] <= phiLim) || (phi[DIR_0P0] <= phiLim) || (phi[DIR_PP0] <= phiLim) || (phi[DIR_PM0] <= phiLim) || (phi[DIR_P0P] <= phiLim) ||
-                                                  (phi[DIR_P0M] <= phiLim) || (phi[DIR_MP0] <= phiLim) || (phi[DIR_MM0] <= phiLim) || (phi[DIR_M0P] <= phiLim) || (phi[DIR_M0M] <= phiLim) || (phi[DIR_0PM] <= phiLim) || (phi[DIR_0MM] <= phiLim) || (phi[DIR_0PP] <= phiLim) || (phi[DIR_0MP] <= phiLim) ||
-                                                  (phi[DIR_PPP] <= phiLim) || (phi[DIR_PMP] <= phiLim) || (phi[DIR_MPP] <= phiLim) || (phi[DIR_MMP] <= phiLim) ||
-                         (phi[DIR_PPM] <= phiLim) || (phi[DIR_PMM] <= phiLim) || (phi[DIR_MPM] <= phiLim) || (phi[DIR_MMM] <= phiLim))) {
+                    // if (phi[d000] > phiLim) 
+						if ((phi[d000] > phiLim) && ((phi[dP00] <= phiLim) || (phi[dM00] <= phiLim) || (phi[d00P] <= phiLim) || (phi[d00M] <= phiLim) || (phi[d0M0] <= phiLim) || (phi[d0P0] <= phiLim) || (phi[dPP0] <= phiLim) || (phi[dPM0] <= phiLim) || (phi[dP0P] <= phiLim) ||
+                                                  (phi[dP0M] <= phiLim) || (phi[dMP0] <= phiLim) || (phi[dMM0] <= phiLim) || (phi[dM0P] <= phiLim) || (phi[dM0M] <= phiLim) || (phi[d0PM] <= phiLim) || (phi[d0MM] <= phiLim) || (phi[d0PP] <= phiLim) || (phi[d0MP] <= phiLim) ||
+                                                  (phi[dPPP] <= phiLim) || (phi[dPMP] <= phiLim) || (phi[dMPP] <= phiLim) || (phi[dMMP] <= phiLim) ||
+                         (phi[dPPM] <= phiLim) || (phi[dPMM] <= phiLim) || (phi[dMPM] <= phiLim) || (phi[dMMM] <= phiLim))) {
 
 					// {
                         /// QR eddyviscosity:
@@ -3961,8 +3961,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
                         - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
                     }
 
-					//if ((phi[DIR_000] > c1o2)&& (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)){//&& ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) {
-     //               if ((phi[DIR_000] > 0.01) && (phi[DIR_000]<0.99)){
+					//if ((phi[d000] > c1o2)&& (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)){//&& ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) {
+     //               if ((phi[d000] > 0.01) && (phi[d000]<0.99)){
 					//	//std::cout << "new node\n";
 					//	///QR eddyviscosity:
 					//	real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux)-(Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
@@ -3986,14 +3986,14 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					///////
 
                     // non Newtonian fluid collision factor
-                    //if (phi[DIR_000] > phiLim) {
+                    //if (phi[d000] > phiLim) {
                     //    real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
                     //    collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
                     //    collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM;
                     //}
 
 				//low viscouse non Newtonian fluid
-                if (phi[DIR_000] > phiLim) {
+                if (phi[d000] > phiLim) {
                         real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
                         collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
                         collFactorM = (collFactorM < c1o12) ? c1o12 : collFactorM;
@@ -4039,7 +4039,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					mfbab += collFactorM * (-mfbab);
 					mfbba += collFactorM * (-mfbba);
 
-//					mfhaaa = (phi[DIR_000] < c1o2) ? mfaaa * rhoL / rhoH : mfaaa * rhoL / rhoH;
+//					mfhaaa = (phi[d000] < c1o2) ? mfaaa * rhoL / rhoH : mfaaa * rhoL / rhoH;
 					mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy);
 					mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz);
 
@@ -4319,12 +4319,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 					//#endif
 
 					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-						UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + ",phi=" + UbSystem::toString(phi[DIR_000])));
+						UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + ",phi=" + UbSystem::toString(phi[d000])));
 
 					//////////////////////////////////////////////////////////////////////////
 					//write distribution
 					//////////////////////////////////////////////////////////////////////////
-				//	if (phi[DIR_000] < c1o2) {
+				//	if (phi[d000] < c1o2) {
 						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3;
 						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3;
 						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3;
@@ -4749,33 +4749,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//				int x2p = x2 + 1;
 	//				int x3p = x3 + 1;
 	//				findNeighbors(phaseField, x1, x2, x3);
-	//				if ((phi[DIR_000] > c1o2) && (
-	//					(phi[DIR_P00] <= c1o2) ||
-	//					(phi[DIR_M00] <= c1o2) ||
-	//					(phi[DIR_00P] <= c1o2) ||
-	//					(phi[DIR_00M] <= c1o2) ||
-	//					(phi[DIR_0M0] <= c1o2) ||
-	//					(phi[DIR_0P0] <= c1o2) ||
-	//					(phi[DIR_PP0] <= c1o2) ||
-	//					(phi[DIR_PM0] <= c1o2) ||
-	//					(phi[DIR_P0P] <= c1o2) ||
-	//					(phi[DIR_P0M] <= c1o2) ||
-	//					(phi[DIR_MP0] <= c1o2) ||
-	//					(phi[DIR_MM0] <= c1o2) ||
-	//					(phi[DIR_M0P] <= c1o2) ||
-	//					(phi[DIR_M0M] <= c1o2) ||
-	//					(phi[DIR_0PM] <= c1o2) ||
-	//					(phi[DIR_0MM] <= c1o2) ||
-	//					(phi[DIR_0PP] <= c1o2) ||
-	//					(phi[DIR_0MP] <= c1o2) ||
-	//					(phi[DIR_PPP] <= c1o2) ||
-	//					(phi[DIR_PMP] <= c1o2) ||
-	//					(phi[DIR_MPP] <= c1o2) ||
-	//					(phi[DIR_MMP] <= c1o2) ||
-	//					(phi[DIR_PPM] <= c1o2) ||
-	//					(phi[DIR_PMM] <= c1o2) ||
-	//					(phi[DIR_MPM] <= c1o2) ||
-	//					(phi[DIR_MMM] <= c1o2)
+	//				if ((phi[d000] > c1o2) && (
+	//					(phi[dP00] <= c1o2) ||
+	//					(phi[dM00] <= c1o2) ||
+	//					(phi[d00P] <= c1o2) ||
+	//					(phi[d00M] <= c1o2) ||
+	//					(phi[d0M0] <= c1o2) ||
+	//					(phi[d0P0] <= c1o2) ||
+	//					(phi[dPP0] <= c1o2) ||
+	//					(phi[dPM0] <= c1o2) ||
+	//					(phi[dP0P] <= c1o2) ||
+	//					(phi[dP0M] <= c1o2) ||
+	//					(phi[dMP0] <= c1o2) ||
+	//					(phi[dMM0] <= c1o2) ||
+	//					(phi[dM0P] <= c1o2) ||
+	//					(phi[dM0M] <= c1o2) ||
+	//					(phi[d0PM] <= c1o2) ||
+	//					(phi[d0MM] <= c1o2) ||
+	//					(phi[d0PP] <= c1o2) ||
+	//					(phi[d0MP] <= c1o2) ||
+	//					(phi[dPPP] <= c1o2) ||
+	//					(phi[dPMP] <= c1o2) ||
+	//					(phi[dMPP] <= c1o2) ||
+	//					(phi[dMMP] <= c1o2) ||
+	//					(phi[dPPM] <= c1o2) ||
+	//					(phi[dPMM] <= c1o2) ||
+	//					(phi[dMPM] <= c1o2) ||
+	//					(phi[dMMM] <= c1o2)
 	//					)) {
 	//					//real mfabb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3;
 	//					//real mfbab = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3;
@@ -4818,47 +4818,47 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//							real ftemp= D3Q27System::getCompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz) + D3Q27System::getCompFeqForDirection(fdir, rhoG, vx, vy, vz);
 	//							real fBB;
 	//							fBB=distribution->getDistributionInvForDirection( x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir],fdir);
-	//							distribution->setDistributionInvForDirection(ftemp - ff[fdir], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-	//							distribution->setDistributionForDirection(fBB-c6o1*D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+	//							distribution->setPreCollisionDistributionForDirection(ftemp - ff[fdir], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
+	//							distribution->setPostCollisionDistributionForDirection(fBB-c6o1*D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 	//						}
 	//					}
 
-	//					//if ((phi[DIR_P00] <= c1o2)) {
+	//					//if ((phi[dP00] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(W, rhoG, vx,vy,vz )+ D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_E, x1 + 1, x2, x3);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_E, x1+1, x2, x3)=ftemp-mfcbb;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)=fBB-c6o1*c2o27*(-vx);
 	//					//}
-	//					//if ((phi[DIR_M00] <= c1o2)) {
+	//					//if ((phi[dM00] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(W, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p-1, x2, x3);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p - 1, x2, x3) = ftemp - mfabb;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vx);
 	//					//}
-	//					//if ((phi[DIR_0P0] <= c1o2)) {
+	//					//if ((phi[d0P0] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2+1, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3) = ftemp - mfbcb;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = fBB - c6o1 * c2o27 * (-vy);
 	//					//}
-	//					//if ((phi[DIR_0M0] <= c1o2)) {
+	//					//if ((phi[d0M0] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2 - 1, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p-1, x3);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p - 1, x3) = ftemp - mfbab;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vy);
 	//					//}
-	//					//if ((phi[DIR_00P] <= c1o2)) {
+	//					//if ((phi[d00P] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2 , x3+1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1) = ftemp - mfbbc;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = fBB - c6o1 * c2o27 * (-vz);
 	//					//}
-	//					//if ((phi[DIR_00M] <= c1o2)) {
+	//					//if ((phi[d00M] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p-1);
@@ -4866,84 +4866,84 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vz);
 	//					//}
 	//					//
-	//					//if ((phi[DIR_PP0] <= c1o2)) {
+	//					//if ((phi[dPP0] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2+1, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_NE, x1+1, x2+1, x3);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_NE, x1 + 1, x2 + 1, x3) = ftemp - mfccb;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = fBB - c6o1 * c1o54 * (-vx-vy);
 	//					//}
-	//					//if ((phi[DIR_MM0] <= c1o2)) {
+	//					//if ((phi[dMM0] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p-1, x2p-1, x3);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p - 1, x2p - 1, x3) = ftemp - mfaab;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vy);
 	//					//}
-	//					//if ((phi[DIR_MP0] <= c1o2)) {
+	//					//if ((phi[dMP0] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p-1, x2+1, x3);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_NW, x1p - 1, x2 + 1, x3) = ftemp - mfacb;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = fBB - c6o1 * c1o54 * ( vx - vy);
 	//					//}
-	//					//if ((phi[DIR_PM0] <= c1o2)) {
+	//					//if ((phi[dPM0] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1+1, x2p-1, x3);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1 + 1, x2p - 1, x3) = ftemp - mfcab;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vy);
 	//					//}
-	//					//if ((phi[DIR_P0P] <= c1o2)) {
+	//					//if ((phi[dP0P] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 , x3+1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TE, x1+1, x2, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TE, x1 + 1, x2, x3 + 1) = ftemp - mfcbc;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = fBB - c6o1 * c1o54 * (-vx - vz);
 	//					//}
-	//					//if ((phi[DIR_M0P] <= c1o2)) {
+	//					//if ((phi[dM0P] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p-1, x2, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TW, x1p - 1, x2, x3 + 1) = ftemp - mfabc;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vx - vz);
 	//					//}
-	//					//if ((phi[DIR_P0M] <= c1o2)) {
+	//					//if ((phi[dP0M] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1+1, x2, x3p-1);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1 + 1, x2, x3p - 1) = ftemp - mfcba;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vz);
 	//					//}
-	//					//if ((phi[DIR_M0M] <= c1o2)) {
+	//					//if ((phi[dM0M] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p-1, x2, x3p-1);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p - 1, x2, x3p - 1) = ftemp - mfaba;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vz);
 	//					//}
-	//					//if ((phi[DIR_0PP] <= c1o2)) {
+	//					//if ((phi[d0PP] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2+1, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2+1, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2 + 1, x3 + 1) = ftemp - mfbcc;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = fBB - c6o1 * c1o54 * (-vy - vz);
 	//					//}
-	//					//if ((phi[DIR_0MP] <= c1o2)) {
+	//					//if ((phi[d0MP] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2 - 1, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p-1, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p - 1, x3 + 1) = ftemp - mfbac;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vy - vz);
 	//					//}
-	//					//if ((phi[DIR_0PM] <= c1o2)) {
+	//					//if ((phi[d0PM] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2 + 1, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2+1, x3p-1);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2 + 1, x3p - 1) = ftemp - mfbca;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = fBB - c6o1 * c1o54 * (-vy + vz);
 	//					//}
-	//					//if ((phi[DIR_0MM] <= c1o2)) {
+	//					//if ((phi[d0MM] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1, x2 - 1, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p-1, x3p-1);
@@ -4951,56 +4951,56 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = fBB - c6o1 * c1o54 * (-vy - vz);
 	//					//}
 
-	//					//if ((phi[DIR_PPP] <= c1o2)) {
+	//					//if ((phi[dPPP] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1+1, x2 + 1, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1+1, x2+1, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNE, x1 + 1, x2 + 1, x3 + 1) = ftemp - mfccc;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = fBB - c6o1 * c1o216 * (-vx -vy - vz);
 	//					//}
-	//					//if ((phi[DIR_MPP] <= c1o2)) {
+	//					//if ((phi[dMPP] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p-1, x2+1, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p - 1, x2 + 1, x3 + 1) = ftemp - mfacc;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = fBB - c6o1 * c1o216 * ( vx - vy - vz);
 	//					//}
-	//					//if ((phi[DIR_MMP] <= c1o2)) {
+	//					//if ((phi[dMMP] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p-1, x2p-1, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p - 1, x2p - 1, x3 + 1) = ftemp - mfaac;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = fBB - c6o1 * c1o216 * (vx + vy - vz);
 	//					//}
-	//					//if ((phi[DIR_PMP] <= c1o2)) {
+	//					//if ((phi[dPMP] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 + 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1+1, x2p-1, x3+1);
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSE, x1 + 1, x2p - 1, x3 + 1) = ftemp - mfcac;
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = fBB - c6o1 * c1o216 * (-vx + vy - vz);
 	//					//}
-	//					//if ((phi[DIR_PMM] <= c1o2)) {
+	//					//if ((phi[dPMM] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1) = ftemp - mfcaa;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = fBB - c6o1 * c1o216 * (-vx + vy + vz);
 	//					//}
-	//					//if ((phi[DIR_MMM] <= c1o2)) {
+	//					//if ((phi[dMMM] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p-1, x2p-1, x3p-1);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p - 1, x2p - 1, x3p - 1) = ftemp - mfaaa;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = fBB - c6o1 * c1o216 * ( vx + vy + vz);
 	//					//}
-	//					//if ((phi[DIR_MPM] <= c1o2)) {
+	//					//if ((phi[dMPM] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p-1, x2+1, x3p-1);
 	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p - 1, x2 + 1, x3p - 1) = ftemp - mfaca;
 	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = fBB - c6o1 * c1o216 * (vx - vy + vz);
 	//					//}
-	//					//if ((phi[DIR_PPM] <= c1o2)) {
+	//					//if ((phi[dPPM] <= c1o2)) {
 	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 + 1, x3 - 1);
 	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz);
 	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1+1, x2+1, x3p-1);
@@ -5029,90 +5029,90 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step)
 real MultiphaseScaleDistributionLBMKernel::gradX1_phi()
 {
 	using namespace D3Q27System;
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX2_phi()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX3_phi()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV)
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV)
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX1_phi2()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX2_phi2()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 }
 
 real MultiphaseScaleDistributionLBMKernel::gradX3_phi2()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 }
 
 real MultiphaseScaleDistributionLBMKernel::nabla2_phi()
 {
 	using namespace D3Q27System;
 	real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-		(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-		((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
 
 	return 6.0 * sum;
@@ -5127,29 +5127,29 @@ real MultiphaseScaleDistributionLBMKernel::computeCurvature_phi()
     real phiY = gradX2_phi();
     real phiZ = gradX3_phi();
     real phiXX =
-        c4o9 * (phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_0P0] + phi[DIR_MP0]) + (phi[DIR_PM0] - c2o1 * phi[DIR_0M0] + phi[DIR_MM0])) + ((phi[DIR_P0P] - c2o1 * phi[DIR_00P] + phi[DIR_M0P]) + (phi[DIR_P0M] - c2o1 * phi[DIR_00M] + phi[DIR_M0M]))) +
-                                                                      c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_0PP] + phi[DIR_MPP]) + (phi[DIR_PMP] - c2o1 * phi[DIR_0MP] + phi[DIR_MMP])) + ((phi[DIR_PPM] - c2o1 * phi[DIR_0PM] + phi[DIR_MPM]) + (phi[DIR_PMM] - c2o1 * phi[DIR_0MM] + phi[DIR_MMM]))));
+        c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) +
+                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM]))));
     real phiYY =
-        c4o9 * (phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_P00] + phi[DIR_PM0]) + (phi[DIR_MP0] - c2o1 * phi[DIR_M00] + phi[DIR_MM0])) + ((phi[DIR_0PP] - c2o1 * phi[DIR_00P] + phi[DIR_0MP]) + (phi[DIR_0PM] - c2o1 * phi[DIR_00M] + phi[DIR_0MM]))) +
-                                                                      c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_P0P] + phi[DIR_PMP]) + (phi[DIR_MPM] - c2o1 * phi[DIR_M0M] + phi[DIR_MMM])) + ((phi[DIR_MPP] - c2o1 * phi[DIR_M0P] + phi[DIR_MMP]) + (phi[DIR_PPM] - c2o1 * phi[DIR_P0M] + phi[DIR_PMM]))));
+        c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) +
+                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM]))));
     real phiZZ =
-        c4o9 * (phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]) + (c1o9 * (((phi[DIR_M0P] - c2o1 * phi[DIR_M00] + phi[DIR_M0M]) + (phi[DIR_P0P] - c2o1 * phi[DIR_P00] + phi[DIR_P0M])) + ((phi[DIR_0MP] - c2o1 * phi[DIR_0M0] + phi[DIR_0MM]) + (phi[DIR_0PP] - c2o1 * phi[DIR_0P0] + phi[DIR_0PM]))) +
-                                                                      c1o36 * (((phi[DIR_MPP] - c2o1 * phi[DIR_MP0] + phi[DIR_MPM]) + (phi[DIR_PMP] - c2o1 * phi[DIR_PM0] + phi[DIR_PMM])) + ((phi[DIR_MMP] - c2o1 * phi[DIR_MM0] + phi[DIR_MMM]) + (phi[DIR_PPP] - c2o1 * phi[DIR_PP0] + phi[DIR_PPM]))));
-    real phiXY = c1o4 * (c2o3 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]) + c1o6 * ((phi[DIR_MMP] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PPM] - phi[DIR_MPM])));
-    real phiXZ = c1o4 * (c2o3 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]) + c1o6 * ((phi[DIR_MPM] - phi[DIR_PPM] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PMP] - phi[DIR_MMP])));
-    real phiYZ = c1o4 * (c2o3 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]) + c1o6 * ((phi[DIR_MMM] - phi[DIR_MMP] + phi[DIR_MPP] - phi[DIR_MPM]) + (phi[DIR_PMM] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_PPM])));
+        c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) +
+                                                                      c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM]))));
+    real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM])));
+    real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP])));
+    real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM])));
 
     // non isotropic FD (to be improved):
-    // real phiX = (phi[DIR_P00] - phi[DIR_M00]) * c1o2; //gradX1_phi();
-    // real phiY = (phi[DIR_0P0] - phi[DIR_0M0]) * c1o2; //gradX2_phi();
-    // real phiZ = (phi[DIR_00P] - phi[DIR_00M]) * c1o2; //gradX3_phi();
-
-    // real phiXX = phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00];
-    // real phiYY = phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0];
-    // real phiZZ =( phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]);
-    // real phiXY = c1o4 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]);
-    // real phiXZ = c1o4 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]);
-    // real phiYZ = c1o4 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]);
+    // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi();
+    // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi();
+    // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi();
+
+    // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00];
+    // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0];
+    // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]);
+    // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]);
+    // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]);
+    // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]);
     // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
 
 	return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)+1e-200);
@@ -5176,35 +5176,35 @@ void MultiphaseScaleDistributionLBMKernel::computePhasefield()
 					int x2p = x2 + 1;
 					int x3p = x3 + 1;
 
-					h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
 				}
 			}
 		}
@@ -5218,7 +5218,7 @@ void MultiphaseScaleDistributionLBMKernel::findNeighbors(CbArray3D<real, Indexer
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi[DIR_000] = (*ph)(x1, x2, x3);
+	phi[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
@@ -5242,7 +5242,7 @@ void MultiphaseScaleDistributionLBMKernel::findNeighbors2(CbArray3D<real, Indexe
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h
index 85ada0fc290658fae8d3d92c1b2d8ae8dd0df471..b5cdb07c446f9efbb0eefdd7994a418747fdef03 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h
@@ -138,34 +138,34 @@ protected:
 inline bool MultiphaseScaleDistributionLBMKernel::isGas(real phiLim, real* phi, real* phi2)
 {
     using namespace vf::lbm::dir;
-    return (phi2[DIR_000] <= phiLim) || ((phi[DIR_000] <= phiLim) &&
+    return (phi2[d000] <= phiLim) || ((phi[d000] <= phiLim) &&
                         (
-						(phi[DIR_P00] > phiLim) ||
-						(phi[DIR_M00] > phiLim) ||
-						(phi[DIR_00P] > phiLim) ||
-						(phi[DIR_00M] > phiLim) ||
-						(phi[DIR_0M0] > phiLim) ||
-						(phi[DIR_0P0] > phiLim) ||
-						(phi[DIR_PP0] > phiLim) ||
-						(phi[DIR_PM0] > phiLim) ||
-						(phi[DIR_P0P] > phiLim) ||
-						(phi[DIR_P0M] > phiLim) ||
-						(phi[DIR_MP0] > phiLim) ||
-						(phi[DIR_MM0] > phiLim) ||
-						(phi[DIR_M0P] > phiLim) ||
-						(phi[DIR_M0M] > phiLim) ||
-						(phi[DIR_0PM] > phiLim) ||
-						(phi[DIR_0MM] > phiLim) ||
-						(phi[DIR_0PP] > phiLim) ||
-						(phi[DIR_0MP] > phiLim) ||
-						(phi[DIR_PPP] > phiLim) ||
-						(phi[DIR_PMP] > phiLim) ||
-						(phi[DIR_MPP] > phiLim) ||
-						(phi[DIR_MMP] > phiLim) ||
-						(phi[DIR_PPM] > phiLim) ||
-						(phi[DIR_PMM] > phiLim) ||
-						(phi[DIR_MPM] > phiLim) ||
-						(phi[DIR_MMM] > phiLim)
+						(phi[dP00] > phiLim) ||
+						(phi[dM00] > phiLim) ||
+						(phi[d00P] > phiLim) ||
+						(phi[d00M] > phiLim) ||
+						(phi[d0M0] > phiLim) ||
+						(phi[d0P0] > phiLim) ||
+						(phi[dPP0] > phiLim) ||
+						(phi[dPM0] > phiLim) ||
+						(phi[dP0P] > phiLim) ||
+						(phi[dP0M] > phiLim) ||
+						(phi[dMP0] > phiLim) ||
+						(phi[dMM0] > phiLim) ||
+						(phi[dM0P] > phiLim) ||
+						(phi[dM0M] > phiLim) ||
+						(phi[d0PM] > phiLim) ||
+						(phi[d0MM] > phiLim) ||
+						(phi[d0PP] > phiLim) ||
+						(phi[d0MP] > phiLim) ||
+						(phi[dPPP] > phiLim) ||
+						(phi[dPMP] > phiLim) ||
+						(phi[dMPP] > phiLim) ||
+						(phi[dMMP] > phiLim) ||
+						(phi[dPPM] > phiLim) ||
+						(phi[dPMM] > phiLim) ||
+						(phi[dMPM] > phiLim) ||
+						(phi[dMMM] > phiLim)
 						));
 }
 
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp
index 85d6dcadcd3f8ebf661d7f32f18dcbc54c4eb5c4..1f1bb536a19251ac1cabb2696035e6645cede09c 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp
@@ -441,13 +441,13 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
 						///!test
 
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 						//collFactorM = phi[REST] - phiL < (phiH - phiL) * 0.05 ? collFactorG : collFactorL;
 
-                        real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
 						if (withForcing) {
 							// muX1 = static_cast<double>(x1-1+ix1*maxX1);
@@ -598,9 +598,9 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 				  // vvxF = vvxF;
 			   //}
 			   real weightGrad =  1.0-denom*denom/(denom*denom+0.0001*0.001);
-			   real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX1;
-			   real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX2;
-			   real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX3;
+			   real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1;
+			   real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2;
+			   real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3;
 
 			   //dX1_phiF *= 1.2;
 			   //dX2_phiF *= 1.2;
@@ -656,15 +656,15 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
 			   }
 
-			   real gamma = WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-			   real fac1 = (gamma - WEIGTH[DIR_000]) * c1o3 * rhoToPhi;
-			   forcingTerm[DIR_000] = (-vvxF) * (fac1 * dX1_phiF ) +
+			   real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+			   real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi;
+			   forcingTerm[d000] = (-vvxF) * (fac1 * dX1_phiF ) +
 				   (-vvyF) * (fac1 * dX2_phiF ) +
 				   (-vvzF) * (fac1 * dX3_phiF );
 
 			   ////////
 			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
+			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
 			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
 			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
 			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
@@ -727,7 +727,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
 				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
 
-				  // forcingTerm[DIR_P00]	 *=scaleDiv;
+				  // forcingTerm[dP00]	 *=scaleDiv;
 				  // forcingTerm[N]	 *=scaleDiv;
 				  // forcingTerm[T]	 *=scaleDiv;
 				  // forcingTerm[NE]	 *=scaleDiv;
@@ -758,33 +758,33 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   ////////
 
 
-			   mfcbb +=3.0 * ( 0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb +=3.0 * ( 0.5 * forcingTerm[DIR_0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc +=3.0 * ( 0.5 * forcingTerm[DIR_00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb +=3.0 * ( 0.5 * forcingTerm[DIR_PP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb +=3.0 * ( 0.5 * forcingTerm[DIR_MP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc +=3.0 * ( 0.5 * forcingTerm[DIR_P0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc +=3.0 * ( 0.5 * forcingTerm[DIR_M0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc +=3.0 * ( 0.5 * forcingTerm[DIR_0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac +=3.0 * ( 0.5 * forcingTerm[DIR_0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc +=3.0 * ( 0.5 * forcingTerm[DIR_PPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc +=3.0 * ( 0.5 * forcingTerm[DIR_MPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac +=3.0 * ( 0.5 * forcingTerm[DIR_PMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac +=3.0 * ( 0.5 * forcingTerm[DIR_MMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb +=3.0 * ( 0.5 * forcingTerm[DIR_M00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab +=3.0 * ( 0.5 * forcingTerm[DIR_0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba +=3.0 * ( 0.5 * forcingTerm[DIR_00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab +=3.0 * ( 0.5 * forcingTerm[DIR_MM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab +=3.0 * ( 0.5 * forcingTerm[DIR_PM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba +=3.0 * ( 0.5 * forcingTerm[DIR_M0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba +=3.0 * ( 0.5 * forcingTerm[DIR_P0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa +=3.0 * ( 0.5 * forcingTerm[DIR_0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca +=3.0 * ( 0.5 * forcingTerm[DIR_0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa +=3.0 * ( 0.5 * forcingTerm[DIR_MMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa +=3.0 * ( 0.5 * forcingTerm[DIR_PMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca +=3.0 * ( 0.5 * forcingTerm[DIR_MPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca +=3.0 * ( 0.5 * forcingTerm[DIR_PPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb +=3.0 * ( 0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
+			   mfcbb +=3.0 * ( 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   mfbcb +=3.0 * ( 0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+			   mfbbc +=3.0 * ( 0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+			   mfccb +=3.0 * ( 0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+			   mfacb +=3.0 * ( 0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+			   mfcbc +=3.0 * ( 0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+			   mfabc +=3.0 * ( 0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+			   mfbcc +=3.0 * ( 0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+			   mfbac +=3.0 * ( 0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+			   mfccc +=3.0 * ( 0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+			   mfacc +=3.0 * ( 0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+			   mfcac +=3.0 * ( 0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+			   mfaac +=3.0 * ( 0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+			   mfabb +=3.0 * ( 0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+			   mfbab +=3.0 * ( 0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+			   mfbba +=3.0 * ( 0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+			   mfaab +=3.0 * ( 0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+			   mfcab +=3.0 * ( 0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+			   mfaba +=3.0 * ( 0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+			   mfcba +=3.0 * ( 0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+			   mfbaa +=3.0 * ( 0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+			   mfbca +=3.0 * ( 0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+			   mfaaa +=3.0 * ( 0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+			   mfcaa +=3.0 * ( 0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+			   mfaca +=3.0 * ( 0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+			   mfcca +=3.0 * ( 0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+			   mfbbb +=3.0 * ( 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
 
 			   //--------------------------------------------------------
 
@@ -1096,7 +1096,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   real OxyyMxzz =  8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
 			   real Oxyz =  24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
 			   real A =  (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
 			   real BB =   (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
 
 
@@ -1172,7 +1172,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
 			   ////relax unfiltered
 			   //! divergenceFilter 10.05.2021
-			   real divMag= (1.0 - phi[DIR_000]) * (phi[DIR_000])*10*5*sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))));
+			   real divMag= (1.0 - phi[d000]) * (phi[d000])*10*5*sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))));
 			  // LBMReal divMag = 500 *500* 50*(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))))* (fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))));
 			   //LBMReal divMag = (dX1_phi * dxux) > 0 ? (dX1_phi * dxux) : 0;
 			   //divMag += (dX2_phi * dyuy) > 0 ? (dX2_phi * dyuy) : 0;
@@ -1629,33 +1629,33 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
 			   /////classical source term 8.4.2021
 
-			   mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb += 3.0 * (0.5 * forcingTerm[DIR_0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc += 3.0 * (0.5 * forcingTerm[DIR_00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb += 3.0 * (0.5 * forcingTerm[DIR_PP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb += 3.0 * (0.5 * forcingTerm[DIR_MP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc += 3.0 * (0.5 * forcingTerm[DIR_P0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc += 3.0 * (0.5 * forcingTerm[DIR_M0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc += 3.0 * (0.5 * forcingTerm[DIR_0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac += 3.0 * (0.5 * forcingTerm[DIR_0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc += 3.0 * (0.5 * forcingTerm[DIR_PPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc += 3.0 * (0.5 * forcingTerm[DIR_MPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac += 3.0 * (0.5 * forcingTerm[DIR_PMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac += 3.0 * (0.5 * forcingTerm[DIR_MMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb += 3.0 * (0.5 * forcingTerm[DIR_M00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab += 3.0 * (0.5 * forcingTerm[DIR_0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba += 3.0 * (0.5 * forcingTerm[DIR_00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab += 3.0 * (0.5 * forcingTerm[DIR_MM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab += 3.0 * (0.5 * forcingTerm[DIR_PM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba += 3.0 * (0.5 * forcingTerm[DIR_M0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba += 3.0 * (0.5 * forcingTerm[DIR_P0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa += 3.0 * (0.5 * forcingTerm[DIR_0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca += 3.0 * (0.5 * forcingTerm[DIR_0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa += 3.0 * (0.5 * forcingTerm[DIR_MMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa += 3.0 * (0.5 * forcingTerm[DIR_PMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca += 3.0 * (0.5 * forcingTerm[DIR_MPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca += 3.0 * (0.5 * forcingTerm[DIR_PPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb += 3.0 * (0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
+			   mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+			   mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+			   mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+			   mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+			   mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+			   mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+			   mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+			   mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+			   mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+			   mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+			   mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+			   mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+			   mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+			   mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+			   mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+			   mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+			   mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+			   mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+			   mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+			   mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+			   mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+			   mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+			   mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+			   mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+			   mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+			   mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
 
 
 
@@ -1750,7 +1750,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 //
 //                        //--------------------------------------------------------
 //
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 //                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 //                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 //                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -2458,7 +2458,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 //                        }
 //#endif
 //
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00];
+//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
 //                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
 //                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
 //                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
@@ -2681,9 +2681,9 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   real Mccb = mfccb - mfaab * c1o9;
 
 			   // collision of 1st order moments
-			   cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
-			   cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
-			   cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+			   cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
+			   cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
+			   cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 
 			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
 			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
@@ -2833,7 +2833,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
                         ///////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
 //using namespace D3Q27System;
 
-      //                  h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+      //                  h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
       //                  h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
       //                  h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
       //                  h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
@@ -2933,9 +2933,9 @@ real MultiphaseScratchCumulantLBMKernel::gradX1_phi()
 	using namespace vf::lbm::dir;
     using namespace D3Q27System;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX1[k] * phi[k];
@@ -2948,9 +2948,9 @@ real MultiphaseScratchCumulantLBMKernel::gradX2_phi()
 	using namespace vf::lbm::dir;
     using namespace D3Q27System;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX2[k] * phi[k];
@@ -2963,9 +2963,9 @@ real MultiphaseScratchCumulantLBMKernel::gradX3_phi()
 	using namespace vf::lbm::dir;
 	using namespace D3Q27System;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX3[k] * phi[k];
@@ -2979,17 +2979,17 @@ real MultiphaseScratchCumulantLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
     real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
@@ -3021,35 +3021,35 @@ void MultiphaseScratchCumulantLBMKernel::computePhasefield()
                     int x2p = x2 + 1;
                     int x3p = x3 + 1;
 
-                    h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                    h[DIR_0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                    h[DIR_00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                    h[DIR_PP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[DIR_MP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[DIR_P0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[DIR_M0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[DIR_0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[DIR_0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[DIR_PPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[DIR_MPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[DIR_PMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[DIR_MMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[DIR_M00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[DIR_0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[DIR_00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[DIR_MM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[DIR_PM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[DIR_M0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[DIR_P0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[DIR_0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[DIR_0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[DIR_MMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[DIR_PMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[DIR_MPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[DIR_PPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[DIR_000] = (*this->zeroDistributionsH)(x1, x2, x3);
+                    h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                    h[d0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+                    h[d00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+                    h[dPP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[dMP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[dP0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[dM0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[d0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[d0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[dM00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[d0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[d00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[dMM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[dPM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[dM0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[dP0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[d0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[d0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[d000] = (*this->zeroDistributionsH)(x1, x2, x3);
                 }
             }
         }
@@ -3064,7 +3064,7 @@ void MultiphaseScratchCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi[DIR_000] = (*ph)(x1, x2, x3);
+    phi[d000] = (*ph)(x1, x2, x3);
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp
index 5d32955a948f9c997832cfd9757a1887d0c58466..d3f3ed1000fd4bc48ab11623294e2b7e7f27b62d 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp
@@ -258,7 +258,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 					
 					SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions();
 					real hh[27];
-					distributionH->getDistributionInv(hh, x1, x2, x3);
+					distributionH->getPostCollisionDistribution(hh, x1, x2, x3);
 					real phiD, vxP, vyP, vzP;
 
 					D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP);
@@ -267,7 +267,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 
 					SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
 					real ff[27];
-					distribution->getDistributionInv(ff, x1, x2, x3);
+					distribution->getPostCollisionDistribution(ff, x1, x2, x3);
 					real rhoG,vx,vy,vz;
 
 					D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
@@ -296,33 +296,33 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 					////////////////////////////////Momentum conservation experiment 06.03.2023
 					//surfacetension
 
-					if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[DIR_000]<=c1o2)&& (
-						(phi[DIR_P00] > c1o2) ||
-						(phi[DIR_M00] > c1o2) ||
-						(phi[DIR_00P] > c1o2) ||
-						(phi[DIR_00M] > c1o2) ||
-						(phi[DIR_0M0] > c1o2) ||
-						(phi[DIR_0P0] > c1o2) ||
-						(phi[DIR_PP0] > c1o2) ||
-						(phi[DIR_PM0] > c1o2) ||
-						(phi[DIR_P0P] > c1o2) ||
-						(phi[DIR_P0M] > c1o2) ||
-						(phi[DIR_MP0] > c1o2) ||
-						(phi[DIR_MM0] > c1o2) ||
-						(phi[DIR_M0P] > c1o2) ||
-						(phi[DIR_M0M] > c1o2) ||
-						(phi[DIR_0PM] > c1o2) ||
-						(phi[DIR_0MM] > c1o2) ||
-						(phi[DIR_0PP] > c1o2) ||
-						(phi[DIR_0MP] > c1o2) ||
-						(phi[DIR_PPP] > c1o2) ||
-						(phi[DIR_PMP] > c1o2) ||
-						(phi[DIR_MPP] > c1o2) ||
-						(phi[DIR_MMP] > c1o2) ||
-						(phi[DIR_PPM] > c1o2) ||
-						(phi[DIR_PMM] > c1o2) ||
-						(phi[DIR_MPM] > c1o2) ||
-						(phi[DIR_MMM] > c1o2)
+					if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000]<=c1o2)&& (
+						(phi[dP00] > c1o2) ||
+						(phi[dM00] > c1o2) ||
+						(phi[d00P] > c1o2) ||
+						(phi[d00M] > c1o2) ||
+						(phi[d0M0] > c1o2) ||
+						(phi[d0P0] > c1o2) ||
+						(phi[dPP0] > c1o2) ||
+						(phi[dPM0] > c1o2) ||
+						(phi[dP0P] > c1o2) ||
+						(phi[dP0M] > c1o2) ||
+						(phi[dMP0] > c1o2) ||
+						(phi[dMM0] > c1o2) ||
+						(phi[dM0P] > c1o2) ||
+						(phi[dM0M] > c1o2) ||
+						(phi[d0PM] > c1o2) ||
+						(phi[d0MM] > c1o2) ||
+						(phi[d0PP] > c1o2) ||
+						(phi[d0MP] > c1o2) ||
+						(phi[dPPP] > c1o2) ||
+						(phi[dPMP] > c1o2) ||
+						(phi[dMPP] > c1o2) ||
+						(phi[dMMP] > c1o2) ||
+						(phi[dPPM] > c1o2) ||
+						(phi[dPMM] > c1o2) ||
+						(phi[dMPM] > c1o2) ||
+						(phi[dMMM] > c1o2)
 						)) {
 						real vx = (*vxNode)(x1, x2, x3);
 						real vy = (*vyNode)(x1, x2, x3);
@@ -330,14 +330,14 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 						findNeighbors(phaseField, x1, x2, x3);
 						real laplacePressure = c12o1 * sigma * computeCurvature_phi();
       //                  if (step > 5000)
-      //                       UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[DIR_000]<< "\n");
+      //                       UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n");
 						findNeighbors(phaseFieldOld, x1, x2, x3);
 
 //16.03.23 c: BB gas side with updated boundary velocity
 
-						distribution->getDistributionInv(ff, x1, x2, x3);
+						distribution->getPostCollisionDistribution(ff, x1, x2, x3);
 						real rhoG;
-						if (phi[DIR_000] > c1o2) { //initialization necessary
+						if (phi[d000] > c1o2) { //initialization necessary
 							real sumRho = 0;
 							real sumWeight = 1.e-100;
 							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
@@ -377,24 +377,24 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 										//real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
 									//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew;
 										//real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC);
-									distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 									///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!)
 									//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
 									//real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
 									//real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 ));
 									//real fBC = fG - feqOLD + feqNew;
-									//distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir);
+									//distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
 
 
 									}
 								}
 							}
-							//distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000);
+							//distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
 							{
-								real fL = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
-								real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx,vy,vz);
-								real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoG,vx,vy,vz);
-								distribution->setDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, DIR_000);
+								real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
+								real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz);
+								real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz);
+								distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000);
 							}
 
 						}
@@ -431,7 +431,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
 
 										//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-										distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+										distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 										if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
 											//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 											//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
@@ -442,20 +442,20 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
 											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
 											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
 											//real number = 666;
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
 										////	real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
 										////	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
 										//	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 										//	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 
 										////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-										//	distribution->setDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+										//	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 										//	//if (vxBC != 0) {
 										//	//	int set = 0;
 										//	//}
@@ -479,7 +479,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
                                                 laplacePressureBC = laplacePressure; // curv; // reset to the above
                                             laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
                                             //laplacePressureBC *= sigma;
-                                            distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);
+                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);
 
 										}
 
@@ -528,16 +528,16 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
 
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
-											//distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setDistributionForDirection(0, x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+											//distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir);
 											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
 											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
 											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
 										//	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 										//	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
 										//	//real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC;
-										//	distribution->setDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG)  - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
+										//	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG)  - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
 
 										////	real number = 666;
 
@@ -559,7 +559,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
                                                 laplacePressureBC = laplacePressure; // curv; // reset to the above
                                             laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
                                             // laplacePressureBC *= sigma;
-                                            distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);
+                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);
 
 										}
 
@@ -622,7 +622,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 										// real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
 										// real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
 										// ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-										distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
+										distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 									}
 								}
 
@@ -638,7 +638,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir;
 								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);
 								//		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+								//		distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 								//		ff[fdir] = fL;
 								//	}
 								//	if (!(phi[fdir] > c1o2)) {
@@ -647,7 +647,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 								//		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
 								//		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
 								//		real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
+								//		distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
 								//		ff[fdir] = feqL;
 								//	}
 								//}
@@ -655,26 +655,26 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 						//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 						//	sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
 						//}
-						//ff[DIR_000] = rhoL - sumRho2;
+						//ff[d000] = rhoL - sumRho2;
 						//rhoL = 27.0 / 18.0 * sumRho2;
 						//std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n";
 						D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[DIR_000]<<"\n";
-						//distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000);
+						//std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n";
+						//distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
 						{
-							real fG = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000);
-							real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-							real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-							distribution->setDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, DIR_000);
+							real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
+							real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
+							real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+							distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000);
 						}
 						//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
 						//	ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
 						//}
 						//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
+						//std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
 
-								//real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz);
-								//distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000);
+								//real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
+								//distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
 
 
 
@@ -761,13 +761,13 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 
 
 
-					collFactorM = phi[DIR_000] > c1o2 ? collFactorL : collFactorG;
-					//real collFactorMInv = phi[DIR_000] > c1o2 ? collFactorG : collFactorL;
+					collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG;
+					//real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL;
 
-					//real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+					//real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
 					//----------- Calculating Macroscopic Values -------------
-					real rho = phi[DIR_000] > c1o2 ? rhoH : rhoL;
+					real rho = phi[d000] > c1o2 ? rhoH : rhoL;
 
 
 
@@ -791,7 +791,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 
                      if (withForcing) {
                         muRho = rho;
-						muPhi = phi[DIR_000];
+						muPhi = phi[d000];
                         forcingX1 += muForcingX1.Eval();
                         forcingX2 += muForcingX2.Eval();
                         forcingX3 += muForcingX3.Eval();
@@ -838,8 +838,8 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 
                     ////////////////////////////////////////////////////////////////////////////////////
 					real wadjust;
-//					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[DIR_000] * (c1o1 - phi[DIR_000]));
-					//real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[DIR_000] * (c1o1 - phi[DIR_000]):c0o1)); 
+//					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000]));
+					//real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1)); 
 					real qudricLimit = 0.01;
 					
 																													                    ////////////////////////////////////////////////////////////////////////////////////
@@ -960,7 +960,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 					real Dxz = -c3o1 * collFactorM * mfbab;
 					real Dyz = -c3o1 * collFactorM * mfabb;
 
-                    // if (phi[DIR_000] > c1o2) {
+                    // if (phi[d000] > c1o2) {
                     //     /// QR eddyviscosity:
                     //     real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
                     //     real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz);
@@ -978,7 +978,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 
                     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                     // non Newtonian fluid collision factor
-                    if (phi[DIR_000] > c1o2) 
+                    if (phi[d000] > c1o2) 
 					{
                         real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
                         collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
@@ -1157,7 +1157,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 					//////////////////////////////////////////////////////////////////////////
 					//write distribution
 					//////////////////////////////////////////////////////////////////////////
-				//	if (phi[DIR_000] < c1o2) {
+				//	if (phi[d000] < c1o2) {
 						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3;
 						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3;
 						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3;
@@ -1460,90 +1460,90 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
 real MultiphaseSharpInterfaceLBMKernel::gradX1_phi()
 {
 	using namespace D3Q27System;
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX2_phi()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX3_phi()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV)
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV)
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX1_phi2()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX2_phi2()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::gradX3_phi2()
 {
 	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 }
 
 real MultiphaseSharpInterfaceLBMKernel::nabla2_phi()
 {
 	using namespace D3Q27System;
 	real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-		(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-		((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
 
 	return 6.0 * sum;
@@ -1557,30 +1557,30 @@ real MultiphaseSharpInterfaceLBMKernel::computeCurvature_phi()
 	real phiX = gradX1_phi();
 	real phiY = gradX2_phi();
 	real phiZ = gradX3_phi();
-	real phiXX = c4o9*(phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00])
-					+(c1o9*(((phi[DIR_PP0] - c2o1 * phi[DIR_0P0] + phi[DIR_MP0])+ (phi[DIR_PM0] - c2o1 * phi[DIR_0M0] + phi[DIR_MM0]))+ ((phi[DIR_P0P] - c2o1 * phi[DIR_00P] + phi[DIR_M0P]) + (phi[DIR_P0M] - c2o1 * phi[DIR_00M] + phi[DIR_M0M])))
-					+c1o36* (((phi[DIR_PPP] - c2o1 * phi[DIR_0PP] + phi[DIR_MPP]) + (phi[DIR_PMP] - c2o1 * phi[DIR_0MP] + phi[DIR_MMP])) + ((phi[DIR_PPM] - c2o1 * phi[DIR_0PM] + phi[DIR_MPM]) + (phi[DIR_PMM] - c2o1 * phi[DIR_0MM] + phi[DIR_MMM]))));
-	real phiYY = c4o9*(phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0])
-					+(c1o9*(((phi[DIR_PP0] - c2o1 * phi[DIR_P00] + phi[DIR_PM0])+ (phi[DIR_MP0] - c2o1 * phi[DIR_M00] + phi[DIR_MM0]))+ ((phi[DIR_0PP] - c2o1 * phi[DIR_00P] + phi[DIR_0MP]) + (phi[DIR_0PM] - c2o1 * phi[DIR_00M] + phi[DIR_0MM])))
-					+c1o36* (((phi[DIR_PPP] - c2o1 * phi[DIR_P0P] + phi[DIR_PMP]) + (phi[DIR_MPM] - c2o1 * phi[DIR_M0M] + phi[DIR_MMM])) + ((phi[DIR_MPP] - c2o1 * phi[DIR_M0P] + phi[DIR_MMP]) + (phi[DIR_PPM] - c2o1 * phi[DIR_P0M] + phi[DIR_PMM]))));
-	real phiZZ = c4o9*(phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M])
-					+(c1o9*(((phi[DIR_M0P] - c2o1 * phi[DIR_M00] + phi[DIR_M0M])+ (phi[DIR_P0P] - c2o1 * phi[DIR_P00] + phi[DIR_P0M]))+ ((phi[DIR_0MP] - c2o1 * phi[DIR_0M0] + phi[DIR_0MM]) + (phi[DIR_0PP] - c2o1 * phi[DIR_0P0] + phi[DIR_0PM])))
-					+c1o36* (((phi[DIR_MPP] - c2o1 * phi[DIR_MP0] + phi[DIR_MPM]) + (phi[DIR_PMP] - c2o1 * phi[DIR_PM0] + phi[DIR_PMM])) + ((phi[DIR_MMP] - c2o1 * phi[DIR_MM0] + phi[DIR_MMM]) + (phi[DIR_PPP] - c2o1 * phi[DIR_PP0] + phi[DIR_PPM]))));
-	real phiXY = c1o4 *(c2o3* (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0])+c1o6*((phi[DIR_MMP] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_MPP])+ (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PPM] - phi[DIR_MPM])));
-	real phiXZ = c1o4 *(c2o3* (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P])+c1o6*((phi[DIR_MPM] - phi[DIR_PPM] + phi[DIR_PPP] - phi[DIR_MPP])+ (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PMP] - phi[DIR_MMP])));
-	real phiYZ = c1o4 *(c2o3* (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM])+c1o6*((phi[DIR_MMM] - phi[DIR_MMP] + phi[DIR_MPP] - phi[DIR_MPM])+ (phi[DIR_PMM] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_PPM])));
+	real phiXX = c4o9*(phi[dP00] - c2o1 * phi[d000] + phi[dM00])
+					+(c1o9*(((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0])+ (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0]))+ ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M])))
+					+c1o36* (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM]))));
+	real phiYY = c4o9*(phi[d0P0] - c2o1 * phi[d000] + phi[d0M0])
+					+(c1o9*(((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0])+ (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0]))+ ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM])))
+					+c1o36* (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM]))));
+	real phiZZ = c4o9*(phi[d00P] - c2o1 * phi[d000] + phi[d00M])
+					+(c1o9*(((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M])+ (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M]))+ ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM])))
+					+c1o36* (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM]))));
+	real phiXY = c1o4 *(c2o3* (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0])+c1o6*((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM])));
+	real phiXZ = c1o4 *(c2o3* (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P])+c1o6*((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP])));
+	real phiYZ = c1o4 *(c2o3* (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM])+c1o6*((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM])+ (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM])));
 
 	//non isotropic FD (to be improved):
-	//real phiX = (phi[DIR_P00] - phi[DIR_M00]) * c1o2; //gradX1_phi();
-	//real phiY = (phi[DIR_0P0] - phi[DIR_0M0]) * c1o2; //gradX2_phi();
-	//real phiZ = (phi[DIR_00P] - phi[DIR_00M]) * c1o2; //gradX3_phi();
-
-	//real phiXX = phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00];
-	//real phiYY = phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0];
-	//real phiZZ =( phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]);
-	//real phiXY = c1o4 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]);
-	//real phiXZ = c1o4 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]);
-	//real phiYZ = c1o4 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]);
+	//real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi();
+	//real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi();
+	//real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi();
+
+	//real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00];
+	//real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0];
+	//real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]);
+	//real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]);
+	//real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]);
+	//real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]);
 	//real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
 	return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1*pow(phiX*phiX+phiY*phiY+phiZ*phiZ,c3o2));
 	
@@ -1608,35 +1608,35 @@ void MultiphaseSharpInterfaceLBMKernel::computePhasefield()
 					int x2p = x2 + 1;
 					int x3p = x3 + 1;
 
-					h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
 				}
 			}
 		}
@@ -1650,7 +1650,7 @@ void MultiphaseSharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi[DIR_000] = (*ph)(x1, x2, x3);
+	phi[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
@@ -1671,7 +1671,7 @@ void MultiphaseSharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
index 047da3666e9f77cd5624f5a3479b3cb79a43990b..a01c86ff8a63c89cde6405d32b590dd3fefb9825 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
@@ -476,20 +476,20 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 
 
 
-					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-					real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+					real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
 					//----------- Calculating Macroscopic Values -------------
-					real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible
+					real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible
 
 																		///scaled phase field
 					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1 - (*phaseField)(x1, x2, x3)) * (c1 - (*phaseField)(x1, x2, x3))) - phiH);
 					///!scaled phase field
 					
-					//LBMReal rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH)+(one-phi[DIR_000])* (*pressure)(x1, x2, x3)*three; //compressible
-					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[DIR_000] + (one - phi[DIR_000]) * (*pressure)(x1, x2, x3) * three; //compressible
+					//LBMReal rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(one-phi[d000])* (*pressure)(x1, x2, x3)*three; //compressible
+					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[d000] + (one - phi[d000]) * (*pressure)(x1, x2, x3) * three; //compressible
 
 					real m0, m1, m2;
 					real rhoRef= c1o1;
@@ -511,14 +511,14 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 												{{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
 												{ {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} };
 					//LBMReal LaplaceP = 0.0;
-					//LaplaceP += WEIGTH[DIR_PPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
+					//LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
 					//	+ ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere))));
-					//LaplaceP += WEIGTH[DIR_0PP] * (
+					//LaplaceP += WEIGTH[d0PP] * (
 					//	((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere)))
 					//	+ ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere)))
 					//	+ ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere)))
 					//	);
-					//LaplaceP += WEIGTH[DIR_00P] * (
+					//LaplaceP += WEIGTH[d00P] * (
 					//	(((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere))
 					//	+ (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere))
 					//	+ (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere))
@@ -633,16 +633,16 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					//}
 
 					//Viscosity increase by phase field residuum
-					//LBMReal errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom);
+					//LBMReal errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
 					//LBMReal limVis = 0.01;// 0.0000001 * 10;//0.01;
 					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
 					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
 					//errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
 					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
 
-					//3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-					//+WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-					//+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+					//3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+					//+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+					//+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 
 					muRho = rho;
 
@@ -656,34 +656,34 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					//LBMReal pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
 					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
 					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) );
+					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) );
 					////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) {
-					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0P0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0M0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL)));
 					//	mfbbb -= pBefore * 8.0 / 9.0;
 					//}
 
@@ -808,12 +808,12 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) * c2
 					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)))) * c1o3 ;
 
-					//(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[DIR_000] : (*phaseFieldOld)(x1, x2, x3);
-					//LBMReal dtPhi = phi[DIR_000] - (*phaseFieldOld)(x1, x2, x3);
+					//(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[d000] : (*phaseFieldOld)(x1, x2, x3);
+					//LBMReal dtPhi = phi[d000] - (*phaseFieldOld)(x1, x2, x3);
 					//LBMReal deltaP = -pStar * (c1 - rho / (rho + c1o2 * rhoToPhi * dtPhi));// -pStar * pStar * pStar * 1.0e-4 * rho * rho * rho;
 					//LBMReal deltaP = pStar * (c1 - mfhbbb*rho) * c1o2;//Explicit
 					//LBMReal deltaP = pStar * (c1 - mfhbbb * rho) / (c1 + mfhbbb * rho);//Semi-Implicit
-					//(*phaseFieldOld)(x1, x2, x3) = phi[DIR_000];
+					//(*phaseFieldOld)(x1, x2, x3) = phi[d000];
 
 					//mfabb += c2o9 *deltaP;
 					//mfbab += c2o9 *deltaP;
@@ -849,32 +849,32 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 
 
 
-					//mfabb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_P00])*rhoToPhi/rho;
-					//mfbab -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_0P0])*rhoToPhi/rho;
-					//mfbba -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_00P])*rhoToPhi/rho;
-					//mfaab -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_PP0])*rhoToPhi/rho;
-					//mfcab -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_MP0])*rhoToPhi/rho;
-					//mfaba -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_P0P])*rhoToPhi/rho;
-					//mfcba -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_M0P])*rhoToPhi/rho;
-					//mfbaa -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0PP])*rhoToPhi/rho;
-					//mfbca -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0MP])*rhoToPhi/rho;
-					//mfaaa -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PPP])*rhoToPhi/rho;
-					//mfcaa -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MPP])*rhoToPhi/rho;
-					//mfaca -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PMP])*rhoToPhi/rho;
-					//mfcca -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MMP])*rhoToPhi/rho;
-					//mfcbb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_M00])*rhoToPhi/rho;
-					//mfbcb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_0M0])*rhoToPhi/rho;
-					//mfbbc -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_00M])*rhoToPhi/rho;
-					//mfccb -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_MM0])*rhoToPhi/rho;
-					//mfacb -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_PM0])*rhoToPhi/rho;
-					//mfcbc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_M0M])*rhoToPhi/rho;
-					//mfabc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_P0M])*rhoToPhi/rho;
-					//mfbcc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0MM])*rhoToPhi/rho;
-					//mfbac -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0PM])*rhoToPhi/rho;
-					//mfccc -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MMM])*rhoToPhi/rho;
-					//mfacc -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PMM])*rhoToPhi/rho;
-					//mfcac -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MPM])*rhoToPhi/rho;
-					//mfaac -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PPM])*rhoToPhi/rho;
+					//mfabb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dP00])*rhoToPhi/rho;
+					//mfbab -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0P0])*rhoToPhi/rho;
+					//mfbba -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00P])*rhoToPhi/rho;
+					//mfaab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPP0])*rhoToPhi/rho;
+					//mfcab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMP0])*rhoToPhi/rho;
+					//mfaba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0P])*rhoToPhi/rho;
+					//mfcba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0P])*rhoToPhi/rho;
+					//mfbaa -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PP])*rhoToPhi/rho;
+					//mfbca -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MP])*rhoToPhi/rho;
+					//mfaaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPP])*rhoToPhi/rho;
+					//mfcaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPP])*rhoToPhi/rho;
+					//mfaca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMP])*rhoToPhi/rho;
+					//mfcca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMP])*rhoToPhi/rho;
+					//mfcbb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dM00])*rhoToPhi/rho;
+					//mfbcb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0M0])*rhoToPhi/rho;
+					//mfbbc -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00M])*rhoToPhi/rho;
+					//mfccb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMM0])*rhoToPhi/rho;
+					//mfacb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPM0])*rhoToPhi/rho;
+					//mfcbc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0M])*rhoToPhi/rho;
+					//mfabc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0M])*rhoToPhi/rho;
+					//mfbcc -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MM])*rhoToPhi/rho;
+					//mfbac -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PM])*rhoToPhi/rho;
+					//mfccc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMM])*rhoToPhi/rho;
+					//mfacc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMM])*rhoToPhi/rho;
+					//mfcac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPM])*rhoToPhi/rho;
+					//mfaac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPM])*rhoToPhi/rho;
 
 
 					//forcingX1 =/* muForcingX1.Eval() / rho*/ - pStar * dX1_phi * rhoToPhi / rho;
@@ -949,9 +949,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2;
 					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2;
 					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2;
-					 //LBMReal FdX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					 //LBMReal FdX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					 //LBMReal FdX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					 //LBMReal FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					 //LBMReal FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					 //LBMReal FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
 
 
 					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ;
@@ -961,7 +961,7 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					//forcingX1 = (pStar * dRhoInvX* rho *c3) ;
 					//forcingX2 = (pStar * dRhoInvY* rho *c3) ;
 					//forcingX3 = (pStar * dRhoInvZ* rho *c3) ;
-					//if (phi[DIR_000] > 0.1 && phi[DIR_000] < 0.9) std::cout << phi[DIR_000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
+					//if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
 					//LBMReal forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ;
 					//LBMReal forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ;
 					//LBMReal forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ;
@@ -970,22 +970,22 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					//forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT;
 					//forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT;
 
-					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
-					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
+					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
 
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX1_rhoInv * rho*(phi[DIR_000]));
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX2_rhoInv * rho*(phi[DIR_000]));
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX3_rhoInv * rho*(phi[DIR_000]));
-						 //if (phi[DIR_000] > 0.3 && phi[DIR_000] < 0.7)
+					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000]));
+					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000]));
+					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000]));
+						 //if (phi[d000] > 0.3 && phi[d000] < 0.7)
 						 //{
 							// int test = 1;
-							// std::cout << phi[DIR_000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
+							// std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
 						 //}
 
 
 
-					 //LBMReal scaleGrad = c2 * phi[DIR_000] * (1.0 - phi[DIR_000]) / ((phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])) * (phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])));
+					 //LBMReal scaleGrad = c2 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])));
 					 //dX1_phi *= scaleGrad;
 					 //dX2_phi *= scaleGrad;
 					 //dX3_phi *= scaleGrad;
@@ -1002,9 +1002,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 					forcingX3 += mu * dX3_phi/rho;
 
 					//LBMReal forcingBIAS = 0.5;
-					forcingX1 += muForcingX1.Eval() / rho;//*phi[DIR_000];
-					forcingX2 += muForcingX2.Eval() / rho;// * phi[DIR_000];
-					forcingX3 += muForcingX3.Eval() / rho;// * phi[DIR_000];
+					forcingX1 += muForcingX1.Eval() / rho;//*phi[d000];
+					forcingX2 += muForcingX2.Eval() / rho;// * phi[d000];
+					forcingX3 += muForcingX3.Eval() / rho;// * phi[d000];
 
 				//	//19.08.2022
 					//vvx += vvxh / rho * c1o2;
@@ -1235,7 +1235,7 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 
 															 ////////////////////////////////////////////////////////////////////////////////////
 					real wadjust;
-					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[DIR_000] * (c1o1 - phi[DIR_000])); //real qudricLimit = 0.01;
+					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01;
 					////////////////////////////////////////////////////////////////////////////////////
 					//Hin
 					////////////////////////////////////////////////////////////////////////////////////
@@ -1726,9 +1726,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 
 					//////////////////////////////////////////////////////////////////////////////////////
 					//grad Rho
-					//LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[DIR_000] * three * gradPx;
-					//LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[DIR_000] * three * gradPy;
-					//LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[DIR_000] * three * gradPz;
+					//LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[d000] * three * gradPx;
+					//LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[d000] * three * gradPy;
+					//LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[d000] * three * gradPz;
 
 					//LBMReal dX2_rho = (rhoToPhi ) * dX2_phi ;
 					//LBMReal dX1_rho = (rhoToPhi ) * dX1_phi ;
@@ -2356,32 +2356,32 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
 
 
 					
-					//mfabb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_M00]) * rhoToPhi / rho;
-					//mfbab += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_0M0]) * rhoToPhi / rho;
-					//mfbba += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_00M]) * rhoToPhi / rho;
-					//mfaab += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_MM0]) * rhoToPhi / rho;
-					//mfcab += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_PM0]) * rhoToPhi / rho;
-					//mfaba += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_M0M]) * rhoToPhi / rho;
-					//mfcba += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_P0M]) * rhoToPhi / rho;
-					//mfbaa += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0MM]) * rhoToPhi / rho;
-					//mfbca += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0PM]) * rhoToPhi / rho;
-					//mfaaa += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MMM]) * rhoToPhi / rho;
-					//mfcaa += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PMM]) * rhoToPhi / rho;
-					//mfaca += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MPM]) * rhoToPhi / rho;
-					//mfcca += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PPM]) * rhoToPhi / rho;
-					//mfcbb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_P00]) * rhoToPhi / rho;
-					//mfbcb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_0P0]) * rhoToPhi / rho;
-					//mfbbc += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_00P]) * rhoToPhi / rho;
-					//mfccb += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_PP0]) * rhoToPhi / rho;
-					//mfacb += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_MP0]) * rhoToPhi / rho;
-					//mfcbc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_P0P]) * rhoToPhi / rho;
-					//mfabc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_M0P]) * rhoToPhi / rho;
-					//mfbcc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0PP]) * rhoToPhi / rho;
-					//mfbac += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0MP]) * rhoToPhi / rho;
-					//mfccc += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PPP]) * rhoToPhi / rho;
-					//mfacc += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MPP]) * rhoToPhi / rho;
-					//mfcac += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PMP]) * rhoToPhi / rho;
-					//mfaac += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MMP]) * rhoToPhi / rho;
+					//mfabb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dM00]) * rhoToPhi / rho;
+					//mfbab += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0M0]) * rhoToPhi / rho;
+					//mfbba += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00M]) * rhoToPhi / rho;
+					//mfaab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMM0]) * rhoToPhi / rho;
+					//mfcab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPM0]) * rhoToPhi / rho;
+					//mfaba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0M]) * rhoToPhi / rho;
+					//mfcba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0M]) * rhoToPhi / rho;
+					//mfbaa += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MM]) * rhoToPhi / rho;
+					//mfbca += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PM]) * rhoToPhi / rho;
+					//mfaaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMM]) * rhoToPhi / rho;
+					//mfcaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMM]) * rhoToPhi / rho;
+					//mfaca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPM]) * rhoToPhi / rho;
+					//mfcca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPM]) * rhoToPhi / rho;
+					//mfcbb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dP00]) * rhoToPhi / rho;
+					//mfbcb += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0P0]) * rhoToPhi / rho;
+					//mfbbc += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00P]) * rhoToPhi / rho;
+					//mfccb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPP0]) * rhoToPhi / rho;
+					//mfacb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMP0]) * rhoToPhi / rho;
+					//mfcbc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0P]) * rhoToPhi / rho;
+					//mfabc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0P]) * rhoToPhi / rho;
+					//mfbcc += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PP]) * rhoToPhi / rho;
+					//mfbac += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MP]) * rhoToPhi / rho;
+					//mfccc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPP]) * rhoToPhi / rho;
+					//mfacc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPP]) * rhoToPhi / rho;
+					//mfcac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMP]) * rhoToPhi / rho;
+					//mfaac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMP]) * rhoToPhi / rho;
 					
 					///////////////
 					//mfabb += (pBefore-pStar) * c2o9  ;
@@ -2808,9 +2808,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi()
 	using namespace vf::lbm::dir;
 	using namespace D3Q27System;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi()
@@ -2818,9 +2818,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi()
@@ -2828,9 +2828,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV)
@@ -2838,9 +2838,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(real r
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV)
@@ -2848,9 +2848,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(real r
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
@@ -2858,9 +2858,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(real r
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
-		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) +
-		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M])));
+	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
+		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
+		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2()
@@ -2868,9 +2868,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2()
@@ -2878,9 +2878,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2()
@@ -2888,9 +2888,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 }
 
 real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi()
@@ -2899,17 +2899,17 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
 	real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
 
 
@@ -2940,35 +2940,35 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::computePhasefield()
 					int x2p = x2 + 1;
 					int x3p = x3 + 1;
 
-					h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
 				}
 			}
 		}
@@ -2984,9 +2984,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors(CbArra
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi[DIR_000] = (*ph)(x1, x2, x3);
-    if (phi[DIR_000] < 0) {
-        phi[DIR_000] = c0o1;
+	phi[d000] = (*ph)(x1, x2, x3);
+    if (phi[d000] < 0) {
+        phi[d000] = c0o1;
     }
 
 
@@ -3009,7 +3009,7 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors2(CbArr
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
index 8abd71133dd7088199066b1de0975b8efb16ebc8..30e4fa4f8e634dfc629a37ac3e405f245168beff 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
@@ -356,13 +356,13 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 
 
 
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-                        real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
                             			   ////Incompressible Kernal
 
@@ -456,9 +456,9 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 				  // vvxF = vvxF;
 			   //}
 			   real weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001);
-			   real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX1;
-			   real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX2;
-			   real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX3;
+			   real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1;
+			   real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2;
+			   real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3;
 
 			   //dX1_phiF *= 1.2;
 			   //dX2_phiF *= 1.2;
@@ -508,15 +508,15 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 
 			   }
 
-			   real gamma = WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-			   real fac1 = (gamma - WEIGTH[DIR_000]) * c1o3 * rhoToPhi;
-			   forcingTerm[DIR_000] =	 (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
+			   real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+			   real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi;
+			   forcingTerm[d000] =	 (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
 				   (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
 				   (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
 
 			   ////////
 			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
+			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
 			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
 			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
 			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
@@ -579,7 +579,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
 				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
 
-				  // forcingTerm[DIR_P00]	 *=scaleDiv;
+				  // forcingTerm[dP00]	 *=scaleDiv;
 				  // forcingTerm[N]	 *=scaleDiv;
 				  // forcingTerm[T]	 *=scaleDiv;
 				  // forcingTerm[NE]	 *=scaleDiv;
@@ -610,33 +610,33 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 			   ////////
 
 
-			   mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb += 3.0 * (0.5 * forcingTerm[DIR_0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc += 3.0 * (0.5 * forcingTerm[DIR_00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb += 3.0 * (0.5 * forcingTerm[DIR_PP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb += 3.0 * (0.5 * forcingTerm[DIR_MP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc += 3.0 * (0.5 * forcingTerm[DIR_P0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc += 3.0 * (0.5 * forcingTerm[DIR_M0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc += 3.0 * (0.5 * forcingTerm[DIR_0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac += 3.0 * (0.5 * forcingTerm[DIR_0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc += 3.0 * (0.5 * forcingTerm[DIR_PPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc += 3.0 * (0.5 * forcingTerm[DIR_MPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac += 3.0 * (0.5 * forcingTerm[DIR_PMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac += 3.0 * (0.5 * forcingTerm[DIR_MMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb += 3.0 * (0.5 * forcingTerm[DIR_M00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab += 3.0 * (0.5 * forcingTerm[DIR_0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba += 3.0 * (0.5 * forcingTerm[DIR_00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab += 3.0 * (0.5 * forcingTerm[DIR_MM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab += 3.0 * (0.5 * forcingTerm[DIR_PM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba += 3.0 * (0.5 * forcingTerm[DIR_M0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba += 3.0 * (0.5 * forcingTerm[DIR_P0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa += 3.0 * (0.5 * forcingTerm[DIR_0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca += 3.0 * (0.5 * forcingTerm[DIR_0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa += 3.0 * (0.5 * forcingTerm[DIR_MMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa += 3.0 * (0.5 * forcingTerm[DIR_PMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca += 3.0 * (0.5 * forcingTerm[DIR_MPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca += 3.0 * (0.5 * forcingTerm[DIR_PPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb += 3.0 * (0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
+			   mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+			   mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+			   mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+			   mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+			   mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+			   mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+			   mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+			   mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+			   mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+			   mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+			   mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+			   mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+			   mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+			   mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+			   mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+			   mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+			   mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+			   mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+			   mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+			   mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+			   mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+			   mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+			   mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+			   mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+			   mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+			   mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
 
 			   //--------------------------------------------------------
 
@@ -950,7 +950,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 			   real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
 			//    LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
 			   real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
 			   real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
 
 
@@ -1354,33 +1354,33 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 
 			   /////classical source term 8.4.2021
 
-			   mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb += 3.0 * (0.5 * forcingTerm[DIR_0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc += 3.0 * (0.5 * forcingTerm[DIR_00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb += 3.0 * (0.5 * forcingTerm[DIR_PP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb += 3.0 * (0.5 * forcingTerm[DIR_MP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc += 3.0 * (0.5 * forcingTerm[DIR_P0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc += 3.0 * (0.5 * forcingTerm[DIR_M0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc += 3.0 * (0.5 * forcingTerm[DIR_0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac += 3.0 * (0.5 * forcingTerm[DIR_0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc += 3.0 * (0.5 * forcingTerm[DIR_PPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc += 3.0 * (0.5 * forcingTerm[DIR_MPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac += 3.0 * (0.5 * forcingTerm[DIR_PMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac += 3.0 * (0.5 * forcingTerm[DIR_MMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb += 3.0 * (0.5 * forcingTerm[DIR_M00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab += 3.0 * (0.5 * forcingTerm[DIR_0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba += 3.0 * (0.5 * forcingTerm[DIR_00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab += 3.0 * (0.5 * forcingTerm[DIR_MM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab += 3.0 * (0.5 * forcingTerm[DIR_PM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba += 3.0 * (0.5 * forcingTerm[DIR_M0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba += 3.0 * (0.5 * forcingTerm[DIR_P0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa += 3.0 * (0.5 * forcingTerm[DIR_0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca += 3.0 * (0.5 * forcingTerm[DIR_0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa += 3.0 * (0.5 * forcingTerm[DIR_MMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa += 3.0 * (0.5 * forcingTerm[DIR_PMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca += 3.0 * (0.5 * forcingTerm[DIR_MPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca += 3.0 * (0.5 * forcingTerm[DIR_PPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb += 3.0 * (0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
+			   mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+			   mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+			   mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+			   mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+			   mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+			   mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+			   mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+			   mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+			   mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+			   mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+			   mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+			   mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+			   mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+			   mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+			   mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+			   mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+			   mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+			   mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+			   mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+			   mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+			   mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+			   mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+			   mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+			   mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+			   mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+			   mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
 
 
 
@@ -1497,7 +1497,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 //
 //                        //--------------------------------------------------------
 //
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 //                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 //                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 //                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -2205,7 +2205,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 //                        }
 //#endif
 //
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00];
+//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
 //                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
 //                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
 //                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
@@ -2432,11 +2432,11 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 			   
 
                cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
                cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
                cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 
 			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
 			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
@@ -2745,11 +2745,11 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 
    // collision of 1st order moments
    cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
    cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
    cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
 
    //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
    //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
@@ -2902,7 +2902,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 
                         /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
 
-                        //h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                        //h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
                         //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
                         //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
                         //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
@@ -2996,9 +2996,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX1[k] * phi[k];
@@ -3011,9 +3011,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX2[k] * phi[k];
@@ -3026,9 +3026,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX3[k] * phi[k];
@@ -3041,9 +3041,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX1[k] * phi2[k];
@@ -3056,9 +3056,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX2[k] * phi2[k];
@@ -3071,9 +3071,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX3[k] * phi2[k];
@@ -3091,17 +3091,17 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
     real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
@@ -3133,35 +3133,35 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::computePhasefield()
                     int x2p = x2 + 1;
                     int x3p = x3 + 1;
 
-                    h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+                    h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+                    h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+                    h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+                    h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
                 }
             }
         }
@@ -3176,7 +3176,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors(CbArray3D<real, In
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi[DIR_000] = (*ph)(x1, x2, x3);
+    phi[d000] = (*ph)(x1, x2, x3);
 
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
@@ -3197,7 +3197,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors2(CbArray3D<real, I
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp
index 8a6c2bde6d5031a1b379bdd391aaa1051ca6217f..df28e16d1a717418aa0474ad4e74c7e85878bdf6 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp
@@ -578,13 +578,13 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 
 
 
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-                        real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
 						//! variable density -> TRANSFER!
 						//LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3));
@@ -652,7 +652,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 				  // + WEIGTH[NE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3)))
 					 //  + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1))))
-				  // + WEIGTH[DIR_P00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)));
+				  // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)));
 
 			   //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
@@ -660,7 +660,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 				  // + WEIGTH[NE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3)))
 					 //  + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1))))
-				  // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3)));
+				  // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3)));
 
 			   //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
@@ -668,7 +668,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 				  // + WEIGTH[NE] * (
 				  // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1)))
 					 //  + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1))))
-				  // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1)));
+				  // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1)));
 			  
 			   
 			   real gradPx = 0.0;
@@ -723,7 +723,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 			   }
 
 			   //Viscosity increase by pressure gradient
-			   real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom);
+			   real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
 			   //LBMReal limVis = 0.0000001*10;//0.01;
 			  // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
 			  // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
@@ -846,7 +846,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 
 			   ////////
 			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
+			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
 			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
 			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
 			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
@@ -909,7 +909,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
 				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
 
-				  // forcingTerm[DIR_P00]	 *=scaleDiv;
+				  // forcingTerm[dP00]	 *=scaleDiv;
 				  // forcingTerm[N]	 *=scaleDiv;
 				  // forcingTerm[T]	 *=scaleDiv;
 				  // forcingTerm[NE]	 *=scaleDiv;
@@ -940,7 +940,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 			   ////////
 
 
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -1283,7 +1283,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 			   real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
 			//    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
 			   real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
 			   real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
 
 
@@ -1708,7 +1708,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 
 			   /////classical source term 8.4.2021
 
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -1856,7 +1856,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 //
 //                        //--------------------------------------------------------
 //
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 //                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 //                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 //                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -2564,7 +2564,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 //                        }
 //#endif
 //
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00];
+//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
 //                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
 //                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
 //                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
@@ -2791,11 +2791,11 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 			   
 
                cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
                cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
                cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 
 			   //cx = cx * (c1 - omegaD) + omegaD * vvx * concentration +
 				  // normX1 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST])*(phi[REST]+phi2[REST]) * c1o3 * oneOverInterfaceScale;
@@ -3111,11 +3111,11 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 
    // collision of 1st order moments
    cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
    cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
    cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
 
    //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
    //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
@@ -3268,7 +3268,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
 
                         /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
 
-                        //h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                        //h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
                         //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
                         //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
                         //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
@@ -3362,9 +3362,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX1[k] * phi[k];
@@ -3377,9 +3377,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX2[k] * phi[k];
@@ -3392,9 +3392,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX3[k] * phi[k];
@@ -3407,9 +3407,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX1[k] * phi2[k];
@@ -3422,9 +3422,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX2[k] * phi2[k];
@@ -3437,9 +3437,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX3[k] * phi2[k];
@@ -3457,17 +3457,17 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
     real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
@@ -3499,35 +3499,35 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::computePhasefield()
                     int x2p = x2 + 1;
                     int x3p = x3 + 1;
 
-                    h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+                    h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+                    h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+                    h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+                    h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
                 }
             }
         }
@@ -3542,7 +3542,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors(CbArray3D<re
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi[DIR_000] = (*ph)(x1, x2, x3);
+    phi[d000] = (*ph)(x1, x2, x3);
 
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
@@ -3563,7 +3563,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors2(CbArray3D<r
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp
index ef0d033bc0c255d02e51a08fa1a0a85d1b20f0b4..d15714f6f8da63e020a7ee40ea953779e25e46c6 100644
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp
+++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp
@@ -305,7 +305,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 							+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
 							+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
 
-						real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+						real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 						(*pressure)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho;
 
 						////!!!!!! relplace by pointer swap!
@@ -555,13 +555,13 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 
 
 
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
 
 
-                        real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
                             			   ////Incompressible Kernal
 
@@ -625,7 +625,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 				  // + WEIGTH[NE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3)))
 					 //  + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1))))
-				  // + WEIGTH[DIR_P00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)));
+				  // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)));
 
 			   //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
@@ -633,7 +633,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 				  // + WEIGTH[NE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3)))
 					 //  + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1))))
-				  // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3)));
+				  // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3)));
 
 			   //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * (
 				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
@@ -641,7 +641,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 				  // + WEIGTH[NE] * (
 				  // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1)))
 					 //  + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1))))
-				  // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1)));
+				  // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1)));
 			  
 			   
 			   real gradPx = 0.0;
@@ -803,7 +803,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 
 			   ////////
 			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
+			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
 			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
 			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
 			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
@@ -866,7 +866,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
 				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
 
-				  // forcingTerm[DIR_P00]	 *=scaleDiv;
+				  // forcingTerm[dP00]	 *=scaleDiv;
 				  // forcingTerm[N]	 *=scaleDiv;
 				  // forcingTerm[T]	 *=scaleDiv;
 				  // forcingTerm[NE]	 *=scaleDiv;
@@ -897,7 +897,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 			   ////////
 
 
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -1240,7 +1240,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 			   real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
 			//    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
 			   real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
 			   real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
 
 
@@ -1652,7 +1652,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 
 			   /////classical source term 8.4.2021
 
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -1794,7 +1794,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 //
 //                        //--------------------------------------------------------
 //
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
 //                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
 //                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
 //                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
@@ -2502,7 +2502,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 //                        }
 //#endif
 //
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00];
+//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
 //                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
 //                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
 //                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
@@ -2729,11 +2729,11 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 			   
 
                cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
                cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
                cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale;
+                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
 
 			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
 			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
@@ -3042,11 +3042,11 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 
    // collision of 1st order moments
    cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
    cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
    cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale;
+	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
 
    //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
    //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
@@ -3199,7 +3199,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
 
                         /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
 
-                        //h[DIR_P00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                        //h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
                         //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
                         //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
                         //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
@@ -3293,9 +3293,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
+		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX1[k] * phi[k];
@@ -3308,9 +3308,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
+		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
+		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX2[k] * phi[k];
@@ -3323,9 +3323,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi()
     using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
+		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
+		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
     //LBMReal sum = 0.0;
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * DX3[k] * phi[k];
@@ -3338,9 +3338,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
+		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX1[k] * phi2[k];
@@ -3353,9 +3353,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
+		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
+		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX2[k] * phi2[k];
@@ -3368,9 +3368,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi2()
 	using namespace D3Q27System;
 	using namespace vf::lbm::dir;
 
-	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
-		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
-		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
+		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
+		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
 	//LBMReal sum = 0.0;
 	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
 	//    sum += WEIGTH[k] * DX3[k] * phi2[k];
@@ -3388,17 +3388,17 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::nabla2_phi()
 	using namespace vf::lbm::dir;
 
     real sum = 0.0;
-	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
-		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
-	sum += WEIGTH[DIR_0PP] * (
-			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
-		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
-		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
+		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
+	sum += WEIGTH[d0PP] * (
+			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
+		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
+		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
 		);
-	sum += WEIGTH[DIR_00P] * (
-			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
-		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
-		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+	sum += WEIGTH[d00P] * (
+			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
+		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
+		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
 		);
     //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
     //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
@@ -3430,35 +3430,35 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::computePhasefield()
                     int x2p = x2 + 1;
                     int x3p = x3 + 1;
 
-                    h[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+                    h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+                    h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+                    h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+                    h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
                 }
             }
         }
@@ -3473,7 +3473,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors(CbArray3D<
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-    phi[DIR_000] = (*ph)(x1, x2, x3);
+    phi[d000] = (*ph)(x1, x2, x3);
 
 
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
@@ -3494,7 +3494,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors2(CbArray3D
 
 	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
-	phi2[DIR_000] = (*ph)(x1, x2, x3);
+	phi2[d000] = (*ph)(x1, x2, x3);
 
 
 	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp
index 820c84855c66c695423beec09d1ccfa3953dc4e9..2bf1ac28d3dc1dad3520d023e7bd96f6b6a2372b 100644
--- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp
+++ b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp
@@ -229,19 +229,19 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
         for (int ix2 = minX2; ix2 < maxX2; ix2++) {
             for (int ix1 = minX1; ix1 < maxX1; ix1++) {
                 if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
-                    distributionsH->getDistribution(f, ix1, ix2, ix3);
+                    distributionsH->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     (*phaseField)(ix1, ix2, ix3) =
-                        ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-                        (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) +
-                        ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-                            ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000];
+                        ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
+                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
                     if (distributionsH2) {
-                    distributionsH2->getDistribution(f, ix1, ix2, ix3);
+                    distributionsH2->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     (*phaseField2)(ix1, ix2, ix3) =
-                        ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-                        (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) +
-                        ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-                            ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000];
+                        ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
+                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
                 }
                     else { (*phaseField2)(ix1, ix2, ix3) = 999.0; }
                     
@@ -279,8 +279,8 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
                     nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]),
                                                   float(worldCoordinates[2])));
 
-                    phi[DIR_000] = (*phaseField)(ix1, ix2, ix3);
-                    phi2[DIR_000] = (*phaseField2)(ix1, ix2, ix3);
+                    phi[d000] = (*phaseField)(ix1, ix2, ix3);
+                    phi2[d000] = (*phaseField2)(ix1, ix2, ix3);
 
                     if ((ix1 == 0) || (ix2 == 0) || (ix3 == 0)) {
                         dX1_phi = 0.0;
@@ -291,38 +291,38 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
                         // vx2 = 0.0;
                         // vx3 = 0.0;
                     } else {
-                        phi[DIR_P00] = (*phaseField)(ix1 + DX1[DIR_P00], ix2 + DX2[DIR_P00], ix3 + DX3[DIR_P00]);
-                        phi[DIR_0P0] = (*phaseField)(ix1 + DX1[DIR_0P0], ix2 + DX2[DIR_0P0], ix3 + DX3[DIR_0P0]);
-                        phi[DIR_00P] = (*phaseField)(ix1 + DX1[DIR_00P], ix2 + DX2[DIR_00P], ix3 + DX3[DIR_00P]);
-                        phi[DIR_M00] = (*phaseField)(ix1 + DX1[DIR_M00], ix2 + DX2[DIR_M00], ix3 + DX3[DIR_M00]);
-                        phi[DIR_0M0] = (*phaseField)(ix1 + DX1[DIR_0M0], ix2 + DX2[DIR_0M0], ix3 + DX3[DIR_0M0]);
-                        phi[DIR_00M] = (*phaseField)(ix1 + DX1[DIR_00M], ix2 + DX2[DIR_00M], ix3 + DX3[DIR_00M]);
-                        phi[DIR_PP0] = (*phaseField)(ix1 + DX1[DIR_PP0], ix2 + DX2[DIR_PP0], ix3 + DX3[DIR_PP0]);
-                        phi[DIR_MP0] = (*phaseField)(ix1 + DX1[DIR_MP0], ix2 + DX2[DIR_MP0], ix3 + DX3[DIR_MP0]);
-                        phi[DIR_P0P] = (*phaseField)(ix1 + DX1[DIR_P0P], ix2 + DX2[DIR_P0P], ix3 + DX3[DIR_P0P]);
-                        phi[DIR_M0P] = (*phaseField)(ix1 + DX1[DIR_M0P], ix2 + DX2[DIR_M0P], ix3 + DX3[DIR_M0P]);
-                        phi[DIR_0PP] = (*phaseField)(ix1 + DX1[DIR_0PP], ix2 + DX2[DIR_0PP], ix3 + DX3[DIR_0PP]);
-                        phi[DIR_0MP] = (*phaseField)(ix1 + DX1[DIR_0MP], ix2 + DX2[DIR_0MP], ix3 + DX3[DIR_0MP]);
-                        phi[DIR_MM0] = (*phaseField)(ix1 + DX1[DIR_MM0], ix2 + DX2[DIR_MM0], ix3 + DX3[DIR_MM0]);
-                        phi[DIR_PM0] = (*phaseField)(ix1 + DX1[DIR_PM0], ix2 + DX2[DIR_PM0], ix3 + DX3[DIR_PM0]);
-                        phi[DIR_M0M] = (*phaseField)(ix1 + DX1[DIR_M0M], ix2 + DX2[DIR_M0M], ix3 + DX3[DIR_M0M]);
-                        phi[DIR_P0M] = (*phaseField)(ix1 + DX1[DIR_P0M], ix2 + DX2[DIR_P0M], ix3 + DX3[DIR_P0M]);
-                        phi[DIR_0MM] = (*phaseField)(ix1 + DX1[DIR_0MM], ix2 + DX2[DIR_0MM], ix3 + DX3[DIR_0MM]);
-                        phi[DIR_0PM] = (*phaseField)(ix1 + DX1[DIR_0PM], ix2 + DX2[DIR_0PM], ix3 + DX3[DIR_0PM]);
-                        phi[DIR_MMM] = (*phaseField)(ix1 + DX1[DIR_MMM], ix2 + DX2[DIR_MMM], ix3 + DX3[DIR_MMM]);
-                        phi[DIR_PMM] = (*phaseField)(ix1 + DX1[DIR_PMM], ix2 + DX2[DIR_PMM], ix3 + DX3[DIR_PMM]);
-                        phi[DIR_MPM] = (*phaseField)(ix1 + DX1[DIR_MPM], ix2 + DX2[DIR_MPM], ix3 + DX3[DIR_MPM]);
-                        phi[DIR_PPM] = (*phaseField)(ix1 + DX1[DIR_PPM], ix2 + DX2[DIR_PPM], ix3 + DX3[DIR_PPM]);
-                        phi[DIR_PPP] = (*phaseField)(ix1 + DX1[DIR_PPP], ix2 + DX2[DIR_PPP], ix3 + DX3[DIR_PPP]);
-                        phi[DIR_MPP] = (*phaseField)(ix1 + DX1[DIR_MPP], ix2 + DX2[DIR_MPP], ix3 + DX3[DIR_MPP]);
-                        phi[DIR_PMP] = (*phaseField)(ix1 + DX1[DIR_PMP], ix2 + DX2[DIR_PMP], ix3 + DX3[DIR_PMP]);
-                        phi[DIR_MMP] = (*phaseField)(ix1 + DX1[DIR_MMP], ix2 + DX2[DIR_MMP], ix3 + DX3[DIR_MMP]);
+                        phi[dP00] = (*phaseField)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]);
+                        phi[d0P0] = (*phaseField)(ix1 + DX1[d0P0], ix2 + DX2[d0P0], ix3 + DX3[d0P0]);
+                        phi[d00P] = (*phaseField)(ix1 + DX1[d00P], ix2 + DX2[d00P], ix3 + DX3[d00P]);
+                        phi[dM00] = (*phaseField)(ix1 + DX1[dM00], ix2 + DX2[dM00], ix3 + DX3[dM00]);
+                        phi[d0M0] = (*phaseField)(ix1 + DX1[d0M0], ix2 + DX2[d0M0], ix3 + DX3[d0M0]);
+                        phi[d00M] = (*phaseField)(ix1 + DX1[d00M], ix2 + DX2[d00M], ix3 + DX3[d00M]);
+                        phi[dPP0] = (*phaseField)(ix1 + DX1[dPP0], ix2 + DX2[dPP0], ix3 + DX3[dPP0]);
+                        phi[dMP0] = (*phaseField)(ix1 + DX1[dMP0], ix2 + DX2[dMP0], ix3 + DX3[dMP0]);
+                        phi[dP0P] = (*phaseField)(ix1 + DX1[dP0P], ix2 + DX2[dP0P], ix3 + DX3[dP0P]);
+                        phi[dM0P] = (*phaseField)(ix1 + DX1[dM0P], ix2 + DX2[dM0P], ix3 + DX3[dM0P]);
+                        phi[d0PP] = (*phaseField)(ix1 + DX1[d0PP], ix2 + DX2[d0PP], ix3 + DX3[d0PP]);
+                        phi[d0MP] = (*phaseField)(ix1 + DX1[d0MP], ix2 + DX2[d0MP], ix3 + DX3[d0MP]);
+                        phi[dMM0] = (*phaseField)(ix1 + DX1[dMM0], ix2 + DX2[dMM0], ix3 + DX3[dMM0]);
+                        phi[dPM0] = (*phaseField)(ix1 + DX1[dPM0], ix2 + DX2[dPM0], ix3 + DX3[dPM0]);
+                        phi[dM0M] = (*phaseField)(ix1 + DX1[dM0M], ix2 + DX2[dM0M], ix3 + DX3[dM0M]);
+                        phi[dP0M] = (*phaseField)(ix1 + DX1[dP0M], ix2 + DX2[dP0M], ix3 + DX3[dP0M]);
+                        phi[d0MM] = (*phaseField)(ix1 + DX1[d0MM], ix2 + DX2[d0MM], ix3 + DX3[d0MM]);
+                        phi[d0PM] = (*phaseField)(ix1 + DX1[d0PM], ix2 + DX2[d0PM], ix3 + DX3[d0PM]);
+                        phi[dMMM] = (*phaseField)(ix1 + DX1[dMMM], ix2 + DX2[dMMM], ix3 + DX3[dMMM]);
+                        phi[dPMM] = (*phaseField)(ix1 + DX1[dPMM], ix2 + DX2[dPMM], ix3 + DX3[dPMM]);
+                        phi[dMPM] = (*phaseField)(ix1 + DX1[dMPM], ix2 + DX2[dMPM], ix3 + DX3[dMPM]);
+                        phi[dPPM] = (*phaseField)(ix1 + DX1[dPPM], ix2 + DX2[dPPM], ix3 + DX3[dPPM]);
+                        phi[dPPP] = (*phaseField)(ix1 + DX1[dPPP], ix2 + DX2[dPPP], ix3 + DX3[dPPP]);
+                        phi[dMPP] = (*phaseField)(ix1 + DX1[dMPP], ix2 + DX2[dMPP], ix3 + DX3[dMPP]);
+                        phi[dPMP] = (*phaseField)(ix1 + DX1[dPMP], ix2 + DX2[dPMP], ix3 + DX3[dPMP]);
+                        phi[dMMP] = (*phaseField)(ix1 + DX1[dMMP], ix2 + DX2[dMMP], ix3 + DX3[dMMP]);
                         dX1_phi  = 0.0 * gradX1_phi(phi);
                         dX2_phi  = 0.0 * gradX2_phi(phi);
                         dX3_phi  = 0.0 * gradX3_phi(phi);
-                        mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(phi);
+                        mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(phi);
 
-                        //phi2[DIR_P00] = (*phaseField2)(ix1 + DX1[DIR_P00], ix2 + DX2[DIR_P00], ix3 + DX3[DIR_P00]);
+                        //phi2[dP00] = (*phaseField2)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]);
                         //phi2[N] = (*phaseField2)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]);
                         //phi2[T] = (*phaseField2)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]);
                         //phi2[W] = (*phaseField2)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]);
@@ -355,7 +355,7 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
 
                     }
 
-                    distributionsF->getDistribution(f, ix1, ix2, ix3);
+                    distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     //real dU = (*divU)(ix1, ix2, ix3);
 
                     real rhoH = 1.0;
@@ -364,47 +364,47 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
                     real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
 
                     // rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio;
-                    rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH);
+                    rho = rhoH + rhoToPhi * (phi[d000] - phiH);
 
                     if (pressure) {
                         vx1 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                            (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) ;
+                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+                            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ;
 
                         vx2 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                            (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) ;
+                            ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+                            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ;
 
                         vx3 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-                            (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M]));
+                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+                            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M]));
 
                     }
                     else {
                         vx1 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                            (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) /
+                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+                            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) /
                                 (rho * c1o3) +
                             mu * dX1_phi / (2 * rho);
 
                         vx2 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                            (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) /
+                            ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+                            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) /
                                 (rho * c1o3) +
                             mu * dX2_phi / (2 * rho);
 
                         vx3 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-                            (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])) /
+                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+                            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) /
                                 (rho * c1o3) +
                             mu * dX3_phi / (2 * rho);
 
                     }
 
-                    p1 = (((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-                          (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) +
-                           ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-                          ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000]) +
+                    p1 = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+                          (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
+                           ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+                          ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]) +
                          (vx1 * rhoToPhi * dX1_phi * c1o3 + vx2 * rhoToPhi * dX2_phi * c1o3 +
                           vx3 * rhoToPhi * dX3_phi * c1o3) /
                              2.0;
@@ -432,7 +432,7 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
                                            block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
                                            UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
 
-                    if (UbMath::isNaN(phi[DIR_000]) || UbMath::isInfinity(phi[DIR_000]))
+                    if (UbMath::isNaN(phi[d000]) || UbMath::isInfinity(phi[d000]))
                         UB_THROW(UbException(
                             UB_EXARGS, "phi is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
                                            block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
@@ -442,12 +442,12 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
                         UB_THROW( UbException(UB_EXARGS,"p1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+
                         ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3)));
 
-                    data[index++].push_back(phi[DIR_000]);
+                    data[index++].push_back(phi[d000]);
                     data[index++].push_back(vx1);
                     data[index++].push_back(vx2);
                     data[index++].push_back(vx3);
                     data[index++].push_back(p1);
-                    data[index++].push_back(phi2[DIR_000]);
+                    data[index++].push_back(phi2[d000]);
                     if (pressure) data[index++].push_back((*pressure)(ix1, ix2, ix3));
                 }
             }
@@ -510,7 +510,7 @@ real WriteMultiphaseQuantitiesSimulationObserver::nabla2_phi(const real *const &
     using namespace D3Q27System;
     real sum = 0.0;
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (h[k] - h[DIR_000]);
+        sum += WEIGTH[k] * (h[k] - h[d000]);
     }
     return 6.0 * sum;
 }
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp
index 7a0ae87b6cb3674557af510089548d7352913cc6..9e2fd5433c3f30649abd46ef00ffa8a92d0b20ba 100644
--- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp
+++ b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp
@@ -218,12 +218,12 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl
         for (int ix2 = minX2; ix2 < maxX2; ix2++) {
             for (int ix1 = minX1; ix1 < maxX1; ix1++) {
                 if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
-                    distributionsH->getDistributionInv(f, ix1, ix2, ix3);
+                    distributionsH->getPostCollisionDistribution(f, ix1, ix2, ix3);
                     (*phaseField)(ix1, ix2, ix3) =
-                        ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-                        (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) +
-                        ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-                            ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000];
+                        ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
+                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
                 }
             }
         }
@@ -261,7 +261,7 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl
                     phi = (*phaseField)(ix1, ix2, ix3);
 
 
-                    distributionsF->getDistributionInv(f, ix1, ix2, ix3);
+                    distributionsF->getPostCollisionDistribution(f, ix1, ix2, ix3);
                     //real dU = (*divU)(ix1, ix2, ix3);
 
                     real rhoH = 1.0;
@@ -275,23 +275,23 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl
                     rho = (phi>c1o2) ? rhoH : rhoL; // rhoH + rhoToPhi * (phi - phiH);
 
                         vx1 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                            (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) ;
+                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+                            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ;
 
                         vx2 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                            (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) ;
+                            ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+                            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ;
 
                         vx3 =
-                            ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-                            (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M]));
+                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+                            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M]));
 
 
 
-                    pressure = (((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-                        (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) +
-                        ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-                            ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000])*c1o3*rho;
+                    pressure = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
+                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000])*c1o3*rho;
 
 					if (UbMath::isNaN(vx1) || UbMath::isInfinity(vx1))
                         UB_THROW(UbException(
@@ -338,7 +338,7 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl
                     data[index++].push_back(vx2);
                     data[index++].push_back(vx3);
                     //data[index++].push_back(p1);
-                    //data[index++].push_back(phi2[DIR_000]);
+                    //data[index++].push_back(phi2[d000]);
                     //data[index++].push_back(mp);
                     //data[index++].push_back(delmp);
                     data[index++].push_back(pressure);
@@ -410,7 +410,7 @@ real WriteSharpInterfaceQuantitiesSimulationObserver::nabla2_phi(const real *con
     using namespace vf::basics::constant;
     real sum = c0o1;
     for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (h[k] - h[DIR_000]);
+        sum += WEIGTH[k] * (h[k] - h[d000]);
     }
     return 6.0 * sum;
 }
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp
index ded01d95428ce53dc09f1371961d68ee1b005c00..54ee28571ebf76ca96d3d79cbb49417654517a8c 100644
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp
+++ b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp
@@ -222,106 +222,106 @@ void MultiphaseInitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPt
 
 						feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq));
 						//geq[dir] = p1*WEIGTH[dir] + gamma;
-						//geq[dir] = p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma*rho;
-						//geq[dir] = (p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma*rho)*UbMath::c1o3;
+						//geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho;
+						//geq[dir] = (p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho)*vf::basics::constant::c1o3;
 						geq[dir] = (gamma*rho)* vf::basics::constant::c1o3;
 					}
 
 
-					f[DIR_P00]    =  geq[DIR_P00]    ;
-					f[DIR_M00]    =  geq[DIR_M00]    ;
-					f[DIR_0P0]    =  geq[DIR_0P0]    ;
-					f[DIR_0M0]    =  geq[DIR_0M0]    ;
-					f[DIR_00P]    =  geq[DIR_00P]    ;
-					f[DIR_00M]    =  geq[DIR_00M]    ;
-					f[DIR_PP0]   =  geq[DIR_PP0]   ;
-					f[DIR_MM0]   =  geq[DIR_MM0]   ;
-					f[DIR_PM0]   =  geq[DIR_PM0]   ;
-					f[DIR_MP0]   =  geq[DIR_MP0]   ;
-					f[DIR_P0P]   =  geq[DIR_P0P]   ;
-					f[DIR_M0M]   =  geq[DIR_M0M]   ;
-					f[DIR_P0M]   =  geq[DIR_P0M]   ;
-					f[DIR_M0P]   =  geq[DIR_M0P]   ;
-					f[DIR_0PP]   =  geq[DIR_0PP]   ;
-					f[DIR_0MM]   =  geq[DIR_0MM]   ;
-					f[DIR_0PM]   =  geq[DIR_0PM]   ;
-					f[DIR_0MP]   =  geq[DIR_0MP]   ;
-					f[DIR_PPP]  =  geq[DIR_PPP]  ;
-					f[DIR_MPP]  =  geq[DIR_MPP]  ;
-					f[DIR_PMP]  =  geq[DIR_PMP]  ;
-					f[DIR_MMP]  =  geq[DIR_MMP]  ;
-					f[DIR_PPM]  =  geq[DIR_PPM]  ;
-					f[DIR_MPM]  =  geq[DIR_MPM]  ;
-					f[DIR_PMM]  =  geq[DIR_PMM]  ;
-					f[DIR_MMM]  =  geq[DIR_MMM]  ;
-					f[DIR_000] =  geq[DIR_000] ;
+					f[dP00]    =  geq[dP00]    ;
+					f[dM00]    =  geq[dM00]    ;
+					f[d0P0]    =  geq[d0P0]    ;
+					f[d0M0]    =  geq[d0M0]    ;
+					f[d00P]    =  geq[d00P]    ;
+					f[d00M]    =  geq[d00M]    ;
+					f[dPP0]   =  geq[dPP0]   ;
+					f[dMM0]   =  geq[dMM0]   ;
+					f[dPM0]   =  geq[dPM0]   ;
+					f[dMP0]   =  geq[dMP0]   ;
+					f[dP0P]   =  geq[dP0P]   ;
+					f[dM0M]   =  geq[dM0M]   ;
+					f[dP0M]   =  geq[dP0M]   ;
+					f[dM0P]   =  geq[dM0P]   ;
+					f[d0PP]   =  geq[d0PP]   ;
+					f[d0MM]   =  geq[d0MM]   ;
+					f[d0PM]   =  geq[d0PM]   ;
+					f[d0MP]   =  geq[d0MP]   ;
+					f[dPPP]  =  geq[dPPP]  ;
+					f[dMPP]  =  geq[dMPP]  ;
+					f[dPMP]  =  geq[dPMP]  ;
+					f[dMMP]  =  geq[dMMP]  ;
+					f[dPPM]  =  geq[dPPM]  ;
+					f[dMPM]  =  geq[dMPM]  ;
+					f[dPMM]  =  geq[dPMM]  ;
+					f[dMMM]  =  geq[dMMM]  ;
+					f[d000] =  geq[d000] ;
 
-					distributionsF->setDistribution(f, ix1, ix2, ix3);
-					distributionsF->setDistributionInv(f, ix1, ix2, ix3);
+					distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3);
+					distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3);
 
-					f[DIR_P00]    =  phi * feq[DIR_P00]    / rho;
-					f[DIR_M00]    =  phi * feq[DIR_M00]    / rho;
-					f[DIR_0P0]    =  phi * feq[DIR_0P0]    / rho;
-					f[DIR_0M0]    =  phi * feq[DIR_0M0]    / rho;
-					f[DIR_00P]    =  phi * feq[DIR_00P]    / rho;
-					f[DIR_00M]    =  phi * feq[DIR_00M]    / rho;
-					f[DIR_PP0]   =  phi * feq[DIR_PP0]   / rho;
-					f[DIR_MM0]   =  phi * feq[DIR_MM0]   / rho;
-					f[DIR_PM0]   =  phi * feq[DIR_PM0]   / rho;
-					f[DIR_MP0]   =  phi * feq[DIR_MP0]   / rho;
-					f[DIR_P0P]   =  phi * feq[DIR_P0P]   / rho;
-					f[DIR_M0M]   =  phi * feq[DIR_M0M]   / rho;
-					f[DIR_P0M]   =  phi * feq[DIR_P0M]   / rho;
-					f[DIR_M0P]   =  phi * feq[DIR_M0P]   / rho;
-					f[DIR_0PP]   =  phi * feq[DIR_0PP]   / rho;
-					f[DIR_0MM]   =  phi * feq[DIR_0MM]   / rho;
-					f[DIR_0PM]   =  phi * feq[DIR_0PM]   / rho;
-					f[DIR_0MP]   =  phi * feq[DIR_0MP]   / rho;
-					f[DIR_PPP]  =  phi * feq[DIR_PPP]  / rho;
-					f[DIR_MPP]  =  phi * feq[DIR_MPP]  / rho;
-					f[DIR_PMP]  =  phi * feq[DIR_PMP]  / rho;
-					f[DIR_MMP]  =  phi * feq[DIR_MMP]  / rho;
-					f[DIR_PPM]  =  phi * feq[DIR_PPM]  / rho;
-					f[DIR_MPM]  =  phi * feq[DIR_MPM]  / rho;
-					f[DIR_PMM]  =  phi * feq[DIR_PMM]  / rho;
-					f[DIR_MMM]  =  phi * feq[DIR_MMM]  / rho;
-					f[DIR_000] =  phi * feq[DIR_000] / rho;
+					f[dP00]    =  phi * feq[dP00]    / rho;
+					f[dM00]    =  phi * feq[dM00]    / rho;
+					f[d0P0]    =  phi * feq[d0P0]    / rho;
+					f[d0M0]    =  phi * feq[d0M0]    / rho;
+					f[d00P]    =  phi * feq[d00P]    / rho;
+					f[d00M]    =  phi * feq[d00M]    / rho;
+					f[dPP0]   =  phi * feq[dPP0]   / rho;
+					f[dMM0]   =  phi * feq[dMM0]   / rho;
+					f[dPM0]   =  phi * feq[dPM0]   / rho;
+					f[dMP0]   =  phi * feq[dMP0]   / rho;
+					f[dP0P]   =  phi * feq[dP0P]   / rho;
+					f[dM0M]   =  phi * feq[dM0M]   / rho;
+					f[dP0M]   =  phi * feq[dP0M]   / rho;
+					f[dM0P]   =  phi * feq[dM0P]   / rho;
+					f[d0PP]   =  phi * feq[d0PP]   / rho;
+					f[d0MM]   =  phi * feq[d0MM]   / rho;
+					f[d0PM]   =  phi * feq[d0PM]   / rho;
+					f[d0MP]   =  phi * feq[d0MP]   / rho;
+					f[dPPP]  =  phi * feq[dPPP]  / rho;
+					f[dMPP]  =  phi * feq[dMPP]  / rho;
+					f[dPMP]  =  phi * feq[dPMP]  / rho;
+					f[dMMP]  =  phi * feq[dMMP]  / rho;
+					f[dPPM]  =  phi * feq[dPPM]  / rho;
+					f[dMPM]  =  phi * feq[dMPM]  / rho;
+					f[dPMM]  =  phi * feq[dPMM]  / rho;
+					f[dMMM]  =  phi * feq[dMMM]  / rho;
+					f[d000] =  phi * feq[d000] / rho;
 
-					distributionsH->setDistribution(f, ix1, ix2, ix3);
-					distributionsH->setDistributionInv(f, ix1, ix2, ix3);
+					distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3);
+					distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3);
 
 					if (distributionsH2) {
 
-						f[DIR_P00]    = (1.-phi) * feq[DIR_P00] / rho;
-						f[DIR_M00]    = (1.-phi) * feq[DIR_M00] / rho;
-						f[DIR_0P0]    = (1.-phi) * feq[DIR_0P0] / rho;
-						f[DIR_0M0]    = (1.-phi) * feq[DIR_0M0] / rho;
-						f[DIR_00P]    = (1.-phi) * feq[DIR_00P] / rho;
-						f[DIR_00M]    = (1.-phi) * feq[DIR_00M] / rho;
-						f[DIR_PP0]   = (1.-phi) * feq[DIR_PP0] / rho;
-						f[DIR_MM0]   = (1.-phi) * feq[DIR_MM0] / rho;
-						f[DIR_PM0]   = (1.-phi) * feq[DIR_PM0] / rho;
-						f[DIR_MP0]   = (1.-phi) * feq[DIR_MP0] / rho;
-						f[DIR_P0P]   = (1.-phi) * feq[DIR_P0P] / rho;
-						f[DIR_M0M]   = (1.-phi) * feq[DIR_M0M] / rho;
-						f[DIR_P0M]   = (1.-phi) * feq[DIR_P0M] / rho;
-						f[DIR_M0P]   = (1.-phi) * feq[DIR_M0P] / rho;
-						f[DIR_0PP]   = (1.-phi) * feq[DIR_0PP] / rho;
-						f[DIR_0MM]   = (1.-phi) * feq[DIR_0MM] / rho;
-						f[DIR_0PM]   = (1.-phi) * feq[DIR_0PM] / rho;
-						f[DIR_0MP]   = (1.-phi) * feq[DIR_0MP] / rho;
-						f[DIR_PPP]  = (1.-phi) * feq[DIR_PPP] / rho;
-						f[DIR_MPP]  = (1.-phi) * feq[DIR_MPP] / rho;
-						f[DIR_PMP]  = (1.-phi) * feq[DIR_PMP] / rho;
-						f[DIR_MMP]  = (1.-phi) * feq[DIR_MMP] / rho;
-						f[DIR_PPM]  = (1.-phi) * feq[DIR_PPM] / rho;
-						f[DIR_MPM]  = (1.-phi) * feq[DIR_MPM] / rho;
-						f[DIR_PMM]  = (1.-phi) * feq[DIR_PMM] / rho;
-						f[DIR_MMM]  = (1.-phi) * feq[DIR_MMM] / rho;
-						f[DIR_000] = (1.-phi) * feq[DIR_000] / rho;
+						f[dP00]    = (1.-phi) * feq[dP00] / rho;
+						f[dM00]    = (1.-phi) * feq[dM00] / rho;
+						f[d0P0]    = (1.-phi) * feq[d0P0] / rho;
+						f[d0M0]    = (1.-phi) * feq[d0M0] / rho;
+						f[d00P]    = (1.-phi) * feq[d00P] / rho;
+						f[d00M]    = (1.-phi) * feq[d00M] / rho;
+						f[dPP0]   = (1.-phi) * feq[dPP0] / rho;
+						f[dMM0]   = (1.-phi) * feq[dMM0] / rho;
+						f[dPM0]   = (1.-phi) * feq[dPM0] / rho;
+						f[dMP0]   = (1.-phi) * feq[dMP0] / rho;
+						f[dP0P]   = (1.-phi) * feq[dP0P] / rho;
+						f[dM0M]   = (1.-phi) * feq[dM0M] / rho;
+						f[dP0M]   = (1.-phi) * feq[dP0M] / rho;
+						f[dM0P]   = (1.-phi) * feq[dM0P] / rho;
+						f[d0PP]   = (1.-phi) * feq[d0PP] / rho;
+						f[d0MM]   = (1.-phi) * feq[d0MM] / rho;
+						f[d0PM]   = (1.-phi) * feq[d0PM] / rho;
+						f[d0MP]   = (1.-phi) * feq[d0MP] / rho;
+						f[dPPP]  = (1.-phi) * feq[dPPP] / rho;
+						f[dMPP]  = (1.-phi) * feq[dMPP] / rho;
+						f[dPMP]  = (1.-phi) * feq[dPMP] / rho;
+						f[dMMP]  = (1.-phi) * feq[dMMP] / rho;
+						f[dPPM]  = (1.-phi) * feq[dPPM] / rho;
+						f[dMPM]  = (1.-phi) * feq[dMPM] / rho;
+						f[dPMM]  = (1.-phi) * feq[dPMM] / rho;
+						f[dMMM]  = (1.-phi) * feq[dMMM] / rho;
+						f[d000] = (1.-phi) * feq[d000] / rho;
 
-                        distributionsH2->setDistribution(f, ix1, ix2, ix3);
-                        distributionsH2->setDistributionInv(f, ix1, ix2, ix3);                    
+                        distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3);
+                        distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3);                    
 					}
 				}
 	}
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
index 0aca152c1d9d326e73216a86540130dae3dd4ad0..a51bdc0234734282d3c9504fd2d52d7b11355414 100644
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
+++ b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
@@ -234,107 +234,107 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3
 						//feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq));
 						feq[dir] =  WEIGTH[dir] * (1 + 3 * velProd + 4.5 * velSq1 - 1.5 * (vx1Sq + vx2Sq + vx3Sq));
 						//geq[dir] = p1*WEIGTH1[dir] + gamma;
-						//geq[dir] = p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma*rho;
+						//geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho;
 						geq[dir] = p1 * WEIGTH[dir] / (vf::basics::constant::c1o3) + gamma ;
 					}
 
-					f[DIR_000] = geq[DIR_000];
-					f[DIR_P00] = geq[DIR_P00];
-					f[DIR_M00] = geq[DIR_M00];
-					f[DIR_0P0] = geq[DIR_0P0];
-					f[DIR_0M0] = geq[DIR_0M0];
-					f[DIR_00P] = geq[DIR_00P];
-					f[DIR_00M] = geq[DIR_00M];
-					f[DIR_PP0] = geq[DIR_PP0];
-					f[DIR_MM0] = geq[DIR_MM0];
-					f[DIR_PM0] = geq[DIR_PM0];
-					f[DIR_MP0] = geq[DIR_MP0];
-					f[DIR_P0P] = geq[DIR_P0P];
-					f[DIR_M0M] = geq[DIR_M0M];
-					f[DIR_P0M] = geq[DIR_P0M];
-					f[DIR_M0P] = geq[DIR_M0P];
-					f[DIR_0PP] = geq[DIR_0PP];
-					f[DIR_0MM] = geq[DIR_0MM];
-					f[DIR_0PM] = geq[DIR_0PM];
-					f[DIR_0MP] = geq[DIR_0MP];
-					f[DIR_PPP] = geq[DIR_PPP];
-					f[DIR_MPP] = geq[DIR_MPP];
-					f[DIR_PMP] = geq[DIR_PMP];
-					f[DIR_MMP] = geq[DIR_MMP];
-					f[DIR_PPM] = geq[DIR_PPM];
-					f[DIR_MPM] = geq[DIR_MPM];
-					f[DIR_PMM] = geq[DIR_PMM];
-					f[DIR_MMM] = geq[DIR_MMM];
+					f[d000] = geq[d000];
+					f[dP00] = geq[dP00];
+					f[dM00] = geq[dM00];
+					f[d0P0] = geq[d0P0];
+					f[d0M0] = geq[d0M0];
+					f[d00P] = geq[d00P];
+					f[d00M] = geq[d00M];
+					f[dPP0] = geq[dPP0];
+					f[dMM0] = geq[dMM0];
+					f[dPM0] = geq[dPM0];
+					f[dMP0] = geq[dMP0];
+					f[dP0P] = geq[dP0P];
+					f[dM0M] = geq[dM0M];
+					f[dP0M] = geq[dP0M];
+					f[dM0P] = geq[dM0P];
+					f[d0PP] = geq[d0PP];
+					f[d0MM] = geq[d0MM];
+					f[d0PM] = geq[d0PM];
+					f[d0MP] = geq[d0MP];
+					f[dPPP] = geq[dPPP];
+					f[dMPP] = geq[dMPP];
+					f[dPMP] = geq[dPMP];
+					f[dMMP] = geq[dMMP];
+					f[dPPM] = geq[dPPM];
+					f[dMPM] = geq[dMPM];
+					f[dPMM] = geq[dPMM];
+					f[dMMM] = geq[dMMM];
 					
 
-					distributionsF->setDistribution(f, ix1, ix2, ix3);
-					distributionsF->setDistributionInv(f, ix1, ix2, ix3);
+					distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3);
+					distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3);
 
-					f[DIR_000] = phi * feq[DIR_000];// / rho;
-					f[DIR_P00] = phi * feq[DIR_P00];// / rho;
-					f[DIR_M00] = phi * feq[DIR_M00];// / rho;
-					f[DIR_0P0] = phi * feq[DIR_0P0];// / rho;
-					f[DIR_0M0] = phi * feq[DIR_0M0];// / rho;
-					f[DIR_00P] = phi * feq[DIR_00P];// / rho;
-					f[DIR_00M] = phi * feq[DIR_00M];// / rho;
-					f[DIR_PP0] = phi * feq[DIR_PP0];// / rho;
-					f[DIR_MM0] = phi * feq[DIR_MM0];// / rho;
-					f[DIR_PM0] = phi * feq[DIR_PM0];// / rho;
-					f[DIR_MP0] = phi * feq[DIR_MP0];// / rho;
-					f[DIR_P0P] = phi * feq[DIR_P0P];// / rho;
-					f[DIR_M0M] = phi * feq[DIR_M0M];// / rho;
-					f[DIR_P0M] = phi * feq[DIR_P0M];// / rho;
-					f[DIR_M0P] = phi * feq[DIR_M0P];// / rho;
-					f[DIR_0PP] = phi * feq[DIR_0PP];// / rho;
-					f[DIR_0MM] = phi * feq[DIR_0MM];// / rho;
-					f[DIR_0PM] = phi * feq[DIR_0PM];// / rho;
-					f[DIR_0MP] = phi * feq[DIR_0MP];// / rho;
-					f[DIR_PPP] = phi * feq[DIR_PPP];// / rho;
-					f[DIR_MPP] = phi * feq[DIR_MPP];// / rho;
-					f[DIR_PMP] = phi * feq[DIR_PMP];// / rho;
-					f[DIR_MMP] = phi * feq[DIR_MMP];// / rho;
-					f[DIR_PPM] = phi * feq[DIR_PPM];// / rho;
-					f[DIR_MPM] = phi * feq[DIR_MPM];// / rho;
-					f[DIR_PMM] = phi * feq[DIR_PMM];// / rho;
-					f[DIR_MMM] = phi * feq[DIR_MMM];// / rho;
+					f[d000] = phi * feq[d000];// / rho;
+					f[dP00] = phi * feq[dP00];// / rho;
+					f[dM00] = phi * feq[dM00];// / rho;
+					f[d0P0] = phi * feq[d0P0];// / rho;
+					f[d0M0] = phi * feq[d0M0];// / rho;
+					f[d00P] = phi * feq[d00P];// / rho;
+					f[d00M] = phi * feq[d00M];// / rho;
+					f[dPP0] = phi * feq[dPP0];// / rho;
+					f[dMM0] = phi * feq[dMM0];// / rho;
+					f[dPM0] = phi * feq[dPM0];// / rho;
+					f[dMP0] = phi * feq[dMP0];// / rho;
+					f[dP0P] = phi * feq[dP0P];// / rho;
+					f[dM0M] = phi * feq[dM0M];// / rho;
+					f[dP0M] = phi * feq[dP0M];// / rho;
+					f[dM0P] = phi * feq[dM0P];// / rho;
+					f[d0PP] = phi * feq[d0PP];// / rho;
+					f[d0MM] = phi * feq[d0MM];// / rho;
+					f[d0PM] = phi * feq[d0PM];// / rho;
+					f[d0MP] = phi * feq[d0MP];// / rho;
+					f[dPPP] = phi * feq[dPPP];// / rho;
+					f[dMPP] = phi * feq[dMPP];// / rho;
+					f[dPMP] = phi * feq[dPMP];// / rho;
+					f[dMMP] = phi * feq[dMMP];// / rho;
+					f[dPPM] = phi * feq[dPPM];// / rho;
+					f[dMPM] = phi * feq[dMPM];// / rho;
+					f[dPMM] = phi * feq[dPMM];// / rho;
+					f[dMMM] = phi * feq[dMMM];// / rho;
 					
 
-					distributionsH->setDistribution(f, ix1, ix2, ix3);
-					distributionsH->setDistributionInv(f, ix1, ix2, ix3);
+					distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3);
+					distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3);
 
 					if (distributionsH2) {
 
-						f[DIR_000] = 0;//(1. - phi) * feq[DIR_000]; //  / rho;
-						f[DIR_P00] = 0;//(1.-phi) * feq[DIR_P00]   ;// / rho;
-						f[DIR_M00] = 0;//(1.-phi) * feq[DIR_M00]   ;// / rho;
-						f[DIR_0P0] = 0;//(1.-phi) * feq[DIR_0P0]   ;// / rho;
-						f[DIR_0M0] = 0;//(1.-phi) * feq[DIR_0M0]   ;// / rho;
-						f[DIR_00P] = 0;//(1.-phi) * feq[DIR_00P]   ;// / rho;
-						f[DIR_00M] = 0;//(1.-phi) * feq[DIR_00M]   ;// / rho;
-						f[DIR_PP0] = 0;//(1.-phi) * feq[DIR_PP0]  ;// / rho;
-						f[DIR_MM0] = 0;//(1.-phi) * feq[DIR_MM0]  ;// / rho;
-						f[DIR_PM0] = 0;//(1.-phi) * feq[DIR_PM0]  ;// / rho;
-						f[DIR_MP0] = 0;//(1.-phi) * feq[DIR_MP0]  ;// / rho;
-						f[DIR_P0P] = 0;//(1.-phi) * feq[DIR_P0P]  ;// / rho;
-						f[DIR_M0M] = 0;//(1.-phi) * feq[DIR_M0M]  ;// / rho;
-						f[DIR_P0M] = 0;//(1.-phi) * feq[DIR_P0M]  ;// / rho;
-						f[DIR_M0P] = 0;//(1.-phi) * feq[DIR_M0P]  ;// / rho;
-						f[DIR_0PP] = 0;//(1.-phi) * feq[DIR_0PP]  ;// / rho;
-						f[DIR_0MM] = 0;//(1.-phi) * feq[DIR_0MM]  ;// / rho;
-						f[DIR_0PM] = 0;//(1.-phi) * feq[DIR_0PM]  ;// / rho;
-						f[DIR_0MP] = 0;//(1.-phi) * feq[DIR_0MP]  ;// / rho;
-						f[DIR_PPP] = 0;//(1.-phi) * feq[DIR_PPP] ;// / rho;
-						f[DIR_MPP] = 0;//(1.-phi) * feq[DIR_MPP] ;// / rho;
-						f[DIR_PMP] = 0;//(1.-phi) * feq[DIR_PMP] ;// / rho;
-						f[DIR_MMP] = 0;//(1.-phi) * feq[DIR_MMP] ;// / rho;
-						f[DIR_PPM] = 0;//(1.-phi) * feq[DIR_PPM] ;// / rho;
-						f[DIR_MPM] = 0;//(1.-phi) * feq[DIR_MPM] ;// / rho;
-						f[DIR_PMM] = 0;//(1.-phi) * feq[DIR_PMM] ;// / rho;
-						f[DIR_MMM] = 0;//(1.-phi) * feq[DIR_MMM] ;// / rho;
+						f[d000] = 0;//(1. - phi) * feq[d000]; //  / rho;
+						f[dP00] = 0;//(1.-phi) * feq[dP00]   ;// / rho;
+						f[dM00] = 0;//(1.-phi) * feq[dM00]   ;// / rho;
+						f[d0P0] = 0;//(1.-phi) * feq[d0P0]   ;// / rho;
+						f[d0M0] = 0;//(1.-phi) * feq[d0M0]   ;// / rho;
+						f[d00P] = 0;//(1.-phi) * feq[d00P]   ;// / rho;
+						f[d00M] = 0;//(1.-phi) * feq[d00M]   ;// / rho;
+						f[dPP0] = 0;//(1.-phi) * feq[dPP0]  ;// / rho;
+						f[dMM0] = 0;//(1.-phi) * feq[dMM0]  ;// / rho;
+						f[dPM0] = 0;//(1.-phi) * feq[dPM0]  ;// / rho;
+						f[dMP0] = 0;//(1.-phi) * feq[dMP0]  ;// / rho;
+						f[dP0P] = 0;//(1.-phi) * feq[dP0P]  ;// / rho;
+						f[dM0M] = 0;//(1.-phi) * feq[dM0M]  ;// / rho;
+						f[dP0M] = 0;//(1.-phi) * feq[dP0M]  ;// / rho;
+						f[dM0P] = 0;//(1.-phi) * feq[dM0P]  ;// / rho;
+						f[d0PP] = 0;//(1.-phi) * feq[d0PP]  ;// / rho;
+						f[d0MM] = 0;//(1.-phi) * feq[d0MM]  ;// / rho;
+						f[d0PM] = 0;//(1.-phi) * feq[d0PM]  ;// / rho;
+						f[d0MP] = 0;//(1.-phi) * feq[d0MP]  ;// / rho;
+						f[dPPP] = 0;//(1.-phi) * feq[dPPP] ;// / rho;
+						f[dMPP] = 0;//(1.-phi) * feq[dMPP] ;// / rho;
+						f[dPMP] = 0;//(1.-phi) * feq[dPMP] ;// / rho;
+						f[dMMP] = 0;//(1.-phi) * feq[dMMP] ;// / rho;
+						f[dPPM] = 0;//(1.-phi) * feq[dPPM] ;// / rho;
+						f[dMPM] = 0;//(1.-phi) * feq[dMPM] ;// / rho;
+						f[dPMM] = 0;//(1.-phi) * feq[dPMM] ;// / rho;
+						f[dMMM] = 0;//(1.-phi) * feq[dMMM] ;// / rho;
 						
 
-                        distributionsH2->setDistribution(f, ix1, ix2, ix3);
-                        distributionsH2->setDistributionInv(f, ix1, ix2, ix3);                    
+                        distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3);
+                        distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3);                    
 					}
 				}
 	}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp
index 4227b3af8af343de69b15944a5ebb96f5bd5c9d8..f66ec5059ddd3ad0110ac263ffdff2370cc944bc 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp
@@ -44,7 +44,7 @@ void RheologyNoSlipBCStrategy::applyBC()
 {
    real f[D3Q27System::ENDF + 1];
    real feq[D3Q27System::ENDF + 1];
-   distributions->getDistribution(f, x1, x2, x3);
+   distributions->getPreCollisionDistribution(f, x1, x2, x3);
    real rho, vx1, vx2, vx3;
    calcMacrosFct(f, rho, vx1, vx2, vx3);
    calcFeqFct(feq, rho, vx1, vx2, vx3);
@@ -60,7 +60,7 @@ void RheologyNoSlipBCStrategy::applyBC()
          const int invDir = D3Q27System::INVDIR[fDir];
          real q = bcPtr->getQ(invDir);
          real fReturn =(f[invDir] + q * f[fDir] + q * collFactorF * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) / (vf::basics::constant::c1o1 + q);
-         distributions->setDistributionInvForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir);
+         distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir);
       }
    }
 }
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp
index 706edc7a2efe6ab23dde750b26d2905f16fe4220..24e1f4c14c9d7ac0339ab4214cf7a325b1319f02 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp
@@ -55,7 +55,7 @@ void RheologyVelocityBCStrategy::applyBC()
 
     real f[D3Q27System::ENDF+1];
     real feq[D3Q27System::ENDF+1];
-    distributions->getDistribution(f, x1, x2, x3);
+    distributions->getPreCollisionDistribution(f, x1, x2, x3);
     real rho, vx1, vx2, vx3, drho;
     calcMacrosFct(f, drho, vx1, vx2, vx3);
     calcFeqFct(feq, drho, vx1, vx2, vx3);
@@ -75,7 +75,7 @@ void RheologyVelocityBCStrategy::applyBC()
             real q = bcPtr->getQ(invDir);
             real velocity = bcPtr->getBoundaryVelocity(invDir);
             real fReturn = ((c1o1 - q) / (c1o1 + q)) * ((f[invDir])) + ((q * (f[invDir] + f[fdir] - collFactorF * (f[invDir] - feq[invDir] + f[fdir] - feq[fdir])) - velocity * rho) / (c1o1 + q));
-            distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+            distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
         }
     }
 
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp
index 70981c5d0e4178eb0b58ac807305635be5a7fdfd..9761d9d2b5a74892e82eac50f5ae6709cbbd4def 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp
@@ -79,8 +79,8 @@ void ThixotropyDensityBCStrategy::applyBC()
 	real feq[D3Q27System::ENDF + 1];
 	real h[D3Q27System::ENDF + 1];
 	real heq[D3Q27System::ENDF + 1];
-	distributions->getDistributionInv(f, x1, x2, x3);
-	distributionsH->getDistributionInv(h, x1, x2, x3);
+	distributions->getPostCollisionDistribution(f, x1, x2, x3);
+	distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
 	
 	real rho, vx1, vx2, vx3;
 	
@@ -96,12 +96,12 @@ void ThixotropyDensityBCStrategy::applyBC()
 	int nx3 = x3;
 
 	//flag points in direction of fluid
-	if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { nx1 -= 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { nx1 += 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { nx2 -= 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { nx2 += 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { nx3 -= 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { nx3 += 1; }
+	if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 -= 1; }
+	else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 += 1; }
+	else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 -= 1; }
+	else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 += 1; }
+	else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 -= 1; }
+	else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 += 1; }
 	else	 UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
 
 	real rhoBC = bcPtr->getBoundaryDensity();
@@ -112,11 +112,11 @@ void ThixotropyDensityBCStrategy::applyBC()
 		{
 			real ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3);
 			ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp;
-			distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
+			distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
 
 			real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
 			htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-			distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
+			distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
 		}
 	}
 }
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp
index da1f2deaa8c18fb74f9d5b60212f05dbb94173fe..e143e0574268fc2f7ee76bb660c385469302a307 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp
@@ -74,8 +74,8 @@ void ThixotropyNoSlipBCStrategy::applyBC()
 	real feq[D3Q27System::ENDF + 1];
 	real h[D3Q27System::ENDF + 1];
 	real heq[D3Q27System::ENDF + 1];
-	distributions->getDistributionInv(f, x1, x2, x3);
-	distributionsH->getDistributionInv(h, x1, x2, x3);
+	distributions->getPostCollisionDistribution(f, x1, x2, x3);
+	distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
 	real rho, vx1, vx2, vx3;//, concentration, fl1, fl2, fl3, m100;
 	calcMacrosFct(f, rho, vx1, vx2, vx3);
 	calcFeqFct(feq, rho, vx1, vx2, vx3);
@@ -94,8 +94,8 @@ void ThixotropyNoSlipBCStrategy::applyBC()
 			real fReturnf = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(f[invDir] + f[fdir]));
 			real fReturnh = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((h[invDir] - heq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + heq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(h[invDir] + h[fdir]));
 
-			distributions->setDistributionForDirection(fReturnf, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-			distributionsH->setDistributionForDirection(fReturnh, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+			distributions->setPostCollisionDistributionForDirection(fReturnf, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+			distributionsH->setPostCollisionDistributionForDirection(fReturnh, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
 
 		}
 	}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp
index 3ee059eec142c2c0ef14d36d52cdf097a68efa18..668ee0419d2169de588b69153a8e76c2bb7b9377 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp
@@ -82,147 +82,147 @@ void ThixotropyNonReflectingOutflowBCStrategy::applyBC()
    int direction = -1;
 
    //flag points in direction of fluid
-   if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { nx1 += 1; direction = DIR_P00; }
-   else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { nx1 -= 1; direction = DIR_M00; }
-   else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { nx2 += 1; direction = DIR_0P0; }
-   else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { nx2 -= 1; direction = DIR_0M0; }
-   else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { nx3 += 1; direction = DIR_00P; }
-   else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { nx3 -= 1; direction = DIR_00M; }
+   if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 += 1; direction = dP00; }
+   else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 -= 1; direction = dM00; }
+   else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 += 1; direction = d0P0; }
+   else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 -= 1; direction = d0M0; }
+   else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 += 1; direction = d00P; }
+   else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 -= 1; direction = d00M; }
    else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
 
-   distributions->getDistribution(f, x1, x2, x3);
-   distributions->getDistribution(ftemp, nx1, nx2, nx3);
+   distributions->getPreCollisionDistribution(f, x1, x2, x3);
+   distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
 
    real rho, vx1, vx2, vx3;
    calcMacrosFct(f, rho, vx1, vx2, vx3);
 
    switch (direction)
    {
-      case DIR_P00:
-      f[DIR_P00] = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00];
-      f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0];
-      f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0];
-      f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P];
-      f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M];
-      f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP];
-      f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP];
-      f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM];
-      f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM];
+      case dP00:
+      f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00];
+      f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0];
+      f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0];
+      f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P];
+      f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M];
+      f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP];
+      f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP];
+      f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM];
+      f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM];
 
-      distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-      distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-      distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-      distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-      distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-      distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-      distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-      distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-      distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
+      distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+      distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+      distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+      distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+      distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+      distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+      distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+      distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+      distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
       break;
-   case DIR_M00:
-      f[DIR_M00] = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00];
-      f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0];
-      f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0];
-      f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P];
-      f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M];
-      f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP];
-      f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP];
-      f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM];
-      f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM];
+   case dM00:
+      f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00];
+      f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0];
+      f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0];
+      f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P];
+      f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M];
+      f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP];
+      f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP];
+      f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM];
+      f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM];
 
-      distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-      distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-      distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-      distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-      distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-      distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-      distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-      distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-      distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+      distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+      distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+      distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+      distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+      distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+      distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+      distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+      distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
       break;
-   case DIR_0P0:
-      f[DIR_0P0] = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0];
-      f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0];
-      f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0];
-      f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP];
-      f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM];
-      f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP];
-      f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP];
-      f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM];
-      f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM];
+   case d0P0:
+      f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0];
+      f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0];
+      f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0];
+      f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP];
+      f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM];
+      f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP];
+      f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP];
+      f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM];
+      f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM];
 
-      distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-      distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-      distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-      distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-      distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-      distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-      distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-      distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-      distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+      distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+      distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+      distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+      distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+      distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+      distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+      distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+      distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+      distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
       break;
-   case DIR_0M0:
-      f[DIR_0M0] = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0];
-      f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0];
-      f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0];
-      f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP];
-      f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM];
-      f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP];
-      f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP];
-      f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM];
-      f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM];
+   case d0M0:
+      f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0];
+      f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0];
+      f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0];
+      f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP];
+      f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM];
+      f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP];
+      f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP];
+      f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM];
+      f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM];
 
-      distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-      distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-      distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-      distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-      distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-      distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-      distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-      distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-      distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+      distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+      distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+      distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+      distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+      distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+      distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+      distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+      distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
       break;
-   case DIR_00P:
-      f[DIR_00P] = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P];
-      f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P];
-      f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P];
-      f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP];
-      f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP];
-      f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP];
-      f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP];
-      f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP];
-      f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP];
+   case d00P:
+      f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P];
+      f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P];
+      f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P];
+      f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP];
+      f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP];
+      f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP];
+      f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP];
+      f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP];
+      f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP];
 
-      distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-      distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-      distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-      distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-      distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-      distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-      distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-      distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-      distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+      distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+      distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+      distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+      distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+      distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+      distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+      distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+      distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+      distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
       break;
-   case DIR_00M:
-      f[DIR_00M] = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M];
-      f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M];
-      f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M];
-      f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM];
-      f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM];
-      f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM];
-      f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM];
-      f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM];
-      f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM];
+   case d00M:
+      f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M];
+      f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M];
+      f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M];
+      f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM];
+      f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM];
+      f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM];
+      f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM];
+      f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM];
+      f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM];
 
-      distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-      distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-      distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-      distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-      distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-      distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-      distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-      distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-      distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+      distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+      distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+      distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+      distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+      distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+      distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+      distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+      distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
       break;
    default:
       UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
@@ -230,8 +230,8 @@ void ThixotropyNonReflectingOutflowBCStrategy::applyBC()
    real h[D3Q27System::ENDF + 1];
    real htemp[ENDF + 1];
 
-   distributionsH->getDistribution(h, x1, x2, x3);
-   distributionsH->getDistribution(htemp, nx1, nx2, nx3);
+   distributionsH->getPreCollisionDistribution(h, x1, x2, x3);
+   distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3);
 
    vx1 = 0.0;
    vx2 = 0.0;
@@ -242,131 +242,131 @@ void ThixotropyNonReflectingOutflowBCStrategy::applyBC()
 
    switch (direction)
    {
-   case DIR_P00:
-      h[DIR_P00]  = htemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P00];
-      h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PP0];
-      h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PM0];
-      h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0P];
-      h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0M];
-      h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPP];
-      h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMP];
-      h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPM];
-      h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMM];
+   case dP00:
+      h[dP00]  = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00];
+      h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0];
+      h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0];
+      h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P];
+      h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M];
+      h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP];
+      h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP];
+      h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM];
+      h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM];
 
-      distributionsH->setDistributionInvForDirection(h[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-      distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-      distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-      distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-      distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-      distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-      distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-      distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-      distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+      distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
       break;
-   case DIR_M00:
-      h[DIR_M00] = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M00];
-      h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MP0];
-      h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MM0];
-      h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0P];
-      h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0M];
-      h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPP];
-      h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMP];
-      h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPM];
-      h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMM];
+   case dM00:
+      h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00];
+      h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0];
+      h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0];
+      h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P];
+      h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M];
+      h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP];
+      h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP];
+      h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM];
+      h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM];
 
-      distributionsH->setDistributionInvForDirection(h[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-      distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-      distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-      distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-      distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-      distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-      distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-      distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-      distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+      distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
       break;
-   case DIR_0P0:
-      h[DIR_0P0] = htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0P0];
-      h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PP0];
-      h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MP0];
-      h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PP];
-      h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PM];
-      h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPP];
-      h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPP];
-      h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPM];
-      h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPM];
+   case d0P0:
+      h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0];
+      h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0];
+      h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0];
+      h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP];
+      h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM];
+      h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP];
+      h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP];
+      h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM];
+      h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM];
 
-      distributionsH->setDistributionInvForDirection(h[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-      distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-      distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-      distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-      distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-      distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-      distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-      distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-      distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
       break;
-   case DIR_0M0:
-      h[DIR_0M0] = htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0M0];
-      h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PM0];
-      h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MM0];
-      h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MP];
-      h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MM];
-      h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMP];
-      h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMP];
-      h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMM];
-      h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMM];
+   case d0M0:
+      h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0];
+      h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0];
+      h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0];
+      h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP];
+      h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM];
+      h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP];
+      h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP];
+      h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM];
+      h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM];
 
-      distributionsH->setDistributionInvForDirection(h[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-      distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-      distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-      distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-      distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-      distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-      distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-      distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-      distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
       break;
-   case DIR_00P:
-      h[DIR_00P] = htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_00P];
-      h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_P0P];
-      h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_M0P];
-      h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0PP];
-      h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0MP];
-      h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PPP];
-      h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MPP];
-      h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PMP];
-      h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MMP];
+   case d00P:
+      h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P];
+      h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P];
+      h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P];
+      h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP];
+      h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP];
+      h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP];
+      h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP];
+      h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP];
+      h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP];
 
-      distributionsH->setDistributionInvForDirection(h[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-      distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-      distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-      distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-      distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-      distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-      distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-      distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-      distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+      distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+      distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+      distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
       break;
-   case DIR_00M:
-      h[DIR_00M] = htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_00M];
-      h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_P0M];
-      h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_M0M];
-      h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0PM];
-      h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0MM];
-      h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PPM];
-      h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MPM];
-      h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PMM];
-      h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MMM];
+   case d00M:
+      h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M];
+      h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M];
+      h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M];
+      h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM];
+      h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM];
+      h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM];
+      h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM];
+      h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM];
+      h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM];
 
-      distributionsH->setDistributionInvForDirection(h[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-      distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-      distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-      distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-      distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-      distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-      distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-      distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-      distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+      distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+      distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+      distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+      distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
       break;
    default:
       UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp
index 2b2dd1714eb7a9decceeb92a28a5dbfae6944e9c..2a772def0572e982a60edba7d5c2d94251ab3fad 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp
@@ -77,8 +77,8 @@ void ThixotropyVelocityBCStrategy::applyBC()
 	real feq[D3Q27System::ENDF + 1];
 	real h[D3Q27System::ENDF + 1];
 
-	distributions->getDistributionInv(f, x1, x2, x3);
-	distributionsH->getDistributionInv(h, x1, x2, x3);
+	distributions->getPostCollisionDistribution(f, x1, x2, x3);
+	distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
 	
 	real rho, vx1, vx2, vx3, drho;
 	calcMacrosFct(f, drho, vx1, vx2, vx3);
@@ -94,12 +94,12 @@ void ThixotropyVelocityBCStrategy::applyBC()
 	int nx3 = x3;
 
 	//flag points in direction of fluid
-	if (bcPtr->hasVelocityBoundaryFlag(DIR_P00)) { nx1 -= 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(DIR_M00)) { nx1 += 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(DIR_0P0)) { nx2 -= 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(DIR_0M0)) { nx2 += 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(DIR_00P)) { nx3 -= 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(DIR_00M)) { nx3 += 1; }
+	if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; }
+	else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; }
+	else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; }
+	else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; }
+	else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; }
+	else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; }
 	else	 UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary..."));
 
 	//lambdaBC = bcPtr->getBoundaryThixotropy();
@@ -112,11 +112,11 @@ void ThixotropyVelocityBCStrategy::applyBC()
 	//	{
 	//		LBMReal ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3);
 	//		ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp;
-	//		distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
+	//		distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
 
 	//		LBMReal htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
 	//		htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-	//		distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
+	//		distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
 	//	}
 	//}
 
@@ -128,11 +128,11 @@ void ThixotropyVelocityBCStrategy::applyBC()
 			real q = bcPtr->getQ(invDir);// m+m q=0 stabiler
 			real velocity = bcPtr->getBoundaryVelocity(invDir);
 			real fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * ((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q * (f[invDir] + f[fdir]) - velocity * rho) / (vf::basics::constant::c1o1 + q));
-			distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+			distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
 
 			real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
 			htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-			distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
+			distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
 		}
 	}
 }
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp
index 5d91a1e7a38ea5fc3d20e8aef5f78c9fad6a468d..529b1bb2c55f74c82690f6696d11050fbd8f687e 100644
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp
+++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp
@@ -68,10 +68,10 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC()
 
    //velocity bc for non reflecting pressure bc
    real f[D3Q27System::ENDF+1];
-   distributions->getDistributionInv(f, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
    
    real h[D3Q27System::ENDF + 1];
-   distributionsH->getDistributionInv(h, x1, x2, x3);
+   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
 
    real rho, vx1, vx2, vx3, drho;
    calcMacrosFct(f, drho, vx1, vx2, vx3);
@@ -87,12 +87,12 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC()
    int nx3 = x3;
 
    //flag points in direction of fluid
-   if (bcPtr->hasVelocityBoundaryFlag(DIR_P00)) { nx1 -= 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(DIR_M00)) { nx1 += 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(DIR_0P0)) { nx2 -= 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(DIR_0M0)) { nx2 += 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(DIR_00P)) { nx3 -= 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(DIR_00M)) { nx3 += 1; }
+   if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; }
    else	 UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary..."));
 
    for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++)
@@ -117,7 +117,7 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC()
             real velocity = bcPtr->getBoundaryVelocity(fdir);
 
             real fReturn = (f[fdir] + f[invDir] - velocity*rho) / vf::basics::constant::c2o1 - drho*D3Q27System::WEIGTH[invDir];
-            distributions->setDistributionForDirection(fReturn, nX1, nX2, nX3, invDir);
+            distributions->setPostCollisionDistributionForDirection(fReturn, nX1, nX2, nX3, invDir);
          }
       }
       
@@ -125,7 +125,7 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC()
       {
          real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
          htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-         distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
+         distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
       }
    }
 }
diff --git a/src/cpu/NonNewtonianFluids/CMakeLists.txt b/src/cpu/NonNewtonianFluids/CMakeLists.txt
index 35765164bce5ce208f1c43fcc7345cbd77f4e999..261919282ce830bfcf1e364443c439338b642d88 100644
--- a/src/cpu/NonNewtonianFluids/CMakeLists.txt
+++ b/src/cpu/NonNewtonianFluids/CMakeLists.txt
@@ -1 +1 @@
-vf_add_library(PUBLIC_LINK VirtualFluidsCore)
\ No newline at end of file
+vf_add_library(PUBLIC_LINK cpu_core)
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/LBM/Rheology.h b/src/cpu/NonNewtonianFluids/LBM/Rheology.h
index 782810ca3f68290310af3e70d440488c27bf96de..54e375de60951129af1e37a9fb1569e2fd4bab4c 100644
--- a/src/cpu/NonNewtonianFluids/LBM/Rheology.h
+++ b/src/cpu/NonNewtonianFluids/LBM/Rheology.h
@@ -89,7 +89,7 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline real Rheology::getBinghamCollFactor(real omegaInf, real shearRate, real drho)
 {
-	real cs2 = vf::basics::constant::one_over_sqrt3 * vf::basics::constant::one_over_sqrt3;
+	real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3;
 	real rho = vf::basics::constant::c1o1 + drho;
 	//analytical solution
 	real omega = omegaInf * (vf::basics::constant::c1o1 - (omegaInf * tau0) / (shearRate * cs2 * rho + UbMath::Epsilon<real>::val()));
@@ -120,7 +120,7 @@ inline real Rheology::getBinghamCollFactor(real omegaInf, real shearRate, real d
 
 inline real Rheology::getBinghamCollFactorOld(real omegaInf, real shearRate, real drho)
 {
-	const real cs2 = vf::basics::constant::c1o3; // UbMath::one_over_sqrt3* UbMath::one_over_sqrt3;
+	const real cs2 = vf::basics::constant::c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3;
 	real rho = vf::basics::constant::c1o1 + drho;
 
 	if (rho * cs2 * (vf::basics::constant::c1o1 / omegaInf - vf::basics::constant::c1o2) * shearRate < tau0)
@@ -131,7 +131,7 @@ inline real Rheology::getBinghamCollFactorOld(real omegaInf, real shearRate, rea
 //////////////////////////////////////////////////////////////////////////
 inline real Rheology::getHerschelBulkleyCollFactor(real omegaInf, real shearRate, real drho)
 {
-	real cs2 = vf::basics::constant::one_over_sqrt3 * vf::basics::constant::one_over_sqrt3;
+	real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3;
 	real rho = vf::basics::constant::c1o1 + drho;
 	real gammaDot = shearRate;
 	real omega = omegaInf;
@@ -164,7 +164,7 @@ inline real Rheology::getHerschelBulkleyCollFactorBackward(real shearRate, real
 {
 	real rho = vf::basics::constant::c1o1 + drho;
 	real gamma = shearRate + UbMath::Epsilon<real>::val();
-	real cs2 = vf::basics::constant::one_over_sqrt3 * vf::basics::constant::one_over_sqrt3;
+	real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3;
 
 	return 1.0 / ((tau0 + k * std::pow(gamma, n)) / (cs2 * rho * gamma) + vf::basics::constant::c1o2);
 }
@@ -174,7 +174,7 @@ inline real Rheology::getPowellEyringCollFactor(real omegaInf, real shearRate, r
 //	using namespace UbMath;
 	using namespace vf::basics::constant;
 
-	real cs2 = c1o3; // UbMath::one_over_sqrt3* UbMath::one_over_sqrt3;
+	real cs2 = c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3;
 	real rho = c1o1 + drho;
 	real gammaDot = shearRate;
 	real omega = omegaInf;
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp
index 8da8886a42b0a9f9c784eca708618217f06c883a..d33bbef61f8731302b8c7b8ba0ce8b17a7bd9703 100644
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp
+++ b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp
@@ -117,11 +117,11 @@ void RheologyInterpolator::calcMoments(const real* const f, real omegaInf, real&
 
    press = rho; //interpolate rho!
 
-   kxy   = -3.*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -3.*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))-(vx2*vx3));
-   kxz   = -3.*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))-(vx1*vx3));
-   kxxMyy = -3./2.*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))-(vx1*vx1-vx2*vx2));
-   kxxMzz = -3./2.*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))-(vx1*vx1-vx3*vx3));
+   kxy   = -3.*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))-(vx1*vx2));// might not be optimal MG 25.2.13
+   kyz   = -3.*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))-(vx2*vx3));
+   kxz   = -3.*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))-(vx1*vx3));
+   kxxMyy = -3./2.*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))-(vx1*vx1-vx2*vx2));
+   kxxMzz = -3./2.*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))-(vx1*vx1-vx3*vx3));
 }
 //////////////////////////////////////////////////////////////////////////
 void RheologyInterpolator::calcInterpolatedCoefficiets_intern(const D3Q27ICell& icell,
@@ -440,33 +440,33 @@ void RheologyInterpolator::calcInterpolatedNode(real* f, /*real omega,*/ real x,
    real feq[ENDF+1];
    D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3);
 
-   f[DIR_P00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[DIR_P00];
-   f[DIR_M00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[DIR_M00];
-   f[DIR_0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[DIR_0P0];
-   f[DIR_0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[DIR_0M0];
-   f[DIR_00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[DIR_00P];
-   f[DIR_00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[DIR_00M];
-   f[DIR_PP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[DIR_PP0];
-   f[DIR_MM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[DIR_MM0];
-   f[DIR_PM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[DIR_PM0];
-   f[DIR_MP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[DIR_MP0];
-   f[DIR_P0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[DIR_P0P];
-   f[DIR_M0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[DIR_M0M];
-   f[DIR_P0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[DIR_P0M];
-   f[DIR_M0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[DIR_M0P];
-   f[DIR_0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[DIR_0PP];
-   f[DIR_0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[DIR_0MM];
-   f[DIR_0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[DIR_0PM];
-   f[DIR_0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[DIR_0MP];
-   f[DIR_PPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[DIR_PPP];
-   f[DIR_MMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[DIR_MMP];
-   f[DIR_PMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[DIR_PMP];
-   f[DIR_MPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[DIR_MPP];
-   f[DIR_PPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[DIR_PPM];
-   f[DIR_MMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[DIR_MMM];
-   f[DIR_PMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[DIR_PMM];
-   f[DIR_MPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[DIR_MPM];
-   f[DIR_000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[DIR_000];
+   f[dP00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dP00];
+   f[dM00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dM00];
+   f[d0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0P0];
+   f[d0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0M0];
+   f[d00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00P];
+   f[d00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00M];
+   f[dPP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dPP0];
+   f[dMM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dMM0];
+   f[dPM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dPM0];
+   f[dMP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dMP0];
+   f[dP0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dP0P];
+   f[dM0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dM0M];
+   f[dP0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dP0M];
+   f[dM0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dM0P];
+   f[d0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0PP];
+   f[d0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0MM];
+   f[d0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0PM];
+   f[d0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0MP];
+   f[dPPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dPPP];
+   f[dMMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dMMP];
+   f[dPMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dPMP];
+   f[dMPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dMPP];
+   f[dPPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dPPM];
+   f[dMMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dMMM];
+   f[dPMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dPMM];
+   f[dMPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dMPM];
+   f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[d000];
 }
 //////////////////////////////////////////////////////////////////////////
 //Position SWB -0.25, -0.25, -0.25
@@ -630,33 +630,33 @@ void RheologyInterpolator::calcInterpolatedNodeFC(real* f, real omega)
    f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(72.*o));
    f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(72.*o));
 
-   f[DIR_P00]    = f_E    + feq[DIR_P00];
-   f[DIR_M00]    = f_E    + feq[DIR_M00];
-   f[DIR_0P0]    = f_N    + feq[DIR_0P0];
-   f[DIR_0M0]    = f_N    + feq[DIR_0M0];
-   f[DIR_00P]    = f_T    + feq[DIR_00P];
-   f[DIR_00M]    = f_T    + feq[DIR_00M];
-   f[DIR_PP0]   = f_NE   + feq[DIR_PP0];
-   f[DIR_MM0]   = f_NE   + feq[DIR_MM0];
-   f[DIR_PM0]   = f_SE   + feq[DIR_PM0];
-   f[DIR_MP0]   = f_SE   + feq[DIR_MP0];
-   f[DIR_P0P]   = f_TE   + feq[DIR_P0P];
-   f[DIR_M0M]   = f_TE   + feq[DIR_M0M];
-   f[DIR_P0M]   = f_BE   + feq[DIR_P0M];
-   f[DIR_M0P]   = f_BE   + feq[DIR_M0P];
-   f[DIR_0PP]   = f_TN   + feq[DIR_0PP];
-   f[DIR_0MM]   = f_TN   + feq[DIR_0MM];
-   f[DIR_0PM]   = f_BN   + feq[DIR_0PM];
-   f[DIR_0MP]   = f_BN   + feq[DIR_0MP];
-   f[DIR_PPP]  = f_TNE  + feq[DIR_PPP];
-   f[DIR_MPP]  = f_TNW  + feq[DIR_MPP];
-   f[DIR_PMP]  = f_TSE  + feq[DIR_PMP];
-   f[DIR_MMP]  = f_TSW  + feq[DIR_MMP];
-   f[DIR_PPM]  = f_TSW  + feq[DIR_PPM];
-   f[DIR_MPM]  = f_TSE  + feq[DIR_MPM];
-   f[DIR_PMM]  = f_TNW  + feq[DIR_PMM];
-   f[DIR_MMM]  = f_TNE  + feq[DIR_MMM];
-   f[DIR_000] = f_ZERO + feq[DIR_000];
+   f[dP00]    = f_E    + feq[dP00];
+   f[dM00]    = f_E    + feq[dM00];
+   f[d0P0]    = f_N    + feq[d0P0];
+   f[d0M0]    = f_N    + feq[d0M0];
+   f[d00P]    = f_T    + feq[d00P];
+   f[d00M]    = f_T    + feq[d00M];
+   f[dPP0]   = f_NE   + feq[dPP0];
+   f[dMM0]   = f_NE   + feq[dMM0];
+   f[dPM0]   = f_SE   + feq[dPM0];
+   f[dMP0]   = f_SE   + feq[dMP0];
+   f[dP0P]   = f_TE   + feq[dP0P];
+   f[dM0M]   = f_TE   + feq[dM0M];
+   f[dP0M]   = f_BE   + feq[dP0M];
+   f[dM0P]   = f_BE   + feq[dM0P];
+   f[d0PP]   = f_TN   + feq[d0PP];
+   f[d0MM]   = f_TN   + feq[d0MM];
+   f[d0PM]   = f_BN   + feq[d0PM];
+   f[d0MP]   = f_BN   + feq[d0MP];
+   f[dPPP]  = f_TNE  + feq[dPPP];
+   f[dMPP]  = f_TNW  + feq[dMPP];
+   f[dPMP]  = f_TSE  + feq[dPMP];
+   f[dMMP]  = f_TSW  + feq[dMMP];
+   f[dPPM]  = f_TSW  + feq[dPPM];
+   f[dMPM]  = f_TSE  + feq[dMPM];
+   f[dPMM]  = f_TNW  + feq[dPMM];
+   f[dMMM]  = f_TNE  + feq[dMMM];
+   f[d000] = f_ZERO + feq[d000];
 }
 //////////////////////////////////////////////////////////////////////////
 void RheologyInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp
index 7ed670deb9619565e9c11d18041cc522485ba2f6..fc120348cd9a1b1fc2f58139d200dabd4709bd26 100644
--- a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp
+++ b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp
@@ -222,7 +222,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, i
 
    if (bc) {
       real f[D3Q27System::ENDF + 1];
-      distributions->getDistribution(f, x1, x2, x3);
+      distributions->getPreCollisionDistribution(f, x1, x2, x3);
       real collFactor = kernel->getCollisionFactor();
       real shearRate = D3Q27System::getShearRate(f, collFactor);
       real rho = D3Q27System::getDensity(f);
@@ -256,7 +256,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int
 
    if (bc) {
       real f[D3Q27System::ENDF + 1];
-      distributions->getDistribution(f, x1, x2, x3);
+      distributions->getPreCollisionDistribution(f, x1, x2, x3);
       real collFactor = kernel->getCollisionFactor();
       real shearRate = D3Q27System::getShearRate(f, collFactor);
       real rho = D3Q27System::getDensity(f);
diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp
index bc3eab4fb93581a0184d96cddbd5542fa358e8ee..4eb5c20109baa9d2368201bf96b7807de0f5cb41 100644
--- a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp
+++ b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp
@@ -239,7 +239,7 @@ void WriteThixotropyQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
 					//data[index++].push_back(gammaDot);
 					//data[index++].push_back(collFactorF);
 
-					distributionsF->getDistribution(f, ix1, ix2, ix3);
+					distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3);
 					real rho = D3Q27System::getDensity(f);
 					real shearRate = D3Q27System::getShearRate(f, collFactor);
 					//LBMReal omega = Rheology::getHerschelBulkleyCollFactor(collFactor, shearRate, rho);
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp
deleted file mode 100644
index b1cf37e4b71ed883410c77098d9fa8d83f56a812..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.cpp
+++ /dev/null
@@ -1,341 +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 NonReflectingInflowBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Hussein Alihussein
-//=======================================================================================
-#include "NonReflectingInflowBCStrategy.h"
-
-#include "BoundaryConditions.h"
-#include "D3Q27System.h"
-#include "DistributionArray3D.h"
-
-NonReflectingInflowBCStrategy::NonReflectingInflowBCStrategy()
-{
-    BCStrategy::type         = BCStrategy::NonReflectingInflowBCStrategy;
-    BCStrategy::preCollision = true;
-}
-//////////////////////////////////////////////////////////////////////////
-NonReflectingInflowBCStrategy::~NonReflectingInflowBCStrategy() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonReflectingInflowBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new NonReflectingInflowBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void NonReflectingInflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-    this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void NonReflectingInflowBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-    using namespace D3Q27System;
- //   using namespace UbMath;
-    using namespace vf::basics::constant;
-
-    LBMReal f[ENDF + 1];
-    LBMReal ftemp[ENDF + 1];
-
-    int nx1       = x1;
-    int nx2       = x2;
-    int nx3       = x3;
-    int direction = -1;
-
-    // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) {
-        nx1 += 1;
-        direction = DIR_P00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) {
-        nx1 -= 1;
-        direction = DIR_M00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) {
-        nx2 += 1;
-        direction = DIR_0P0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) {
-        nx2 -= 1;
-        direction = DIR_0M0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) {
-        nx3 += 1;
-        direction = DIR_00P;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) {
-        nx3 -= 1;
-        direction = DIR_00M;
-    } else
-        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-    distributions->getDistribution(f, x1, x2, x3);
-    distributions->getDistribution(ftemp, nx1, nx2, nx3);
-
-    LBMReal rho, vx1, vx2, vx3;
-    calcMacrosFct(f, rho, vx1, vx2, vx3);
-    //vx1                  = 0.;
-    LBMReal BCVeloWeight = c1o2;
-    // LBMReal velocity     = 0.004814077025232405; 
-     // LBMReal velocity     = 0.00057735;
-    //LBMReal velocity = 0.04; 
-      // LBMReal velocity = 0.01; 
-     // LBMReal velocity = 1./112.; 
-    // LBMReal velocity = 1./126.; 
-     LBMReal velocity = c1o100/2;
-     // LBMReal velocity = 0.005; 
-    //LBMReal delf         =(-velocity+vx1)*0.5 ;
-    LBMReal delf; 
-
-    switch (direction) {
-        case DIR_P00:
-            delf = (-velocity + vx1) * BCVeloWeight; 
-            // delf = (-velocity ) * BCVeloWeight;
-            f[DIR_P00]   = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00] - delf* WEIGTH[DIR_P00];
-            f[DIR_PP0]  = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0]- delf* WEIGTH[DIR_PP0];
-            f[DIR_PM0]  = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0]- delf* WEIGTH[DIR_PM0];
-            f[DIR_P0P]  = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P]- delf* WEIGTH[DIR_P0P];
-            f[DIR_P0M]  = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M]- delf* WEIGTH[DIR_P0M];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP]- delf* WEIGTH[DIR_PPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP]- delf* WEIGTH[DIR_PMP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM]- delf* WEIGTH[DIR_PPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM]- delf* WEIGTH[DIR_PMM];
-            //f[DIR_P00] = (ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_P00]) *
-            //           (1 - BCVeloWeight) +
-            //       (ftemp[DIR_M00] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_M00] +
-            //       velocity*(6)*WEIGTH[DIR_P00]/* bcPtr->getBoundaryVelocity(INVDIR[DIR_M00])*/) *
-            //           (BCVeloWeight)  ;
-            //f[DIR_PP0] = (ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_PP0]) *
-            //            (1 - BCVeloWeight) +
-            //        (ftemp[DIR_MM0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_MM0] +
-            //         velocity * (6) * WEIGTH[DIR_PP0] /*bcPtr->getBoundaryVelocity(INVDIR[DIR_MM0])*/) *
-            //            (BCVeloWeight); 
-            //f[DIR_PM0] = (ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_PM0]) *
-            //            (1 - BCVeloWeight) +
-            //        (ftemp[DIR_MP0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_MP0] +
-            //        velocity*(6)*WEIGTH[DIR_PP0]/* bcPtr->getBoundaryVelocity(INVDIR[DIR_MP0])*/) *
-            //            (BCVeloWeight); 
-            //f[DIR_P0P] = (ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_P0P]) *
-            //            (1 - BCVeloWeight) +
-            //        (ftemp[DIR_M0M] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_M0M] +
-            //        velocity*(6)*WEIGTH[DIR_P0P]/* bcPtr->getBoundaryVelocity(INVDIR[DIR_M0M])*/) *
-            //            (BCVeloWeight); 
-            //f[DIR_P0M] = (ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_P0M])*
-            //            (1 - BCVeloWeight) +
-            //        (ftemp[DIR_M0P] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_M0P] +
-            //        velocity*(6)*WEIGTH[DIR_P0M]/* bcPtr->getBoundaryVelocity(INVDIR[DIR_M0P])*/) *
-            //            (BCVeloWeight); 
-            //f[DIR_PPP] = (ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_PPP])*
-            //            (1 - BCVeloWeight) +
-            //        (ftemp[DIR_MMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_MMM] +
-            //     velocity * (6) * WEIGTH[DIR_PPP] /* bcPtr->getBoundaryVelocity(INVDIR[DIR_MMM])*/) *
-            //            (BCVeloWeight); 
-            //f[DIR_PMP] = (ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_PMP]) *
-            //             (1 - BCVeloWeight) +
-            //         (ftemp[DIR_MPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_MPM] +
-            //     velocity * (6) * WEIGTH[DIR_PPP] /*bcPtr->getBoundaryVelocity(INVDIR[DIR_MPM])*/) *
-            //             (BCVeloWeight); 
-            //f[DIR_PPM] = (ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_PPM]) *
-            //             (1 - BCVeloWeight) +
-            //         (ftemp[DIR_MMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_MMP] +
-            //     velocity * (6) * WEIGTH[DIR_PPP] /* bcPtr->getBoundaryVelocity(INVDIR[DIR_MMP])*/) *
-            //             (BCVeloWeight); 
-            //f[DIR_PMM] = (ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_PMM]) *
-            //             (1 - BCVeloWeight) +
-            //         (ftemp[DIR_MPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * f[DIR_MPP] +
-            //     velocity * (6) * WEIGTH[DIR_PPP] /* bcPtr->getBoundaryVelocity(INVDIR[DIR_MPP])*/) *
-            //             (BCVeloWeight); 
-
-            distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            break;
-        case DIR_M00:
-            delf = (-velocity - vx1) * BCVeloWeight;
-            f[DIR_M00] = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00] -
-                   delf * WEIGTH[DIR_M00];
-            f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0] -
-                    delf * WEIGTH[DIR_MP0];
-            f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0] -
-                    delf * WEIGTH[DIR_MM0];
-            f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P] -
-                    delf * WEIGTH[DIR_M0P];
-            f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M] -
-                    delf * WEIGTH[DIR_M0M];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP] -
-                     delf * WEIGTH[DIR_MPP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP] -
-                     delf * WEIGTH[DIR_MMP];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM] -
-                     delf * WEIGTH[DIR_MPM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM] -
-                     delf * WEIGTH[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        case DIR_0P0:
-            delf = (-velocity + vx2) * BCVeloWeight;
-            f[DIR_0P0] = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0] -
-                   delf * WEIGTH[DIR_0P0];
-            f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0] -
-                    delf * WEIGTH[DIR_PP0];
-            f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0] -
-                    delf * WEIGTH[DIR_MP0];
-            f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP] -
-                    delf * WEIGTH[DIR_0PP];
-            f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM] -
-                    delf * WEIGTH[DIR_0PM];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP] -
-                     delf * WEIGTH[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP] -
-                     delf * WEIGTH[DIR_MPP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM] -
-                     delf * WEIGTH[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM] -
-                     delf * WEIGTH[DIR_MPM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            break;
-        case DIR_0M0:
-            delf = (-velocity - vx2) * BCVeloWeight;
-            f[DIR_0M0] = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0] -
-                   delf * WEIGTH[DIR_0M0];
-            f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0] -
-                    delf * WEIGTH[DIR_PM0];
-            f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0] -
-                    delf * WEIGTH[DIR_MM0];
-            f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP] -
-                    delf * WEIGTH[DIR_0MP];
-            f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM] -
-                    delf * WEIGTH[DIR_0MM];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP] -
-                     delf * WEIGTH[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP] -
-                     delf * WEIGTH[DIR_MMP];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM] -
-                     delf * WEIGTH[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM] -
-                     delf * WEIGTH[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        case DIR_00P:
-            delf = (-velocity + vx3) * BCVeloWeight;
-            f[DIR_00P] = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P] -
-                   delf * WEIGTH[DIR_00P];
-            f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P] -
-                    delf * WEIGTH[DIR_P0P];
-            f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P] -
-                    delf * WEIGTH[DIR_M0P];
-            f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP] -
-                    delf * WEIGTH[DIR_0PP];
-            f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP] -
-                    delf * WEIGTH[DIR_0MP];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP] -
-                     delf * WEIGTH[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP] -
-                     delf * WEIGTH[DIR_MPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP] -
-                     delf * WEIGTH[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP] -
-                     delf * WEIGTH[DIR_MMP];
-
-            distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            break;
-        case DIR_00M:
-            delf = (-velocity - vx3) * BCVeloWeight;
-            f[DIR_00M] = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M] -
-                   delf * WEIGTH[DIR_00M];
-            f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M] -
-                    delf * WEIGTH[DIR_P0M];
-            f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M] -
-                    delf * WEIGTH[DIR_M0M];
-            f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM] -
-                    delf * WEIGTH[DIR_0PM];
-            f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM] -
-                    delf * WEIGTH[DIR_0MM];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM] -
-                     delf * WEIGTH[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM] -
-                     delf * WEIGTH[DIR_MPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM] -
-                     delf * WEIGTH[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM] -
-                     delf * WEIGTH[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        default:
-            UB_THROW(
-                UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
-    }
-}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp
deleted file mode 100644
index b19b27ec1a5d22f835595020a26a76f194cc7ccb..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp
+++ /dev/null
@@ -1,233 +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 NonReflectingOutflowBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "NonReflectingOutflowBCStrategy.h"
-
-#include "BoundaryConditions.h"
-#include "D3Q27System.h"
-#include "DistributionArray3D.h"
-
-NonReflectingOutflowBCStrategy::NonReflectingOutflowBCStrategy()
-{
-    BCStrategy::type         = BCStrategy::NonReflectingOutflowBCStrategy;
-    BCStrategy::preCollision = true;
-}
-//////////////////////////////////////////////////////////////////////////
-NonReflectingOutflowBCStrategy::~NonReflectingOutflowBCStrategy() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonReflectingOutflowBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new NonReflectingOutflowBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-    this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-    using namespace D3Q27System;
- //   using namespace UbMath;
-    using namespace vf::basics::constant;
-
-    real f[ENDF + 1];
-    real ftemp[ENDF + 1];
-
-    int nx1       = x1;
-    int nx2       = x2;
-    int nx3       = x3;
-    int direction = -1;
-
-    // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) {
-        nx1 += 1;
-        direction = DIR_P00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) {
-        nx1 -= 1;
-        direction = DIR_M00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) {
-        nx2 += 1;
-        direction = DIR_0P0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) {
-        nx2 -= 1;
-        direction = DIR_0M0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) {
-        nx3 += 1;
-        direction = DIR_00P;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) {
-        nx3 -= 1;
-        direction = DIR_00M;
-    } else
-        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-    distributions->getDistribution(f, x1, x2, x3);
-    distributions->getDistribution(ftemp, nx1, nx2, nx3);
-
-    real rho, vx1, vx2, vx3;
-    calcMacrosFct(f, rho, vx1, vx2, vx3);
-
-    switch (direction) {
-        case DIR_P00:
-            f[DIR_P00]   = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00];
-            f[DIR_PP0]  = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0];
-            f[DIR_PM0]  = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0];
-            f[DIR_P0P]  = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P];
-            f[DIR_P0M]  = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            break;
-        case DIR_M00:
-            f[DIR_M00]   = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00];
-            f[DIR_MP0]  = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0];
-            f[DIR_MM0]  = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0];
-            f[DIR_M0P]  = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P];
-            f[DIR_M0M]  = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        case DIR_0P0:
-            f[DIR_0P0]   = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0];
-            f[DIR_PP0]  = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0];
-            f[DIR_MP0]  = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0];
-            f[DIR_0PP]  = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP];
-            f[DIR_0PM]  = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            break;
-        case DIR_0M0:
-            f[DIR_0M0]   = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0];
-            f[DIR_PM0]  = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0];
-            f[DIR_MM0]  = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0];
-            f[DIR_0MP]  = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP];
-            f[DIR_0MM]  = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        case DIR_00P:
-            f[DIR_00P]   = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P];
-            f[DIR_P0P]  = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P];
-            f[DIR_M0P]  = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P];
-            f[DIR_0PP]  = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP];
-            f[DIR_0MP]  = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP];
-
-            distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            break;
-        case DIR_00M:
-            f[DIR_00M]   = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M];
-            f[DIR_P0M]  = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M];
-            f[DIR_M0M]  = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M];
-            f[DIR_0PM]  = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM];
-            f[DIR_0MM]  = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        default:
-            UB_THROW(
-                UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
-    }
-}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp
deleted file mode 100644
index f0fb4ccae28c38c13742fc9875acf7f44f545cbc..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp
+++ /dev/null
@@ -1,233 +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 NonReflectingOutflowWithRelaxationBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher, Hussein Alihussein
-//=======================================================================================
-#include "NonReflectingOutflowWithRelaxationBCStrategy.h"
-
-#include "BoundaryConditions.h"
-#include "D3Q27System.h"
-#include "DistributionArray3D.h"
-
-NonReflectingOutflowWithRelaxationBCStrategy::NonReflectingOutflowWithRelaxationBCStrategy()
-{
-    BCStrategy::type         = BCStrategy::NonReflectingOutflowWithRelaxationBCStrategy;
-    BCStrategy::preCollision = true;
-}
-//////////////////////////////////////////////////////////////////////////
-NonReflectingOutflowWithRelaxationBCStrategy::~NonReflectingOutflowWithRelaxationBCStrategy() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonReflectingOutflowWithRelaxationBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new NonReflectingOutflowWithRelaxationBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowWithRelaxationBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-    this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowWithRelaxationBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-    using namespace D3Q27System;
- //   using namespace UbMath;
-    using namespace vf::basics::constant;
-
-    LBMReal f[ENDF + 1];
-    LBMReal ftemp[ENDF + 1];
-
-    int nx1       = x1;
-    int nx2       = x2;
-    int nx3       = x3;
-    int direction = -1;
-
-    // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) {
-        nx1 += 1;
-        direction = DIR_P00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) {
-        nx1 -= 1;
-        direction = DIR_M00;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) {
-        nx2 += 1;
-        direction = DIR_0P0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) {
-        nx2 -= 1;
-        direction = DIR_0M0;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) {
-        nx3 += 1;
-        direction = DIR_00P;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) {
-        nx3 -= 1;
-        direction = DIR_00M;
-    } else
-        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-    distributions->getDistribution(f, x1, x2, x3);
-    distributions->getDistribution(ftemp, nx1, nx2, nx3);
-
-    LBMReal rho, vx1, vx2, vx3;
-    calcMacrosFct(f, rho, vx1, vx2, vx3);
-    LBMReal delf = rho* c1o100;
-    switch (direction) {
-        case DIR_P00:
-            f[DIR_P00]   = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00] - delf* WEIGTH[DIR_P00];
-            f[DIR_PP0]  = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0]- delf* WEIGTH[DIR_PP0];
-            f[DIR_PM0]  = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0]- delf* WEIGTH[DIR_PM0];
-            f[DIR_P0P]  = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P]- delf* WEIGTH[DIR_P0P];
-            f[DIR_P0M]  = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M]- delf* WEIGTH[DIR_P0M];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP]- delf* WEIGTH[DIR_PPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP]- delf* WEIGTH[DIR_PMP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM]- delf* WEIGTH[DIR_PPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM]- delf* WEIGTH[DIR_PMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            break;
-        case DIR_M00:
-            f[DIR_M00]   = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00]- delf* WEIGTH[DIR_M00];
-            f[DIR_MP0]  = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0]- delf* WEIGTH[DIR_MP0];
-            f[DIR_MM0]  = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0]- delf* WEIGTH[DIR_MM0];
-            f[DIR_M0P]  = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P]- delf* WEIGTH[DIR_M0P];
-            f[DIR_M0M]  = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M]- delf* WEIGTH[DIR_M0M];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP]- delf* WEIGTH[DIR_MPP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP]- delf* WEIGTH[DIR_MMP];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM]- delf* WEIGTH[DIR_MPM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM]- delf* WEIGTH[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        case DIR_0P0:
-            f[DIR_0P0]   = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0]- delf* WEIGTH[DIR_0P0];
-            f[DIR_PP0]  = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0]- delf* WEIGTH[DIR_PP0];
-            f[DIR_MP0]  = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0]- delf* WEIGTH[DIR_MP0];
-            f[DIR_0PP]  = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP]- delf* WEIGTH[DIR_0PP];
-            f[DIR_0PM]  = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM]- delf* WEIGTH[DIR_0PM];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP]- delf* WEIGTH[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP]- delf* WEIGTH[DIR_MPP];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM]- delf* WEIGTH[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM]- delf* WEIGTH[DIR_MPM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
-            distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
-            distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            break;
-        case DIR_0M0:
-            f[DIR_0M0]   = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0]- delf* WEIGTH[DIR_0M0];
-            f[DIR_PM0]  = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0]- delf* WEIGTH[DIR_PM0];
-            f[DIR_MM0]  = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0]- delf* WEIGTH[DIR_MM0];
-            f[DIR_0MP]  = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP]- delf* WEIGTH[DIR_0MP];
-            f[DIR_0MM]  = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM]- delf* WEIGTH[DIR_0MM];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP]- delf* WEIGTH[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP]- delf* WEIGTH[DIR_MMP];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM]- delf* WEIGTH[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM]- delf* WEIGTH[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
-            distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
-            distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        case DIR_00P:
-            f[DIR_00P]   = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P]- delf* WEIGTH[DIR_00P];
-            f[DIR_P0P]  = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P]- delf* WEIGTH[DIR_P0P];
-            f[DIR_M0P]  = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P]- delf* WEIGTH[DIR_M0P];
-            f[DIR_0PP]  = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP]- delf* WEIGTH[DIR_0PP];
-            f[DIR_0MP]  = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP]- delf* WEIGTH[DIR_0MP];
-            f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP]- delf* WEIGTH[DIR_PPP];
-            f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP]- delf* WEIGTH[DIR_MPP];
-            f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP]- delf* WEIGTH[DIR_PMP];
-            f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP]- delf* WEIGTH[DIR_MMP];
-
-            distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
-            distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
-            distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
-            distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
-            distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
-            distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
-            distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
-            distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
-            distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
-            break;
-        case DIR_00M:
-            f[DIR_00M]   = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M]- delf* WEIGTH[DIR_00M];
-            f[DIR_P0M]  = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M]- delf* WEIGTH[DIR_P0M];
-            f[DIR_M0M]  = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M]- delf* WEIGTH[DIR_M0M];
-            f[DIR_0PM]  = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM]- delf* WEIGTH[DIR_0PM];
-            f[DIR_0MM]  = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM]- delf* WEIGTH[DIR_0MM];
-            f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM]- delf* WEIGTH[DIR_PPM];
-            f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM]- delf* WEIGTH[DIR_MPM];
-            f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM]- delf* WEIGTH[DIR_PMM];
-            f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM]- delf* WEIGTH[DIR_MMM];
-
-            distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
-            distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
-            distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
-            distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
-            distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
-            distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
-            distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
-            distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
-            distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
-            break;
-        default:
-            UB_THROW(
-                UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
-    }
-}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp
deleted file mode 100644
index 34093b6a86833266b7c589ce1ed88252ba608892..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "SlipBCStrategy.h"
-#include "BoundaryConditions.h"
-#include "DistributionArray3D.h"
-
-SlipBCStrategy::SlipBCStrategy()
-{
-    BCStrategy::type         = BCStrategy::SlipBCStrategy;
-    BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-SlipBCStrategy::~SlipBCStrategy() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> SlipBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new SlipBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void SlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) { this->distributions = distributions; }
-//////////////////////////////////////////////////////////////////////////
-void SlipBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-    real f[D3Q27System::ENDF + 1];
-    real feq[D3Q27System::ENDF + 1];
-    distributions->getDistributionInv(f, x1, x2, x3);
-    real rho, vx1, vx2, vx3, drho;
-    calcMacrosFct(f, drho, vx1, vx2, vx3);
-    calcFeqFct(feq, drho, vx1, vx2, vx3);
-
-    UbTupleFloat3 normale = bcPtr->getNormalVector();
-    real amp            = vx1 * val<1>(normale) + vx2 * val<2>(normale) + vx3 * val<3>(normale);
-
-    vx1 = vx1 - amp * val<1>(normale); // normale zeigt von struktur weg!
-    vx2 = vx2 - amp * val<2>(normale); // normale zeigt von struktur weg!
-    vx3 = vx3 - amp * val<3>(normale); // normale zeigt von struktur weg!
-
-    rho = vf::basics::constant::c1o1 + drho * compressibleFactor;
-
-   for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-   {
-      if (bcPtr->hasSlipBoundaryFlag(fdir))
-      {
-         //quadratic bounce back
-         const int invDir = D3Q27System::INVDIR[fdir];
-         real q = bcPtr->getQ(invDir);// m+m q=0 stabiler
-         //vx3=0;
-         real velocity = vf::basics::constant::c0o1;
-         switch (invDir)
-         {
-         case DIR_P00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
-         case DIR_M00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
-         case DIR_0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
-         case DIR_0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
-         case DIR_00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
-         case DIR_00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
-         case DIR_PP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
-         case DIR_MM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
-         case DIR_PM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
-         case DIR_MP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
-         case DIR_P0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
-         case DIR_M0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
-         case DIR_P0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
-         case DIR_M0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
-         case DIR_0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
-         case DIR_0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
-         case DIR_0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
-         case DIR_0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
-         case DIR_PPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
-         case DIR_MMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
-         case DIR_PPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
-         case DIR_MMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
-         case DIR_PMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
-         case DIR_MPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
-         case DIR_PMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
-         case DIR_MPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
-         default: throw UbException(UB_EXARGS, "unknown error");
-         }
-         real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q));
-         distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-      }
-   }
-}
\ No newline at end of file
diff --git a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp
deleted file mode 100644
index 0145e633de3901f407e93b374eaad7380ffac772..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp
+++ /dev/null
@@ -1,305 +0,0 @@
-#include "BGKLBMKernel.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-#include "D3Q27EsoTwist3DSoA.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "Block3D.h"
-#include "basics/constants/NumericConstants.h"
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-BGKLBMKernel::BGKLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-BGKLBMKernel::~BGKLBMKernel(void) = default;
-//////////////////////////////////////////////////////////////////////////
-void BGKLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> BGKLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new BGKLBMKernel());
-    kernel->setNX(nx);
-    std::dynamic_pointer_cast<BGKLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactor(this->collFactor);
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-    kernel->setBlock(block.lock());
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void BGKLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
- //   using namespace UbMath;
-   using namespace vf::basics::constant;
-   using namespace vf::lbm::dir;
-
-    // initializing of forcing stuff
-    if (withForcing) {
-        muForcingX1.DefineVar("x1", &muX1);
-        muForcingX1.DefineVar("x2", &muX2);
-        muForcingX1.DefineVar("x3", &muX3);
-        muForcingX2.DefineVar("x1", &muX1);
-        muForcingX2.DefineVar("x2", &muX2);
-        muForcingX2.DefineVar("x3", &muX3);
-        muForcingX3.DefineVar("x1", &muX1);
-        muForcingX3.DefineVar("x2", &muX2);
-        muForcingX3.DefineVar("x3", &muX3);
-        forcingX1 = 0;
-        forcingX2 = 0;
-        forcingX3 = 0;
-    }
-    /////////////////////////////////////
-
-    localDistributions =
-        std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())
-                                ->getNonLocalDistributions();
-    zeroDistributions =
-        std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-    real f[D3Q27System::ENDF + 1];
-    real feq[D3Q27System::ENDF + 1];
-    real drho, vx1, vx2, vx3;
-    const int bcArrayMaxX1 = (int)bcArray->getNX1();
-    const int bcArrayMaxX2 = (int)bcArray->getNX2();
-    const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = bcArrayMaxX1 - ghostLayerWidth;
-    int maxX2 = bcArrayMaxX2 - ghostLayerWidth;
-    int maxX3 = bcArrayMaxX3 - ghostLayerWidth;
-
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-                    //////////////////////////////////////////////////////////////////////////
-                    // read distribution
-                    ////////////////////////////////////////////////////////////////////////////
-                    f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3);
-
-                    f[DIR_P00]   = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-                    f[DIR_0P0]   = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-                    f[DIR_00P]   = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-                    f[DIR_PP0]  = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-                    f[DIR_MP0]  = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-                    f[DIR_P0P]  = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-                    f[DIR_M0P]  = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-                    f[DIR_0PP]  = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-                    f[DIR_0MP]  = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-                    f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-                    f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    f[DIR_M00]   = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-                    f[DIR_0M0]   = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-                    f[DIR_00M]   = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-                    f[DIR_MM0]  = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    f[DIR_PM0]  = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-                    f[DIR_M0M]  = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    f[DIR_P0M]  = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-                    f[DIR_0MM]  = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    f[DIR_0PM]  = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-                    f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-                    //////////////////////////////////////////////////////////////////////////
-
-                    drho = f[DIR_000] + f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] + f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + f[DIR_MP0] + f[DIR_P0P] +
-                           f[DIR_M0M] + f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] +
-                           f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM];
-
-                    vx1 = f[DIR_P00] - f[DIR_M00] + f[DIR_PP0] - f[DIR_MM0] + f[DIR_PM0] - f[DIR_MP0] + f[DIR_P0P] - f[DIR_M0M] + f[DIR_P0M] - f[DIR_M0P] + f[DIR_PPP] -
-                          f[DIR_MMP] + f[DIR_PMP] - f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] + f[DIR_PMM] - f[DIR_MPM];
-
-                    vx2 = f[DIR_0P0] - f[DIR_0M0] + f[DIR_PP0] - f[DIR_MM0] - f[DIR_PM0] + f[DIR_MP0] + f[DIR_0PP] - f[DIR_0MM] + f[DIR_0PM] - f[DIR_0MP] + f[DIR_PPP] -
-                          f[DIR_MMP] - f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] + f[DIR_MPM];
-
-                    vx3 = f[DIR_00P] - f[DIR_00M] + f[DIR_P0P] - f[DIR_M0M] - f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] - f[DIR_0MM] - f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] +
-                          f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] - f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] - f[DIR_MPM];
-
-                    real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
-
-                    feq[DIR_000] = c8o27 * (drho - cu_sq);
-                    feq[DIR_P00]    = c2o27 * (drho + c3o1 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq);
-                    feq[DIR_M00]    = c2o27 * (drho + c3o1 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq);
-                    feq[DIR_0P0]    = c2o27 * (drho + c3o1 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq);
-                    feq[DIR_0M0]    = c2o27 * (drho + c3o1 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq);
-                    feq[DIR_00P]    = c2o27 * (drho + c3o1 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq);
-                    feq[DIR_00M]    = c2o27 * (drho + c3o1 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq);
-                    feq[DIR_PP0]   = c1o54 * (drho + c3o1 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
-                    feq[DIR_MM0]   = c1o54 * (drho + c3o1 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
-                    feq[DIR_PM0]   = c1o54 * (drho + c3o1 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
-                    feq[DIR_MP0]   = c1o54 * (drho + c3o1 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
-                    feq[DIR_P0P]   = c1o54 * (drho + c3o1 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
-                    feq[DIR_M0M]   = c1o54 * (drho + c3o1 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
-                    feq[DIR_P0M]   = c1o54 * (drho + c3o1 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
-                    feq[DIR_M0P]   = c1o54 * (drho + c3o1 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
-                    feq[DIR_0PP]   = c1o54 * (drho + c3o1 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
-                    feq[DIR_0MM]   = c1o54 * (drho + c3o1 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
-                    feq[DIR_0PM]   = c1o54 * (drho + c3o1 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
-                    feq[DIR_0MP]   = c1o54 * (drho + c3o1 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
-                    feq[DIR_PPP]  = c1o216 *
-                               (drho + c3o1 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
-                    feq[DIR_MMM] = c1o216 * (drho + c3o1 * (-vx1 - vx2 - vx3) +
-                                         c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
-                    feq[DIR_PPM] = c1o216 *
-                               (drho + c3o1 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
-                    feq[DIR_MMP] = c1o216 * (drho + c3o1 * (-vx1 - vx2 + vx3) +
-                                         c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
-                    feq[DIR_PMP] = c1o216 *
-                               (drho + c3o1 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
-                    feq[DIR_MPM] = c1o216 * (drho + c3o1 * (-vx1 + vx2 - vx3) +
-                                         c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
-                    feq[DIR_PMM] = c1o216 *
-                               (drho + c3o1 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
-                    feq[DIR_MPP] = c1o216 * (drho + c3o1 * (-vx1 + vx2 + vx3) +
-                                         c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
-
-                    // Relaxation
-                    f[DIR_000] += (feq[DIR_000] - f[DIR_000]) * collFactor;
-                    f[DIR_P00] += (feq[DIR_P00] - f[DIR_P00]) * collFactor;
-                    f[DIR_M00] += (feq[DIR_M00] - f[DIR_M00]) * collFactor;
-                    f[DIR_0P0] += (feq[DIR_0P0] - f[DIR_0P0]) * collFactor;
-                    f[DIR_0M0] += (feq[DIR_0M0] - f[DIR_0M0]) * collFactor;
-                    f[DIR_00P] += (feq[DIR_00P] - f[DIR_00P]) * collFactor;
-                    f[DIR_00M] += (feq[DIR_00M] - f[DIR_00M]) * collFactor;
-                    f[DIR_PP0] += (feq[DIR_PP0] - f[DIR_PP0]) * collFactor;
-                    f[DIR_MM0] += (feq[DIR_MM0] - f[DIR_MM0]) * collFactor;
-                    f[DIR_PM0] += (feq[DIR_PM0] - f[DIR_PM0]) * collFactor;
-                    f[DIR_MP0] += (feq[DIR_MP0] - f[DIR_MP0]) * collFactor;
-                    f[DIR_P0P] += (feq[DIR_P0P] - f[DIR_P0P]) * collFactor;
-                    f[DIR_M0M] += (feq[DIR_M0M] - f[DIR_M0M]) * collFactor;
-                    f[DIR_P0M] += (feq[DIR_P0M] - f[DIR_P0M]) * collFactor;
-                    f[DIR_M0P] += (feq[DIR_M0P] - f[DIR_M0P]) * collFactor;
-                    f[DIR_0PP] += (feq[DIR_0PP] - f[DIR_0PP]) * collFactor;
-                    f[DIR_0MM] += (feq[DIR_0MM] - f[DIR_0MM]) * collFactor;
-                    f[DIR_0PM] += (feq[DIR_0PM] - f[DIR_0PM]) * collFactor;
-                    f[DIR_0MP] += (feq[DIR_0MP] - f[DIR_0MP]) * collFactor;
-
-                    f[DIR_PPP] += (feq[DIR_PPP] - f[DIR_PPP]) * collFactor;
-                    f[DIR_MMM] += (feq[DIR_MMM] - f[DIR_MMM]) * collFactor;
-                    f[DIR_PPM] += (feq[DIR_PPM] - f[DIR_PPM]) * collFactor;
-                    f[DIR_MMP] += (feq[DIR_MMP] - f[DIR_MMP]) * collFactor;
-                    f[DIR_PMP] += (feq[DIR_PMP] - f[DIR_PMP]) * collFactor;
-                    f[DIR_MPM] += (feq[DIR_MPM] - f[DIR_MPM]) * collFactor;
-                    f[DIR_PMM] += (feq[DIR_PMM] - f[DIR_PMM]) * collFactor;
-                    f[DIR_MPP] += (feq[DIR_MPP] - f[DIR_MPP]) * collFactor;
-
-                    //////////////////////////////////////////////////////////////////////////
-                    // forcing
-                    if (withForcing) {
-                        muX1 = x1 + ix1 * bcArrayMaxX1;
-                        muX2 = x2 + ix2 * bcArrayMaxX2;
-                        muX3 = x3 + ix3 * bcArrayMaxX3;
-
-                        forcingX1 = muForcingX1.Eval();
-                        forcingX2 = muForcingX2.Eval();
-                        forcingX3 = muForcingX3.Eval();
-
-                        f[DIR_000] += c0o1;
-                        f[DIR_P00] += c3o1 * c2o27 * (forcingX1);
-                        f[DIR_M00] += c3o1 * c2o27 * (-forcingX1);
-                        f[DIR_0P0] += c3o1 * c2o27 * (forcingX2);
-                        f[DIR_0M0] += c3o1 * c2o27 * (-forcingX2);
-                        f[DIR_00P] += c3o1 * c2o27 * (forcingX3);
-                        f[DIR_00M] += c3o1 * c2o27 * (-forcingX3);
-                        f[DIR_PP0] += c3o1 * c1o54 * (forcingX1 + forcingX2);
-                        f[DIR_MM0] += c3o1 * c1o54 * (-forcingX1 - forcingX2);
-                        f[DIR_PM0] += c3o1 * c1o54 * (forcingX1 - forcingX2);
-                        f[DIR_MP0] += c3o1 * c1o54 * (-forcingX1 + forcingX2);
-                        f[DIR_P0P] += c3o1 * c1o54 * (forcingX1 + forcingX3);
-                        f[DIR_M0M] += c3o1 * c1o54 * (-forcingX1 - forcingX3);
-                        f[DIR_P0M] += c3o1 * c1o54 * (forcingX1 - forcingX3);
-                        f[DIR_M0P] += c3o1 * c1o54 * (-forcingX1 + forcingX3);
-                        f[DIR_0PP] += c3o1 * c1o54 * (forcingX2 + forcingX3);
-                        f[DIR_0MM] += c3o1 * c1o54 * (-forcingX2 - forcingX3);
-                        f[DIR_0PM] += c3o1 * c1o54 * (forcingX2 - forcingX3);
-                        f[DIR_0MP] += c3o1 * c1o54 * (-forcingX2 + forcingX3);
-                        f[DIR_PPP] += c3o1 * c1o216 * (forcingX1 + forcingX2 + forcingX3);
-                        f[DIR_MMM] += c3o1 * c1o216 * (-forcingX1 - forcingX2 - forcingX3);
-                        f[DIR_PPM] += c3o1 * c1o216 * (forcingX1 + forcingX2 - forcingX3);
-                        f[DIR_MMP] += c3o1 * c1o216 * (-forcingX1 - forcingX2 + forcingX3);
-                        f[DIR_PMP] += c3o1 * c1o216 * (forcingX1 - forcingX2 + forcingX3);
-                        f[DIR_MPM] += c3o1 * c1o216 * (-forcingX1 + forcingX2 - forcingX3);
-                        f[DIR_PMM] += c3o1 * c1o216 * (forcingX1 - forcingX2 - forcingX3);
-                        f[DIR_MPP] += c3o1 * c1o216 * (-forcingX1 + forcingX2 + forcingX3);
-                    }
-                    //////////////////////////////////////////////////////////////////////////
-#ifdef PROOF_CORRECTNESS
-                    real rho_post = f[DIR_000] + f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] + f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] +
-                                       f[DIR_MP0] + f[DIR_P0P] + f[DIR_M0M] + f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] +
-                                       f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM];
-                    real dif = drho - rho_post;
-#ifdef SINGLEPRECISION
-                    if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-                    if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-                    {
-                      UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(rho_post)
-                         +" dif="+UbSystem::toString(dif)
-                         +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)
-                         +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step)));
-                    }
-#endif
-                    //////////////////////////////////////////////////////////////////////////
-                    // write distribution
-                    //////////////////////////////////////////////////////////////////////////
-                    (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3)     = f[INV_P00];
-                    (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3)     = f[INV_0P0];
-                    (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3)     = f[INV_00P];
-                    (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3)    = f[INV_PP0];
-                    (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3)   = f[INV_MP0];
-                    (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3)    = f[INV_P0P];
-                    (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3)   = f[INV_M0P];
-                    (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3)    = f[INV_0PP];
-                    (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3)   = f[INV_0MP];
-                    (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3)   = f[INV_PPP];
-                    (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3)  = f[INV_MPP];
-                    (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3)  = f[INV_PMP];
-                    (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[INV_MMP];
-
-                    (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3)     = f[INV_M00];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3)     = f[INV_0M0];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p)     = f[INV_00M];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3)   = f[INV_MM0];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3)    = f[INV_PM0];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p)   = f[INV_M0M];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p)    = f[INV_P0M];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p)   = f[INV_0MM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p)    = f[INV_0PM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[INV_MMM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p)  = f[INV_PMM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p)  = f[INV_MPM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p)   = f[INV_PPM];
-
-                    (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000];
-                    //////////////////////////////////////////////////////////////////////////
-                }
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-real BGKLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; }
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp
deleted file mode 100644
index 318b8cc037581a2239d0a1a487d70afdcd2d8685..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp
+++ /dev/null
@@ -1,303 +0,0 @@
-#include "LBMKernelETD3Q27BGK.h"
-#include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27EsoTwist3DSoA.h"
-#include "DataSet3D.h"
-#include "BCSet.h"
-#include "BCArray3D.h"
-#include "basics/constants/NumericConstants.h"
-
-using namespace vf::basics::constant;
-//using namespace UbMath;
-
-//#define PROOF_CORRECTNESS
-
-
-//////////////////////////////////////////////////////////////////////////
-LBMKernelETD3Q27BGK::LBMKernelETD3Q27BGK() 
-{
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-LBMKernelETD3Q27BGK::~LBMKernelETD3Q27BGK(void)
-= default;
-//////////////////////////////////////////////////////////////////////////
-void LBMKernelETD3Q27BGK::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
-   dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> LBMKernelETD3Q27BGK::clone()
-{
-   SPtr<LBMKernel> kernel(new LBMKernelETD3Q27BGK());
-   std::dynamic_pointer_cast<LBMKernelETD3Q27BGK>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void LBMKernelETD3Q27BGK::calculate(int  /*step*/)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   //initializing of forcing stuff 
-   if (withForcing)
-   {
-      muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3);
-      muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3);
-      muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3);
-      forcingX1 = c0o1;
-      forcingX2 = c0o1;
-      forcingX3 = c0o1;
-   }
-   /////////////////////////////////////
-
-   localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-   real f[D3Q27System::ENDF+1];
-   real feq[D3Q27System::ENDF+1];
-   real drho,vx1,vx2,vx3;
-   const int bcArrayMaxX1 = (int)bcArray->getNX1();
-   const int bcArrayMaxX2 = (int)bcArray->getNX2();
-   const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-   int minX1 = ghostLayerWidth;
-   int minX2 = ghostLayerWidth;
-   int minX3 = ghostLayerWidth;
-   int maxX1 = bcArrayMaxX1-ghostLayerWidth;
-   int maxX2 = bcArrayMaxX2-ghostLayerWidth;
-   int maxX3 = bcArrayMaxX3-ghostLayerWidth;
-
-   for(int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for(int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for(int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-               //////////////////////////////////////////////////////////////////////////
-               //read distribution
-               ////////////////////////////////////////////////////////////////////////////
-               f[DIR_000] = (*this->zeroDistributions)(x1,x2,x3);
-
-               f[DIR_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3);
-               f[DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3);
-               f[DIR_00P] = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3);
-               f[DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3);
-               f[DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3);
-               f[DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3);
-               f[DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3);
-               f[DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3);
-               f[DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3);
-               f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3);
-               f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3);
-               f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3);
-               f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-               f[DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3  );
-               f[DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3  );
-               f[DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p  );
-               f[DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 );
-               f[DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 );
-               f[DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p );
-               f[DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p );
-               f[DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p );
-               f[DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p );
-               f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-               f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p);
-               f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p);
-               f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p);
-               //////////////////////////////////////////////////////////////////////////
-
-               drho = f[DIR_000] + f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M]
-               + f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + f[DIR_MP0] + f[DIR_P0P] + f[DIR_M0M] + f[DIR_P0M]
-               + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] + f[DIR_MMP]
-               + f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM];
-
-               vx1 = f[DIR_P00] - f[DIR_M00] + f[DIR_PP0] - f[DIR_MM0] + f[DIR_PM0] - f[DIR_MP0] + f[DIR_P0P] - f[DIR_M0M]
-               + f[DIR_P0M] - f[DIR_M0P] + f[DIR_PPP] - f[DIR_MMP] + f[DIR_PMP] - f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM]
-               + f[DIR_PMM] - f[DIR_MPM]; 
-
-               vx2 = f[DIR_0P0] - f[DIR_0M0] + f[DIR_PP0] - f[DIR_MM0] - f[DIR_PM0] + f[DIR_MP0] + f[DIR_0PP] - f[DIR_0MM] + f[DIR_0PM]
-               - f[DIR_0MP] + f[DIR_PPP] - f[DIR_MMP] - f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] 
-               + f[DIR_MPM]; 
-
-               vx3 = f[DIR_00P] - f[DIR_00M] + f[DIR_P0P] - f[DIR_M0M] - f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] - f[DIR_0MM] - f[DIR_0PM]
-               + f[DIR_0MP] + f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] - f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] 
-               - f[DIR_MPM];
-
-               real cu_sq= c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-               feq[DIR_000] =  c8o27*(drho-cu_sq);
-               feq[DIR_P00] =  c2o27*(drho+c3o1*( vx1   )+c9o2*( vx1   )*( vx1   )-cu_sq);
-               feq[DIR_M00] =  c2o27*(drho+c3o1*(-vx1   )+c9o2*(-vx1   )*(-vx1   )-cu_sq);
-               feq[DIR_0P0] =  c2o27*(drho+c3o1*(    vx2)+c9o2*(    vx2)*(    vx2)-cu_sq);
-               feq[DIR_0M0] =  c2o27*(drho+c3o1*(   -vx2)+c9o2*(   -vx2)*(   -vx2)-cu_sq);
-               feq[DIR_00P] =  c2o27*(drho+c3o1*( vx3   )+c9o2*(    vx3)*(    vx3)-cu_sq);
-               feq[DIR_00M] =  c2o27*(drho+c3o1*(   -vx3)+c9o2*(   -vx3)*(   -vx3)-cu_sq);
-               feq[DIR_PP0] = c1o54*(drho+c3o1*( vx1+vx2)+c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq);
-               feq[DIR_MM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
-               feq[DIR_PM0] = c1o54*(drho+c3o1*( vx1-vx2)+c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq);
-               feq[DIR_MP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
-               feq[DIR_P0P] = c1o54*(drho+c3o1*( vx1+vx3)+c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq);
-               feq[DIR_M0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
-               feq[DIR_P0M] = c1o54*(drho+c3o1*( vx1-vx3)+c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq);
-               feq[DIR_M0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
-               feq[DIR_0PP] = c1o54*(drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq);
-               feq[DIR_0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
-               feq[DIR_0PM] = c1o54*(drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq);
-               feq[DIR_0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
-               feq[DIR_PPP]= c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-               feq[DIR_MMM]= c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-               feq[DIR_PPM]= c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-               feq[DIR_MMP]= c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-               feq[DIR_PMP]= c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-               feq[DIR_MPM]= c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-               feq[DIR_PMM]= c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-               feq[DIR_MPP]= c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-
-               //Relaxation
-               f[DIR_000] += (feq[DIR_000]-f[DIR_000])*collFactor;
-               f[DIR_P00] += (feq[DIR_P00]-f[DIR_P00])*collFactor;
-               f[DIR_M00] += (feq[DIR_M00]-f[DIR_M00])*collFactor;
-               f[DIR_0P0] += (feq[DIR_0P0]-f[DIR_0P0])*collFactor;
-               f[DIR_0M0] += (feq[DIR_0M0]-f[DIR_0M0])*collFactor;
-               f[DIR_00P] += (feq[DIR_00P]-f[DIR_00P])*collFactor;
-               f[DIR_00M] += (feq[DIR_00M]-f[DIR_00M])*collFactor;
-               f[DIR_PP0] += (feq[DIR_PP0]-f[DIR_PP0])*collFactor;
-               f[DIR_MM0] += (feq[DIR_MM0]-f[DIR_MM0])*collFactor;
-               f[DIR_PM0] += (feq[DIR_PM0]-f[DIR_PM0])*collFactor;
-               f[DIR_MP0] += (feq[DIR_MP0]-f[DIR_MP0])*collFactor;
-               f[DIR_P0P] += (feq[DIR_P0P]-f[DIR_P0P])*collFactor;
-               f[DIR_M0M] += (feq[DIR_M0M]-f[DIR_M0M])*collFactor;
-               f[DIR_P0M] += (feq[DIR_P0M]-f[DIR_P0M])*collFactor;
-               f[DIR_M0P] += (feq[DIR_M0P]-f[DIR_M0P])*collFactor;
-               f[DIR_0PP] += (feq[DIR_0PP]-f[DIR_0PP])*collFactor;
-               f[DIR_0MM] += (feq[DIR_0MM]-f[DIR_0MM])*collFactor;
-               f[DIR_0PM] += (feq[DIR_0PM]-f[DIR_0PM])*collFactor;
-               f[DIR_0MP] += (feq[DIR_0MP]-f[DIR_0MP])*collFactor;
-
-               f[DIR_PPP] += (feq[DIR_PPP]-f[DIR_PPP])*collFactor;
-               f[DIR_MMM] += (feq[DIR_MMM]-f[DIR_MMM])*collFactor;
-               f[DIR_PPM] += (feq[DIR_PPM]-f[DIR_PPM])*collFactor;
-               f[DIR_MMP] += (feq[DIR_MMP]-f[DIR_MMP])*collFactor;
-               f[DIR_PMP] += (feq[DIR_PMP]-f[DIR_PMP])*collFactor;
-               f[DIR_MPM] += (feq[DIR_MPM]-f[DIR_MPM])*collFactor;
-               f[DIR_PMM] += (feq[DIR_PMM]-f[DIR_PMM])*collFactor;
-               f[DIR_MPP] += (feq[DIR_MPP]-f[DIR_MPP])*collFactor;
-
-               //////////////////////////////////////////////////////////////////////////
-               //forcing
-               if (withForcing)
-               {
-                  muX1 = x1+ix1*bcArrayMaxX1;
-                  muX2 = x2+ix2*bcArrayMaxX2;
-                  muX3 = x3+ix3*bcArrayMaxX3;
-
-                  forcingX1 = muForcingX1.Eval();
-                  forcingX2 = muForcingX2.Eval();
-                  forcingX3 = muForcingX3.Eval();
-
-                  f[DIR_000] += c0o1;
-                  f[DIR_P00] +=  c3o1*c2o27  *  (forcingX1)                    ;
-                  f[DIR_M00] +=  c3o1*c2o27  *  (-forcingX1)                   ;
-                  f[DIR_0P0] +=  c3o1*c2o27  *             (forcingX2)         ;
-                  f[DIR_0M0] +=  c3o1*c2o27  *             (-forcingX2)        ;
-                  f[DIR_00P] +=  c3o1*c2o27  *                     (forcingX3) ;
-                  f[DIR_00M] +=  c3o1*c2o27  *                     (-forcingX3);
-                  f[DIR_PP0] +=  c3o1*c1o54 * ( forcingX1+forcingX2          ) ;
-                  f[DIR_MM0 ] +=  c3o1*c1o54 * (-forcingX1-forcingX2          ) ;
-                  f[DIR_PM0 ] +=  c3o1*c1o54 * ( forcingX1-forcingX2          ) ;
-                  f[DIR_MP0 ] +=  c3o1*c1o54 * (-forcingX1+forcingX2          ) ;
-                  f[DIR_P0P ] +=  c3o1*c1o54 * ( forcingX1          +forcingX3) ;
-                  f[DIR_M0M ] +=  c3o1*c1o54 * (-forcingX1          -forcingX3) ;
-                  f[DIR_P0M ] +=  c3o1*c1o54 * ( forcingX1          -forcingX3) ;
-                  f[DIR_M0P ] +=  c3o1*c1o54 * (-forcingX1          +forcingX3) ;
-                  f[DIR_0PP ] +=  c3o1*c1o54 * (           forcingX2+forcingX3) ;
-                  f[DIR_0MM ] +=  c3o1*c1o54 * (          -forcingX2-forcingX3) ;
-                  f[DIR_0PM ] +=  c3o1*c1o54 * (           forcingX2-forcingX3) ;
-                  f[DIR_0MP ] +=  c3o1*c1o54 * (          -forcingX2+forcingX3) ;
-                  f[DIR_PPP] +=  c3o1*c1o216* ( forcingX1+forcingX2+forcingX3) ;
-                  f[DIR_MMM] +=  c3o1*c1o216* (-forcingX1-forcingX2-forcingX3) ;
-                  f[DIR_PPM] +=  c3o1*c1o216* ( forcingX1+forcingX2-forcingX3) ;
-                  f[DIR_MMP] +=  c3o1*c1o216* (-forcingX1-forcingX2+forcingX3) ;
-                  f[DIR_PMP] +=  c3o1*c1o216* ( forcingX1-forcingX2+forcingX3) ;
-                  f[DIR_MPM] +=  c3o1*c1o216* (-forcingX1+forcingX2-forcingX3) ;
-                  f[DIR_PMM] +=  c3o1*c1o216* ( forcingX1-forcingX2-forcingX3) ;
-                  f[DIR_MPP] +=  c3o1*c1o216* (-forcingX1+forcingX2+forcingX3) ;
-               }
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-               real rho_post = f[REST] + f[DIR_P00] + 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];
-               real dif = drho - rho_post;
-#ifdef SINGLEPRECISION
-               if(dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if(dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-                  UB_THROW(UbException(UB_EXARGS,"rho is not correct"));
-               }
-#endif
-               //////////////////////////////////////////////////////////////////////////
-               //write distribution
-               //////////////////////////////////////////////////////////////////////////
-               (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[INV_P00];
-               (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[INV_0P0];
-               (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[INV_00P];
-               (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[INV_PP0];
-               (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,  x3) = f[INV_MP0];
-               (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[INV_P0P];
-               (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2,  x3) = f[INV_M0P];
-               (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[INV_0PP];
-               (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2p,x3) = f[INV_0MP];
-               (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[INV_PPP];
-               (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,  x3) = f[INV_MPP];
-               (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2p,x3) = f[INV_PMP];
-               (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = f[INV_MMP];
-
-               (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,  x3    ) = f[INV_M00 ];
-               (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2p,x3    ) = f[INV_0M0 ];
-               (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3p  ) = f[INV_00M ];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3   ) = f[INV_MM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2p,x3   ) = f[INV_PM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,  x3p ) = f[INV_M0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3p ) = f[INV_P0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2p,x3p ) = f[INV_0MM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3p ) = f[INV_0PM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = f[INV_MMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2p,x3p) = f[INV_PMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,  x3p) = f[INV_MPM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3p) = f[INV_PPM];
-
-               (*this->zeroDistributions)(x1,x2,x3) = f[DIR_000];
-               //////////////////////////////////////////////////////////////////////////
-
-
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-real LBMKernelETD3Q27BGK::getCalculationTime()
-{
-   return c0o1;
-}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h b/src/cpu/core/BoundaryConditions/BC.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h
rename to src/cpu/core/BoundaryConditions/BC.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp b/src/cpu/core/BoundaryConditions/BCArray3D.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp
rename to src/cpu/core/BoundaryConditions/BCArray3D.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.h b/src/cpu/core/BoundaryConditions/BCArray3D.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.h
rename to src/cpu/core/BoundaryConditions/BCArray3D.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.cpp b/src/cpu/core/BoundaryConditions/BCFunction.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.cpp
rename to src/cpu/core/BoundaryConditions/BCFunction.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.h b/src/cpu/core/BoundaryConditions/BCFunction.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.h
rename to src/cpu/core/BoundaryConditions/BCFunction.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.cpp b/src/cpu/core/BoundaryConditions/BCSet.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.cpp
rename to src/cpu/core/BoundaryConditions/BCSet.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.h b/src/cpu/core/BoundaryConditions/BCSet.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.h
rename to src/cpu/core/BoundaryConditions/BCSet.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp b/src/cpu/core/BoundaryConditions/BCStrategy.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/BCStrategy.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h b/src/cpu/core/BoundaryConditions/BCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h
rename to src/cpu/core/BoundaryConditions/BCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp b/src/cpu/core/BoundaryConditions/BoundaryConditions.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp
rename to src/cpu/core/BoundaryConditions/BoundaryConditions.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/core/BoundaryConditions/BoundaryConditions.h
similarity index 95%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
rename to src/cpu/core/BoundaryConditions/BoundaryConditions.h
index 92cfb6f3cbf347eee7e8fec95c27d7a5646db3b5..df5be0429d4f850f3c1caa2c411a586a020e51e7 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
+++ b/src/cpu/core/BoundaryConditions/BoundaryConditions.h
@@ -196,59 +196,59 @@ public:
         using namespace vf::lbm::dir;
 
         switch (direction) {
-            case DIR_P00:
+            case dP00:
                 return (float)(vf::basics::constant::c4o9 *
                                (+bcVelocityX1)); //(2/cs^2)(=6)*rho_0(=1 bei inkompr)*wi*u*ei mit cs=1/sqrt(3)
-            case DIR_M00:
+            case dM00:
                 return (float)(vf::basics::constant::c4o9 *
                                (-bcVelocityX1)); // z.B. aus paper manfred MRT LB models in three dimensions (2002)
-            case DIR_0P0:
+            case d0P0:
                 return (float)(vf::basics::constant::c4o9 * (+bcVelocityX2));
-            case DIR_0M0:
+            case d0M0:
                 return (float)(vf::basics::constant::c4o9 * (-bcVelocityX2));
-            case DIR_00P:
+            case d00P:
                 return (float)(vf::basics::constant::c4o9 * (+bcVelocityX3));
-            case DIR_00M:
+            case d00M:
                 return (float)(vf::basics::constant::c4o9 * (-bcVelocityX3));
-            case DIR_PP0:
+            case dPP0:
                 return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX2));
-            case DIR_MM0:
+            case dMM0:
                 return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX2));
-            case DIR_PM0:
+            case dPM0:
                 return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX2));
-            case DIR_MP0:
+            case dMP0:
                 return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX2));
-            case DIR_P0P:
+            case dP0P:
                 return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX3));
-            case DIR_M0M:
+            case dM0M:
                 return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX3));
-            case DIR_P0M:
+            case dP0M:
                 return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX3));
-            case DIR_M0P:
+            case dM0P:
                 return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX3));
-            case DIR_0PP:
+            case d0PP:
                 return (float)(vf::basics::constant::c1o9 * (+bcVelocityX2 + bcVelocityX3));
-            case DIR_0MM:
+            case d0MM:
                 return (float)(vf::basics::constant::c1o9 * (-bcVelocityX2 - bcVelocityX3));
-            case DIR_0PM:
+            case d0PM:
                 return (float)(vf::basics::constant::c1o9 * (+bcVelocityX2 - bcVelocityX3));
-            case DIR_0MP:
+            case d0MP:
                 return (float)(vf::basics::constant::c1o9 * (-bcVelocityX2 + bcVelocityX3));
-            case DIR_PPP:
+            case dPPP:
                 return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
-            case DIR_MMM:
+            case dMMM:
                 return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
-            case DIR_PPM:
+            case dPPM:
                 return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
-            case DIR_MMP:
+            case dMMP:
                 return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
-            case DIR_PMP:
+            case dPMP:
                 return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
-            case DIR_MPM:
+            case dMPM:
                 return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
-            case DIR_PMM:
+            case dPMM:
                 return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
-            case DIR_MPP:
+            case dMPP:
                 return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
             default:
                 throw UbException(UB_EXARGS, "unknown error");
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp b/src/cpu/core/BoundaryConditions/DensityBC.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp
rename to src/cpu/core/BoundaryConditions/DensityBC.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.h b/src/cpu/core/BoundaryConditions/DensityBC.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.h
rename to src/cpu/core/BoundaryConditions/DensityBC.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp
similarity index 88%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp
index 77a4601ea352efe1b25c9c509077f533e44f63dd..89dd9a09468102f0845b18f2a14919741c9b0e1d 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp
@@ -59,23 +59,23 @@ void EqDensityBCStrategy::applyBC()
 
     real f[D3Q27System::ENDF + 1];
 
-    distributions->getDistributionInv(f, x1, x2, x3);
+    distributions->getPostCollisionDistribution(f, x1, x2, x3);
     int nx1 = x1;
     int nx2 = x2;
     int nx3 = x3;
 
     // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) {
+    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
         nx1 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
         nx1 += 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
         nx2 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
         nx2 += 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
         nx3 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
         nx3 += 1;
     } else
         UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
@@ -87,7 +87,7 @@ void EqDensityBCStrategy::applyBC()
         if (bcPtr->hasDensityBoundaryFlag(fdir)) {
             // Ehsan: 15.2.2013:
             real ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3);
-            distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
+            distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
         }
     }
 }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
similarity index 95%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
index cb8deaa00b7cf0f38095cef86f72b71656a4cac3..85d9fda90b69f68d8703b4835e10a0367fe91d29 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
@@ -57,7 +57,7 @@ void HighViscosityNoSlipBCStrategy::applyBC()
 {
     real f[D3Q27System::ENDF + 1];
     real feq[D3Q27System::ENDF + 1];
-    distributions->getDistribution(f, x1, x2, x3);
+    distributions->getPreCollisionDistribution(f, x1, x2, x3);
     real rho, vx1, vx2, vx3;
     calcMacrosFct(f, rho, vx1, vx2, vx3);
     calcFeqFct(feq, rho, vx1, vx2, vx3);
@@ -70,7 +70,7 @@ void HighViscosityNoSlipBCStrategy::applyBC()
             real fReturn =
                 (f[invDir] + q * f[fDir] + q * collFactor * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) /
                 (vf::basics::constant::c1o1 + q);
-            distributions->setDistributionInvForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
+            distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
                                                           x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir],
                                                           invDir);
         }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.cpp b/src/cpu/core/BoundaryConditions/NoSlipBC.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.cpp
rename to src/cpu/core/BoundaryConditions/NoSlipBC.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h b/src/cpu/core/BoundaryConditions/NoSlipBC.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h
rename to src/cpu/core/BoundaryConditions/NoSlipBC.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp
similarity index 94%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp
index bb98e499421328abc36f8911a14bcb8c90ebabd1..3fd5e214302af1cd7729fdddcdbd077ff826503e 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp
@@ -58,7 +58,7 @@ void NoSlipBCStrategy::applyBC()
     using namespace D3Q27System;
     real f[ENDF + 1];
     real feq[ENDF + 1];
-    distributions->getDistributionInv(f, x1, x2, x3);
+    distributions->getPostCollisionDistribution(f, x1, x2, x3);
     real rho, vx1, vx2, vx3;
     calcMacrosFct(f, rho, vx1, vx2, vx3);
     calcFeqFct(feq, rho, vx1, vx2, vx3);
@@ -69,7 +69,7 @@ void NoSlipBCStrategy::applyBC()
             const int invDir = INVDIR[fdir];
             real q = bcPtr->getQ(invDir);
             real fReturn = ((c1o1 - q) / (c1o1 + q)) * ((f[invDir] - feq[invDir]) / (c1o1 - collFactor) + feq[invDir]) + ((q / (c1o1 + q)) * (f[invDir] + f[fdir]));
-            distributions->setDistributionForDirection(fReturn, x1 + DX1[invDir], x2 + DX2[invDir], x3 + DX3[invDir], fdir);
+            distributions->setPostCollisionDistributionForDirection(fReturn, x1 + DX1[invDir], x2 + DX2[invDir], x3 + DX3[invDir], fdir);
         }
     }
 }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp
similarity index 89%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp
index d3f44c6ff7ce9d8acf913a8cebd3e42800b7a571..d1c4e43ca7005dae4072a3d134052da8090c41d8 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp
@@ -59,23 +59,23 @@ void NonEqDensityBCStrategy::applyBC()
     using namespace vf::lbm::dir;
 
     real f[D3Q27System::ENDF + 1];
-    distributions->getDistributionInv(f, x1, x2, x3);
+    distributions->getPostCollisionDistribution(f, x1, x2, x3);
     int nx1 = x1;
     int nx2 = x2;
     int nx3 = x3;
 
     // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) {
+    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
         nx1 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
         nx1 += 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
         nx2 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
         nx2 += 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
         nx3 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) {
+    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
         nx3 += 1;
     } else
         return; // UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
@@ -94,7 +94,7 @@ void NonEqDensityBCStrategy::applyBC()
             real ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3);
             // rhoBC=(rho>rhoBC)? rhoBC : rho; //Limiter 08.08.2018
             ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp;
-            distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
+            distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
         }
     }
 }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d84a8fac2874a93d520b6f7dda86fb9554988145
--- /dev/null
+++ b/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp
@@ -0,0 +1,341 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 NonReflectingInflowBCStrategy.cpp
+//! \ingroup BoundarConditions
+//! \author Hussein Alihussein
+//=======================================================================================
+#include "NonReflectingInflowBCStrategy.h"
+
+#include "BoundaryConditions.h"
+#include "D3Q27System.h"
+#include "DistributionArray3D.h"
+
+NonReflectingInflowBCStrategy::NonReflectingInflowBCStrategy()
+{
+    BCStrategy::type         = BCStrategy::NonReflectingInflowBCStrategy;
+    BCStrategy::preCollision = true;
+}
+//////////////////////////////////////////////////////////////////////////
+NonReflectingInflowBCStrategy::~NonReflectingInflowBCStrategy() = default;
+//////////////////////////////////////////////////////////////////////////
+SPtr<BCStrategy> NonReflectingInflowBCStrategy::clone()
+{
+    SPtr<BCStrategy> bc(new NonReflectingInflowBCStrategy());
+    return bc;
+}
+//////////////////////////////////////////////////////////////////////////
+void NonReflectingInflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+{
+    this->distributions = distributions;
+}
+//////////////////////////////////////////////////////////////////////////
+void NonReflectingInflowBCStrategy::applyBC()
+{
+    using namespace vf::lbm::dir;
+    using namespace D3Q27System;
+ //   using namespace UbMath;
+    using namespace vf::basics::constant;
+
+    LBMReal f[ENDF + 1];
+    LBMReal ftemp[ENDF + 1];
+
+    int nx1       = x1;
+    int nx2       = x2;
+    int nx3       = x3;
+    int direction = -1;
+
+    // flag points in direction of fluid
+    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
+        nx1 += 1;
+        direction = dP00;
+    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
+        nx1 -= 1;
+        direction = dM00;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
+        nx2 += 1;
+        direction = d0P0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
+        nx2 -= 1;
+        direction = d0M0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
+        nx3 += 1;
+        direction = d00P;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
+        nx3 -= 1;
+        direction = d00M;
+    } else
+        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
+
+    distributions->getPreCollisionDistribution(f, x1, x2, x3);
+    distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
+
+    LBMReal rho, vx1, vx2, vx3;
+    calcMacrosFct(f, rho, vx1, vx2, vx3);
+    //vx1                  = 0.;
+    LBMReal BCVeloWeight = c1o2;
+    // LBMReal velocity     = 0.004814077025232405; 
+     // LBMReal velocity     = 0.00057735;
+    //LBMReal velocity = 0.04; 
+      // LBMReal velocity = 0.01; 
+     // LBMReal velocity = 1./112.; 
+    // LBMReal velocity = 1./126.; 
+     LBMReal velocity = c1o100/2;
+     // LBMReal velocity = 0.005; 
+    //LBMReal delf         =(-velocity+vx1)*0.5 ;
+    LBMReal delf; 
+
+    switch (direction) {
+        case dP00:
+            delf = (-velocity + vx1) * BCVeloWeight; 
+            // delf = (-velocity ) * BCVeloWeight;
+            f[dP00]   = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00] - delf* WEIGTH[dP00];
+            f[dPP0]  = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]- delf* WEIGTH[dPP0];
+            f[dPM0]  = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]- delf* WEIGTH[dPM0];
+            f[dP0P]  = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]- delf* WEIGTH[dP0P];
+            f[dP0M]  = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]- delf* WEIGTH[dP0M];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]- delf* WEIGTH[dPPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]- delf* WEIGTH[dPMP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]- delf* WEIGTH[dPPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]- delf* WEIGTH[dPMM];
+            //f[dP00] = (ftemp[dP00] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dP00]) *
+            //           (1 - BCVeloWeight) +
+            //       (ftemp[dM00] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dM00] +
+            //       velocity*(6)*WEIGTH[dP00]/* bcPtr->getBoundaryVelocity(INVDIR[dM00])*/) *
+            //           (BCVeloWeight)  ;
+            //f[dPP0] = (ftemp[dPP0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPP0]) *
+            //            (1 - BCVeloWeight) +
+            //        (ftemp[dMM0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMM0] +
+            //         velocity * (6) * WEIGTH[dPP0] /*bcPtr->getBoundaryVelocity(INVDIR[dMM0])*/) *
+            //            (BCVeloWeight); 
+            //f[dPM0] = (ftemp[dPM0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPM0]) *
+            //            (1 - BCVeloWeight) +
+            //        (ftemp[dMP0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMP0] +
+            //        velocity*(6)*WEIGTH[dPP0]/* bcPtr->getBoundaryVelocity(INVDIR[dMP0])*/) *
+            //            (BCVeloWeight); 
+            //f[dP0P] = (ftemp[dP0P] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dP0P]) *
+            //            (1 - BCVeloWeight) +
+            //        (ftemp[dM0M] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dM0M] +
+            //        velocity*(6)*WEIGTH[dP0P]/* bcPtr->getBoundaryVelocity(INVDIR[dM0M])*/) *
+            //            (BCVeloWeight); 
+            //f[dP0M] = (ftemp[dP0M] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dP0M])*
+            //            (1 - BCVeloWeight) +
+            //        (ftemp[dM0P] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dM0P] +
+            //        velocity*(6)*WEIGTH[dP0M]/* bcPtr->getBoundaryVelocity(INVDIR[dM0P])*/) *
+            //            (BCVeloWeight); 
+            //f[dPPP] = (ftemp[dPPP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPPP])*
+            //            (1 - BCVeloWeight) +
+            //        (ftemp[dMMM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMMM] +
+            //     velocity * (6) * WEIGTH[dPPP] /* bcPtr->getBoundaryVelocity(INVDIR[dMMM])*/) *
+            //            (BCVeloWeight); 
+            //f[dPMP] = (ftemp[dPMP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPMP]) *
+            //             (1 - BCVeloWeight) +
+            //         (ftemp[dMPM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMPM] +
+            //     velocity * (6) * WEIGTH[dPPP] /*bcPtr->getBoundaryVelocity(INVDIR[dMPM])*/) *
+            //             (BCVeloWeight); 
+            //f[dPPM] = (ftemp[dPPM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPPM]) *
+            //             (1 - BCVeloWeight) +
+            //         (ftemp[dMMP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMMP] +
+            //     velocity * (6) * WEIGTH[dPPP] /* bcPtr->getBoundaryVelocity(INVDIR[dMMP])*/) *
+            //             (BCVeloWeight); 
+            //f[dPMM] = (ftemp[dPMM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPMM]) *
+            //             (1 - BCVeloWeight) +
+            //         (ftemp[dMPP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMPP] +
+            //     velocity * (6) * WEIGTH[dPPP] /* bcPtr->getBoundaryVelocity(INVDIR[dMPP])*/) *
+            //             (BCVeloWeight); 
+
+            distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            break;
+        case dM00:
+            delf = (-velocity - vx1) * BCVeloWeight;
+            f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00] -
+                   delf * WEIGTH[dM00];
+            f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0] -
+                    delf * WEIGTH[dMP0];
+            f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0] -
+                    delf * WEIGTH[dMM0];
+            f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P] -
+                    delf * WEIGTH[dM0P];
+            f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M] -
+                    delf * WEIGTH[dM0M];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP] -
+                     delf * WEIGTH[dMPP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP] -
+                     delf * WEIGTH[dMMP];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM] -
+                     delf * WEIGTH[dMPM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM] -
+                     delf * WEIGTH[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        case d0P0:
+            delf = (-velocity + vx2) * BCVeloWeight;
+            f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0] -
+                   delf * WEIGTH[d0P0];
+            f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0] -
+                    delf * WEIGTH[dPP0];
+            f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0] -
+                    delf * WEIGTH[dMP0];
+            f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP] -
+                    delf * WEIGTH[d0PP];
+            f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM] -
+                    delf * WEIGTH[d0PM];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP] -
+                     delf * WEIGTH[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP] -
+                     delf * WEIGTH[dMPP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM] -
+                     delf * WEIGTH[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM] -
+                     delf * WEIGTH[dMPM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            break;
+        case d0M0:
+            delf = (-velocity - vx2) * BCVeloWeight;
+            f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0] -
+                   delf * WEIGTH[d0M0];
+            f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0] -
+                    delf * WEIGTH[dPM0];
+            f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0] -
+                    delf * WEIGTH[dMM0];
+            f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP] -
+                    delf * WEIGTH[d0MP];
+            f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM] -
+                    delf * WEIGTH[d0MM];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP] -
+                     delf * WEIGTH[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP] -
+                     delf * WEIGTH[dMMP];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM] -
+                     delf * WEIGTH[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM] -
+                     delf * WEIGTH[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        case d00P:
+            delf = (-velocity + vx3) * BCVeloWeight;
+            f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P] -
+                   delf * WEIGTH[d00P];
+            f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P] -
+                    delf * WEIGTH[dP0P];
+            f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P] -
+                    delf * WEIGTH[dM0P];
+            f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP] -
+                    delf * WEIGTH[d0PP];
+            f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP] -
+                    delf * WEIGTH[d0MP];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP] -
+                     delf * WEIGTH[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP] -
+                     delf * WEIGTH[dMPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP] -
+                     delf * WEIGTH[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP] -
+                     delf * WEIGTH[dMMP];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            break;
+        case d00M:
+            delf = (-velocity - vx3) * BCVeloWeight;
+            f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M] -
+                   delf * WEIGTH[d00M];
+            f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M] -
+                    delf * WEIGTH[dP0M];
+            f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M] -
+                    delf * WEIGTH[dM0M];
+            f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM] -
+                    delf * WEIGTH[d0PM];
+            f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM] -
+                    delf * WEIGTH[d0MM];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM] -
+                     delf * WEIGTH[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM] -
+                     delf * WEIGTH[dMPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM] -
+                     delf * WEIGTH[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM] -
+                     delf * WEIGTH[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        default:
+            UB_THROW(
+                UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
+    }
+}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.h
rename to src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fe8407bc5e36a6dbec4a914058fa206fe6a8dfad
--- /dev/null
+++ b/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp
@@ -0,0 +1,233 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 NonReflectingOutflowBCStrategy.cpp
+//! \ingroup BoundarConditions
+//! \author Konstantin Kutscher
+//=======================================================================================
+#include "NonReflectingOutflowBCStrategy.h"
+
+#include "BoundaryConditions.h"
+#include "D3Q27System.h"
+#include "DistributionArray3D.h"
+
+NonReflectingOutflowBCStrategy::NonReflectingOutflowBCStrategy()
+{
+    BCStrategy::type         = BCStrategy::NonReflectingOutflowBCStrategy;
+    BCStrategy::preCollision = true;
+}
+//////////////////////////////////////////////////////////////////////////
+NonReflectingOutflowBCStrategy::~NonReflectingOutflowBCStrategy() = default;
+//////////////////////////////////////////////////////////////////////////
+SPtr<BCStrategy> NonReflectingOutflowBCStrategy::clone()
+{
+    SPtr<BCStrategy> bc(new NonReflectingOutflowBCStrategy());
+    return bc;
+}
+//////////////////////////////////////////////////////////////////////////
+void NonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+{
+    this->distributions = distributions;
+}
+//////////////////////////////////////////////////////////////////////////
+void NonReflectingOutflowBCStrategy::applyBC()
+{
+    using namespace vf::lbm::dir;
+
+    using namespace D3Q27System;
+ //   using namespace UbMath;
+    using namespace vf::basics::constant;
+
+    real f[ENDF + 1];
+    real ftemp[ENDF + 1];
+
+    int nx1       = x1;
+    int nx2       = x2;
+    int nx3       = x3;
+    int direction = -1;
+
+    // flag points in direction of fluid
+    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
+        nx1 += 1;
+        direction = dP00;
+    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
+        nx1 -= 1;
+        direction = dM00;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
+        nx2 += 1;
+        direction = d0P0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
+        nx2 -= 1;
+        direction = d0M0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
+        nx3 += 1;
+        direction = d00P;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
+        nx3 -= 1;
+        direction = d00M;
+    } else
+        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
+
+    distributions->getPreCollisionDistribution(f, x1, x2, x3);
+    distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
+
+    real rho, vx1, vx2, vx3;
+    calcMacrosFct(f, rho, vx1, vx2, vx3);
+
+    switch (direction) {
+        case dP00:
+            f[dP00]   = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00];
+            f[dPP0]  = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0];
+            f[dPM0]  = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0];
+            f[dP0P]  = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P];
+            f[dP0M]  = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            break;
+        case dM00:
+            f[dM00]   = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00];
+            f[dMP0]  = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0];
+            f[dMM0]  = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0];
+            f[dM0P]  = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P];
+            f[dM0M]  = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        case d0P0:
+            f[d0P0]   = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0];
+            f[dPP0]  = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0];
+            f[dMP0]  = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0];
+            f[d0PP]  = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP];
+            f[d0PM]  = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            break;
+        case d0M0:
+            f[d0M0]   = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0];
+            f[dPM0]  = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0];
+            f[dMM0]  = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0];
+            f[d0MP]  = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP];
+            f[d0MM]  = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        case d00P:
+            f[d00P]   = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P];
+            f[dP0P]  = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P];
+            f[dM0P]  = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P];
+            f[d0PP]  = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP];
+            f[d0MP]  = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            break;
+        case d00M:
+            f[d00M]   = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M];
+            f[dP0M]  = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M];
+            f[dM0M]  = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M];
+            f[d0PM]  = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM];
+            f[d0MM]  = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        default:
+            UB_THROW(
+                UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
+    }
+}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.h
rename to src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a80a2d4e2c089c749b3bafac2c1f4461d88ede82
--- /dev/null
+++ b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp
@@ -0,0 +1,233 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 NonReflectingOutflowWithRelaxationBCStrategy.cpp
+//! \ingroup BoundarConditions
+//! \author Konstantin Kutscher, Hussein Alihussein
+//=======================================================================================
+#include "NonReflectingOutflowWithRelaxationBCStrategy.h"
+
+#include "BoundaryConditions.h"
+#include "D3Q27System.h"
+#include "DistributionArray3D.h"
+
+NonReflectingOutflowWithRelaxationBCStrategy::NonReflectingOutflowWithRelaxationBCStrategy()
+{
+    BCStrategy::type         = BCStrategy::NonReflectingOutflowWithRelaxationBCStrategy;
+    BCStrategy::preCollision = true;
+}
+//////////////////////////////////////////////////////////////////////////
+NonReflectingOutflowWithRelaxationBCStrategy::~NonReflectingOutflowWithRelaxationBCStrategy() = default;
+//////////////////////////////////////////////////////////////////////////
+SPtr<BCStrategy> NonReflectingOutflowWithRelaxationBCStrategy::clone()
+{
+    SPtr<BCStrategy> bc(new NonReflectingOutflowWithRelaxationBCStrategy());
+    return bc;
+}
+//////////////////////////////////////////////////////////////////////////
+void NonReflectingOutflowWithRelaxationBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+{
+    this->distributions = distributions;
+}
+//////////////////////////////////////////////////////////////////////////
+void NonReflectingOutflowWithRelaxationBCStrategy::applyBC()
+{
+    using namespace vf::lbm::dir;
+
+    using namespace D3Q27System;
+ //   using namespace UbMath;
+    using namespace vf::basics::constant;
+
+    LBMReal f[ENDF + 1];
+    LBMReal ftemp[ENDF + 1];
+
+    int nx1       = x1;
+    int nx2       = x2;
+    int nx3       = x3;
+    int direction = -1;
+
+    // flag points in direction of fluid
+    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
+        nx1 += 1;
+        direction = dP00;
+    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
+        nx1 -= 1;
+        direction = dM00;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
+        nx2 += 1;
+        direction = d0P0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
+        nx2 -= 1;
+        direction = d0M0;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
+        nx3 += 1;
+        direction = d00P;
+    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
+        nx3 -= 1;
+        direction = d00M;
+    } else
+        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
+
+    distributions->getPreCollisionDistribution(f, x1, x2, x3);
+    distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
+
+    LBMReal rho, vx1, vx2, vx3;
+    calcMacrosFct(f, rho, vx1, vx2, vx3);
+    LBMReal delf = rho* c1o100;
+    switch (direction) {
+        case dP00:
+            f[dP00]   = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00] - delf* WEIGTH[dP00];
+            f[dPP0]  = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]- delf* WEIGTH[dPP0];
+            f[dPM0]  = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]- delf* WEIGTH[dPM0];
+            f[dP0P]  = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]- delf* WEIGTH[dP0P];
+            f[dP0M]  = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]- delf* WEIGTH[dP0M];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]- delf* WEIGTH[dPPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]- delf* WEIGTH[dPMP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]- delf* WEIGTH[dPPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]- delf* WEIGTH[dPMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            break;
+        case dM00:
+            f[dM00]   = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]- delf* WEIGTH[dM00];
+            f[dMP0]  = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]- delf* WEIGTH[dMP0];
+            f[dMM0]  = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]- delf* WEIGTH[dMM0];
+            f[dM0P]  = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]- delf* WEIGTH[dM0P];
+            f[dM0M]  = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]- delf* WEIGTH[dM0M];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]- delf* WEIGTH[dMPP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]- delf* WEIGTH[dMMP];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]- delf* WEIGTH[dMPM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]- delf* WEIGTH[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        case d0P0:
+            f[d0P0]   = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]- delf* WEIGTH[d0P0];
+            f[dPP0]  = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]- delf* WEIGTH[dPP0];
+            f[dMP0]  = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]- delf* WEIGTH[dMP0];
+            f[d0PP]  = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]- delf* WEIGTH[d0PP];
+            f[d0PM]  = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]- delf* WEIGTH[d0PM];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]- delf* WEIGTH[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]- delf* WEIGTH[dMPP];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]- delf* WEIGTH[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]- delf* WEIGTH[dMPM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
+            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
+            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            break;
+        case d0M0:
+            f[d0M0]   = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]- delf* WEIGTH[d0M0];
+            f[dPM0]  = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]- delf* WEIGTH[dPM0];
+            f[dMM0]  = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]- delf* WEIGTH[dMM0];
+            f[d0MP]  = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]- delf* WEIGTH[d0MP];
+            f[d0MM]  = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]- delf* WEIGTH[d0MM];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]- delf* WEIGTH[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]- delf* WEIGTH[dMMP];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]- delf* WEIGTH[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]- delf* WEIGTH[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
+            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
+            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        case d00P:
+            f[d00P]   = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]- delf* WEIGTH[d00P];
+            f[dP0P]  = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]- delf* WEIGTH[dP0P];
+            f[dM0P]  = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]- delf* WEIGTH[dM0P];
+            f[d0PP]  = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]- delf* WEIGTH[d0PP];
+            f[d0MP]  = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]- delf* WEIGTH[d0MP];
+            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]- delf* WEIGTH[dPPP];
+            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]- delf* WEIGTH[dMPP];
+            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]- delf* WEIGTH[dPMP];
+            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]- delf* WEIGTH[dMMP];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
+            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
+            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
+            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
+            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
+            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
+            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
+            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
+            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
+            break;
+        case d00M:
+            f[d00M]   = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]- delf* WEIGTH[d00M];
+            f[dP0M]  = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]- delf* WEIGTH[dP0M];
+            f[dM0M]  = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]- delf* WEIGTH[dM0M];
+            f[d0PM]  = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]- delf* WEIGTH[d0PM];
+            f[d0MM]  = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]- delf* WEIGTH[d0MM];
+            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]- delf* WEIGTH[dPPM];
+            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]- delf* WEIGTH[dMPM];
+            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]- delf* WEIGTH[dPMM];
+            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]- delf* WEIGTH[dMMM];
+
+            distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
+            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
+            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
+            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
+            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
+            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
+            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
+            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
+            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
+            break;
+        default:
+            UB_THROW(
+                UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
+    }
+}
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h
rename to src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp
similarity index 62%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp
index 7bd97721771d1cd5f2d5121bc3776c6dad9b3900..0c1693613baaa27be10f9cb90f2049902accdacb 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp
@@ -62,7 +62,7 @@ void SimpleSlipBCStrategy::applyBC()
 
    real f[D3Q27System::ENDF+1];
    real feq[D3Q27System::ENDF+1];
-   distributions->getDistributionInv(f, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
    real vx1, vx2, vx3, drho, rho;
    calcMacrosFct(f, drho, vx1, vx2, vx3);
    calcFeqFct(feq, drho, vx1, vx2, vx3);
@@ -85,36 +85,36 @@ void SimpleSlipBCStrategy::applyBC()
          real velocity = vf::basics::constant::c0o1;
          switch (invDir)
          {
-         case DIR_P00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
-         case DIR_M00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
-         case DIR_0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
-         case DIR_0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
-         case DIR_00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
-         case DIR_00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
-         case DIR_PP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
-         case DIR_MM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
-         case DIR_PM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
-         case DIR_MP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
-         case DIR_P0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
-         case DIR_M0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
-         case DIR_P0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
-         case DIR_M0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
-         case DIR_0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
-         case DIR_0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
-         case DIR_0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
-         case DIR_0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
-         case DIR_PPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
-         case DIR_MMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
-         case DIR_PPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
-         case DIR_MMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
-         case DIR_PMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
-         case DIR_MPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
-         case DIR_PMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
-         case DIR_MPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
+         case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
+         case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
+         case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
+         case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
+         case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
+         case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
+         case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
+         case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
+         case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
+         case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
+         case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
+         case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
+         case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
+         case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
+         case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
+         case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
+         case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
+         case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
+         case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
+         case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
+         case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
+         case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
+         case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
+         case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
+         case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
+         case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
          default: throw UbException(UB_EXARGS, "unknown error");
          }
          real fReturn = f[invDir] - velocity * rho;
-         distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
       }
    }
 }
\ No newline at end of file
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp
similarity index 94%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp
index 2206e71541d6d264fd91146be5641ba75ed5b4d3..95cc73900df9a4da5daeb8ee2611cd8af300cb24 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp
@@ -60,7 +60,7 @@ void SimpleVelocityBCStrategy::applyBC()
 {
    real f[D3Q27System::ENDF+1];
    real feq[D3Q27System::ENDF+1];
-   distributions->getDistributionInv(f, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
    real vx1, vx2, vx3, drho;
    calcMacrosFct(f, drho, vx1, vx2, vx3);
    calcFeqFct(feq, drho, vx1, vx2, vx3);
@@ -72,7 +72,7 @@ void SimpleVelocityBCStrategy::applyBC()
          const int invDir = D3Q27System::INVDIR[fdir];
          real velocity = bcPtr->getBoundaryVelocity(invDir);
          real fReturn = f[invDir] - velocity;
-         distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
       }
    }
 
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.h b/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp b/src/cpu/core/BoundaryConditions/SlipBC.cpp
similarity index 93%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp
rename to src/cpu/core/BoundaryConditions/SlipBC.cpp
index eb254160395ce1ba12e22bc6ff6d6e063ce8f316..a97fc89fd233197c4286ed14a22a6e4256417ea2 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp
+++ b/src/cpu/core/BoundaryConditions/SlipBC.cpp
@@ -58,17 +58,17 @@ void SlipBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions>
     if (!geo)
         throw UbException(UB_EXARGS, "derzeit nur fuer Cubes valide");
 
-    if (bc->hasSlipBoundaryFlag(DIR_P00))
+    if (bc->hasSlipBoundaryFlag(dP00))
         bc->setNormalVector(vf::basics::constant::c1o1, vf::basics::constant::c0o1, vf::basics::constant::c0o1);
-    else if (bc->hasSlipBoundaryFlag(DIR_M00))
+    else if (bc->hasSlipBoundaryFlag(dM00))
         bc->setNormalVector(-vf::basics::constant::c1o1, vf::basics::constant::c0o1, vf::basics::constant::c0o1);
-    else if (bc->hasSlipBoundaryFlag(DIR_0P0))
+    else if (bc->hasSlipBoundaryFlag(d0P0))
         bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c1o1, vf::basics::constant::c0o1);
-    else if (bc->hasSlipBoundaryFlag(DIR_0M0))
+    else if (bc->hasSlipBoundaryFlag(d0M0))
         bc->setNormalVector(vf::basics::constant::c0o1, -vf::basics::constant::c1o1, vf::basics::constant::c0o1);
-    else if (bc->hasSlipBoundaryFlag(DIR_00P))
+    else if (bc->hasSlipBoundaryFlag(d00P))
         bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c0o1, vf::basics::constant::c1o1);
-    else if (bc->hasSlipBoundaryFlag(DIR_00M))
+    else if (bc->hasSlipBoundaryFlag(d00M))
         bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c0o1, -vf::basics::constant::c1o1);
 
     bc->setBCStrategyType(algorithmType);
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.h b/src/cpu/core/BoundaryConditions/SlipBC.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.h
rename to src/cpu/core/BoundaryConditions/SlipBC.h
diff --git a/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5245de010674522f8e7a95b2c5f39b0036dea7a6
--- /dev/null
+++ b/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp
@@ -0,0 +1,84 @@
+#include "SlipBCStrategy.h"
+#include "BoundaryConditions.h"
+#include "DistributionArray3D.h"
+
+SlipBCStrategy::SlipBCStrategy()
+{
+    BCStrategy::type         = BCStrategy::SlipBCStrategy;
+    BCStrategy::preCollision = false;
+}
+//////////////////////////////////////////////////////////////////////////
+SlipBCStrategy::~SlipBCStrategy() = default;
+//////////////////////////////////////////////////////////////////////////
+SPtr<BCStrategy> SlipBCStrategy::clone()
+{
+    SPtr<BCStrategy> bc(new SlipBCStrategy());
+    return bc;
+}
+//////////////////////////////////////////////////////////////////////////
+void SlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) { this->distributions = distributions; }
+//////////////////////////////////////////////////////////////////////////
+void SlipBCStrategy::applyBC()
+{
+    using namespace vf::lbm::dir;
+
+    real f[D3Q27System::ENDF + 1];
+    real feq[D3Q27System::ENDF + 1];
+    distributions->getPostCollisionDistribution(f, x1, x2, x3);
+    real rho, vx1, vx2, vx3, drho;
+    calcMacrosFct(f, drho, vx1, vx2, vx3);
+    calcFeqFct(feq, drho, vx1, vx2, vx3);
+
+    UbTupleFloat3 normale = bcPtr->getNormalVector();
+    real amp            = vx1 * val<1>(normale) + vx2 * val<2>(normale) + vx3 * val<3>(normale);
+
+    vx1 = vx1 - amp * val<1>(normale); // normale zeigt von struktur weg!
+    vx2 = vx2 - amp * val<2>(normale); // normale zeigt von struktur weg!
+    vx3 = vx3 - amp * val<3>(normale); // normale zeigt von struktur weg!
+
+    rho = vf::basics::constant::c1o1 + drho * compressibleFactor;
+
+   for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
+   {
+      if (bcPtr->hasSlipBoundaryFlag(fdir))
+      {
+         //quadratic bounce back
+         const int invDir = D3Q27System::INVDIR[fdir];
+         real q = bcPtr->getQ(invDir);// m+m q=0 stabiler
+         //vx3=0;
+         real velocity = vf::basics::constant::c0o1;
+         switch (invDir)
+         {
+         case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
+         case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
+         case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
+         case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
+         case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
+         case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
+         case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
+         case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
+         case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
+         case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
+         case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
+         case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
+         case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
+         case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
+         case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
+         case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
+         case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
+         case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
+         case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
+         case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
+         case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
+         case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
+         case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
+         case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
+         case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
+         case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
+         default: throw UbException(UB_EXARGS, "unknown error");
+         }
+         real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q));
+         distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+      }
+   }
+}
\ No newline at end of file
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.h b/src/cpu/core/BoundaryConditions/SlipBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/SlipBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp b/src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp
rename to src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.h b/src/cpu/core/BoundaryConditions/ThinWallBCSet.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.h
rename to src/cpu/core/BoundaryConditions/ThinWallBCSet.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
similarity index 94%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
index 2427983a121b4948167b20d2336dbc39a0d81b9a..5cb6f4a13cece782370931e01415347a54fa87bd 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
@@ -54,7 +54,7 @@ void ThinWallNoSlipBCStrategy::applyBC()
 {
     real f[D3Q27System::ENDF + 1];
     real feq[D3Q27System::ENDF + 1];
-    distributions->getDistributionInv(f, x1, x2, x3);
+    distributions->getPostCollisionDistribution(f, x1, x2, x3);
     real rho, vx1, vx2, vx3;
     calcMacrosFct(f, rho, vx1, vx2, vx3);
     calcFeqFct(feq, rho, vx1, vx2, vx3);
@@ -69,7 +69,7 @@ void ThinWallNoSlipBCStrategy::applyBC()
                 fReturn   = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * vf::basics::constant::c1o2 *
                           (f[invDir] - f[fdir] +
                            (f[invDir] + f[fdir] - collFactor * (feq[fdir] + feq[invDir])) / (vf::basics::constant::c1o1 - collFactor));
-                // distributionsTemp->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 +
+                // distributionsTemp->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 +
                 // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
                 fTemp[fdir] = fReturn;
             } else {
@@ -77,7 +77,7 @@ void ThinWallNoSlipBCStrategy::applyBC()
                 // fReturn = distributionsTemp->getDistributionInvForDirection(x1 + D3Q27System::DX1[invDir], x2 +
                 // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
                 fReturn = fTemp[fdir];
-                distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
+                distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
                                                            x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir],
                                                            fdir);
             }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp b/src/cpu/core/BoundaryConditions/VelocityBC.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp
rename to src/cpu/core/BoundaryConditions/VelocityBC.cpp
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.h b/src/cpu/core/BoundaryConditions/VelocityBC.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.h
rename to src/cpu/core/BoundaryConditions/VelocityBC.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp
similarity index 95%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp
index 4f4c1615d0b6386a2e3382959e73f1885c8e9af4..2cab5d9d321e52ac23fc7bd2c78a4b648966b619 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp
@@ -57,7 +57,7 @@ void VelocityBCStrategy::applyBC()
 {
     real f[D3Q27System::ENDF + 1];
     real feq[D3Q27System::ENDF + 1];
-    distributions->getDistributionInv(f, x1, x2, x3);
+    distributions->getPostCollisionDistribution(f, x1, x2, x3);
     real rho, vx1, vx2, vx3, drho;
     calcMacrosFct(f, drho, vx1, vx2, vx3);
     calcFeqFct(feq, drho, vx1, vx2, vx3);
@@ -74,7 +74,7 @@ void VelocityBCStrategy::applyBC()
             real velocity = bcPtr->getBoundaryVelocity(invDir);
             real fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * ((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) +
                               ((q * (f[invDir] + f[fdir]) - velocity * rho) / (vf::basics::constant::c1o1 + q));
-            distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
+            distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
                                                        x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir],
                                                        fdir);
         }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/VelocityBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
similarity index 96%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
index 0278ee0954dda41fd028a40d820782bf76b512f8..5ef3bea739ec38e211a4ef649574ccd1c59fe6a4 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
@@ -60,7 +60,7 @@ void VelocityWithDensityBCStrategy::applyBC()
    //velocity bc for non reflecting pressure bc
    real f[D3Q27System::ENDF+1];
    //real feq[D3Q27System::ENDF+1];
-   distributions->getDistributionInv(f, x1, x2, x3);
+   distributions->getPostCollisionDistribution(f, x1, x2, x3);
    real rho, vx1, vx2, vx3, drho;
    calcMacrosFct(f, drho, vx1, vx2, vx3);
    //calcFeqFct(feq, drho, vx1, vx2, vx3);
@@ -96,7 +96,7 @@ void VelocityWithDensityBCStrategy::applyBC()
                 // q))-drho*D3Q27System::WEIGTH[invDir];
                 real fReturn = (f[fdir] + f[invDir] - velocity * rho) / vf::basics::constant::c2o1 - drho * D3Q27System::WEIGTH[invDir];
 
-                distributions->setDistributionForDirection(fReturn, nX1, nX2, nX3, invDir);
+                distributions->setPostCollisionDistributionForDirection(fReturn, nX1, nX2, nX3, invDir);
             }
         }
     }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h
diff --git a/src/cpu/VirtualFluidsCore/CMakeLists.txt b/src/cpu/core/CMakeLists.txt
similarity index 90%
rename from src/cpu/VirtualFluidsCore/CMakeLists.txt
rename to src/cpu/core/CMakeLists.txt
index 3e767e49c6cc0d35c2c8706a20b77f17a625b9a4..ee8f4ed209673acfc4bbfbd8bff39379e28d5255 100644
--- a/src/cpu/VirtualFluidsCore/CMakeLists.txt
+++ b/src/cpu/core/CMakeLists.txt
@@ -20,11 +20,11 @@ if(BUILD_USE_OPENMP)
     list(APPEND VF_LIBRARIES OpenMP::OpenMP_CXX)
 endif()
 
-vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser ${VF_LIBRARIES} parallel PRIVATE_LINK lbm logger)
+set(library_name cpu_core)
 
-vf_add_tests()
+vf_add_library(NAME ${library_name} BUILDTYPE static PUBLIC_LINK basics muparser ${VF_LIBRARIES} parallel PRIVATE_LINK lbm logger)
 
-vf_get_library_name(library_name)
+vf_add_tests(NAME ${library_name})
 
 target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/BoundaryConditions)
 target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Connectors)
diff --git a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h b/src/cpu/core/Connectors/Block3DConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h
rename to src/cpu/core/Connectors/Block3DConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.cpp b/src/cpu/core/Connectors/CoarseToFineVectorConnector.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.cpp
rename to src/cpu/core/Connectors/CoarseToFineVectorConnector.cpp
diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.h b/src/cpu/core/Connectors/CoarseToFineVectorConnector.h
similarity index 90%
rename from src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.h
rename to src/cpu/core/Connectors/CoarseToFineVectorConnector.h
index 331e923ea6b94841c2d0c293b9f5680bab4cb400..9a0612f2afa4d226341ea4ab8132566203454226 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.h
+++ b/src/cpu/core/Connectors/CoarseToFineVectorConnector.h
@@ -159,15 +159,15 @@ CoarseToFineVectorConnector<VectorTransmitter>::CoarseToFineVectorConnector(
 {
     using namespace vf::lbm::dir;
 
-    if (!(sendDir == DIR_P00 || sendDir == DIR_M00 || sendDir == DIR_0P0 ||
-          sendDir == DIR_0M0 || sendDir == DIR_00P || sendDir == DIR_00M ||
-          sendDir == DIR_PP0 || sendDir == DIR_MM0 || sendDir == DIR_PM0 ||
-          sendDir == DIR_MP0 || sendDir == DIR_P0P || sendDir == DIR_M0M ||
-          sendDir == DIR_P0M || sendDir == DIR_M0P || sendDir == DIR_0PP ||
-          sendDir == DIR_0MM || sendDir == DIR_0PM || sendDir == DIR_0MP ||
-          sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_PMP ||
-          sendDir == DIR_MMP || sendDir == DIR_PPM || sendDir == DIR_MPM ||
-          sendDir == DIR_PMM || sendDir == DIR_MMM)) {
+    if (!(sendDir == dP00 || sendDir == dM00 || sendDir == d0P0 ||
+          sendDir == d0M0 || sendDir == d00P || sendDir == d00M ||
+          sendDir == dPP0 || sendDir == dMM0 || sendDir == dPM0 ||
+          sendDir == dMP0 || sendDir == dP0P || sendDir == dM0M ||
+          sendDir == dP0M || sendDir == dM0P || sendDir == d0PP ||
+          sendDir == d0MM || sendDir == d0PM || sendDir == d0MP ||
+          sendDir == dPPP || sendDir == dMPP || sendDir == dPMP ||
+          sendDir == dMMP || sendDir == dPPM || sendDir == dMPM ||
+          sendDir == dPMM || sendDir == dMMM)) {
         throw UbException(UB_EXARGS, "invalid constructor for this direction");
     }
 }
@@ -314,44 +314,44 @@ void CoarseToFineVectorConnector<VectorTransmitter>::init()
     int iCellSize       = 8; // size of interpolation cell
 
     switch (this->sendDir) {
-        case DIR_P00:
-        case DIR_M00:
+        case dP00:
+        case dM00:
             sendSize = bMaxX2 * bMaxX3 * sendDataPerNode * iCellSize;
             break;
-        case DIR_0P0:
-        case DIR_0M0:
+        case d0P0:
+        case d0M0:
             sendSize = bMaxX1 * bMaxX3 * sendDataPerNode * iCellSize;
             break;
-        case DIR_00P:
-        case DIR_00M:
+        case d00P:
+        case d00M:
             sendSize = bMaxX1 * bMaxX2 * sendDataPerNode * iCellSize;
             break;
-        case DIR_PP0:
-        case DIR_MM0:
-        case DIR_PM0:
-        case DIR_MP0:
+        case dPP0:
+        case dMM0:
+        case dPM0:
+        case dMP0:
             sendSize = 2 * bMaxX3 * sendDataPerNode * iCellSize;
             break;
-        case DIR_P0P:
-        case DIR_M0M:
-        case DIR_P0M:
-        case DIR_M0P:
+        case dP0P:
+        case dM0M:
+        case dP0M:
+        case dM0P:
             sendSize = 2 * bMaxX2 * sendDataPerNode * iCellSize;
             break;
-        case DIR_0PP:
-        case DIR_0MM:
-        case DIR_0PM:
-        case DIR_0MP:
+        case d0PP:
+        case d0MM:
+        case d0PM:
+        case d0MP:
             sendSize = 2 * bMaxX1 * sendDataPerNode * iCellSize;
             break;
-        case DIR_PPP:
-        case DIR_MPP:
-        case DIR_PMP:
-        case DIR_MMP:
-        case DIR_PPM:
-        case DIR_MPM:
-        case DIR_PMM:
-        case DIR_MMM:
+        case dPPP:
+        case dMPP:
+        case dPMP:
+        case dMMP:
+        case dPPM:
+        case dMPM:
+        case dPMM:
+        case dMMM:
             sendSize = 6 * bMaxX1 * sendDataPerNode * iCellSize;
             break;
         default:
@@ -413,7 +413,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
     int lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3;
 
     switch (sendDir) {
-        case DIR_P00:
+        case dP00:
             lMinX1 = maxX1 - 3;
             lMaxX1 = lMinX1 + 1;
 
@@ -433,7 +433,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false);
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_M00:
+        case dM00:
             lMinX1 = 1;
             lMaxX1 = lMinX1 + 1;
 
@@ -453,7 +453,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false);
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_0P0:
+        case d0P0:
             lMinX2 = maxX2 - 3;
             lMaxX2 = lMinX2 + 1;
 
@@ -473,7 +473,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false);
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_0M0:
+        case d0M0:
             lMinX2 = 1;
             lMaxX2 = lMinX2 + 1;
 
@@ -493,7 +493,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false);
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_00P:
+        case d00P:
             lMinX3 = maxX3 - 3;
             lMaxX3 = lMinX3 + 1;
 
@@ -513,7 +513,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             getLocalMinMax(minX2, maxX2, false, lMinX2, lMaxX2, false);
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_00M:
+        case d00M:
             lMinX3 = 1;
             lMaxX3 = lMinX3 + 1;
 
@@ -534,7 +534,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
             /// N-S-E-W
-        case DIR_PP0:
+        case dPP0:
             lMinX1 = maxX1 - 3;
             lMaxX1 = lMinX1 + 2;
             lMinX2 = maxX2 - 3;
@@ -548,7 +548,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_MM0:
+        case dMM0:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 2;
             lMinX2 = 0;
@@ -562,7 +562,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_PM0:
+        case dPM0:
             lMinX1 = maxX1 - 3;
             lMaxX1 = lMinX1 + 2;
             lMinX2 = 0;
@@ -576,7 +576,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_MP0:
+        case dMP0:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 2;
             lMinX2 = maxX2 - 3;
@@ -590,7 +590,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
             /////T-B-E-W
-        case DIR_P0P:
+        case dP0P:
             lMinX1 = maxX1 - 3;
             lMaxX1 = lMinX1 + 2;
             lMinX3 = maxX3 - 3;
@@ -604,7 +604,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_M0M:
+        case dM0M:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 2;
             lMinX3 = 0;
@@ -618,7 +618,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_P0M:
+        case dP0M:
             lMinX1 = maxX1 - 3;
             lMaxX1 = lMinX1 + 2;
             lMinX3 = 0;
@@ -632,7 +632,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_M0P:
+        case dM0P:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 2;
             lMinX3 = maxX3 - 3;
@@ -647,7 +647,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
             ////
             /////T-B-N-S
-        case DIR_0PP:
+        case d0PP:
             lMinX2 = maxX2 - 3;
             lMaxX2 = lMinX2 + 2;
             lMinX3 = maxX3 - 3;
@@ -661,7 +661,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_0MM:
+        case d0MM:
             lMinX2 = 0;
             lMaxX2 = lMinX2 + 2;
             lMinX3 = 0;
@@ -675,7 +675,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_0PM:
+        case d0PM:
             lMinX2 = maxX2 - 3;
             lMaxX2 = lMinX2 + 2;
             lMinX3 = 0;
@@ -689,7 +689,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_0MP:
+        case d0MP:
             lMinX2 = 0;
             lMaxX2 = lMinX2 + 2;
             lMinX3 = maxX3 - 3;
@@ -704,7 +704,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
             // TNE
-        case DIR_PPP:
+        case dPPP:
             lMinX1 = maxX1 - 3;
             lMaxX1 = maxX1 - 1;
             lMinX2 = maxX2 - 3;
@@ -715,7 +715,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   TNW
-        case DIR_MPP:
+        case dMPP:
             lMinX1 = 0;
             lMaxX1 = 2;
             lMinX2 = maxX2 - 3;
@@ -726,7 +726,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   TSE
-        case DIR_PMP:
+        case dPMP:
             lMinX1 = maxX1 - 3;
             lMaxX1 = maxX1 - 1;
             lMinX2 = 0;
@@ -737,7 +737,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   TSW
-        case DIR_MMP:
+        case dMMP:
             lMinX1 = 0;
             lMaxX1 = 2;
             lMinX2 = 0;
@@ -748,7 +748,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BNE
-        case DIR_PPM:
+        case dPPM:
             lMinX1 = maxX1 - 3;
             lMaxX1 = maxX1 - 1;
             lMinX2 = maxX2 - 3;
@@ -759,7 +759,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BNW
-        case DIR_MPM:
+        case dMPM:
             lMinX1 = 0;
             lMaxX1 = 2;
             lMinX2 = maxX2 - 3;
@@ -770,7 +770,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BSE
-        case DIR_PMM:
+        case dPMM:
             lMinX1 = maxX1 - 3;
             lMaxX1 = maxX1 - 1;
             lMinX2 = 0;
@@ -781,7 +781,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BSW
-        case DIR_MMM:
+        case dMMM:
             lMinX1 = 0;
             lMaxX1 = 2;
             lMinX2 = 0;
@@ -920,7 +920,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
     int dummy;
 
     switch (sendDir) {
-        case DIR_P00:
+        case dP00:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 1;
             getLocalMinMax(minX2, maxX2, true, lMinX2, lMaxX2, true);
@@ -943,7 +943,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             getLocalMinMax(dummy, dummy, dummy, dummy, lMaxX2, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_M00:
+        case dM00:
             lMinX1 = 3;
             lMaxX1 = lMinX1 + 1;
             getLocalMinMax(minX2, maxX2, true, lMinX2, lMaxX2, true);
@@ -966,7 +966,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             getLocalMinMax(dummy, dummy, dummy, dummy, lMaxX2, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_0P0:
+        case d0P0:
             lMinX2 = maxX2 - 4;
             lMaxX2 = lMinX2 + 1;
             getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true);
@@ -989,7 +989,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             getLocalMinMax(dummy, dummy, dummy, lMaxX1, dummy, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_0M0:
+        case d0M0:
             lMinX2 = 3;
             lMaxX2 = lMinX2 + 1;
             getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true);
@@ -1012,7 +1012,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             getLocalMinMax(dummy, dummy, dummy, lMaxX1, dummy, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_00P:
+        case d00P:
             lMinX3 = maxX3 - 4;
             lMaxX3 = lMinX3 + 1;
             getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true);
@@ -1035,7 +1035,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             getLocalMinMax(dummy, dummy, dummy, lMaxX1, lMaxX2, dummy);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
-        case DIR_00M:
+        case d00M:
             lMinX3 = 3;
             lMaxX3 = lMinX3 + 1;
             getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true);
@@ -1060,7 +1060,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             break;
 
             //	/////E-W-N-S
-        case DIR_PP0:
+        case dPP0:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = maxX2 - 4;
@@ -1087,7 +1087,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_MM0:
+        case dMM0:
             lMinX1 = 1;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = 3;
@@ -1114,7 +1114,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_PM0:
+        case dPM0:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = 3;
@@ -1141,7 +1141,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_MP0:
+        case dMP0:
             lMinX1 = 1;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = maxX2 - 4;
@@ -1168,7 +1168,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
             //		/////T-B-E-W
-        case DIR_P0P:
+        case dP0P:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = maxX3 - 4;
@@ -1195,7 +1195,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_M0M:
+        case dM0M:
             lMinX1 = 1;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = 3;
@@ -1222,7 +1222,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_P0M:
+        case dP0M:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = 3;
@@ -1249,7 +1249,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_M0P:
+        case dM0P:
             lMinX1 = 1;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = maxX3 - 4;
@@ -1277,7 +1277,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             break;
 
             /////////////////////////T-N-B-S
-        case DIR_0PP:
+        case d0PP:
             lMinX2 = maxX2 - 4;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = maxX3 - 4;
@@ -1304,7 +1304,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_0MM:
+        case d0MM:
             lMinX2 = 1;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = 3;
@@ -1331,7 +1331,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_0PM:
+        case d0PM:
             lMinX2 = maxX2 - 4;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = 3;
@@ -1358,7 +1358,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
 
-        case DIR_0MP:
+        case d0MP:
             lMinX2 = 1;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = maxX3 - 4;
@@ -1386,7 +1386,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             break;
 
             // TNE
-        case DIR_PPP:
+        case dPPP:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 3;
             lMinX2 = maxX2 - 4;
@@ -1413,7 +1413,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
             //   TNW
-        case DIR_MPP:
+        case dMPP:
             lMinX1 = 3;
             lMaxX1 = 4;
             lMinX2 = maxX2 - 4;
@@ -1440,7 +1440,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
             //   TSE
-        case DIR_PMP:
+        case dPMP:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 3;
             lMinX2 = 1;
@@ -1466,7 +1466,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   TSW
-        case DIR_MMP:
+        case dMMP:
             lMinX1 = 3;
             lMaxX1 = 4;
             lMinX2 = 1;
@@ -1492,7 +1492,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BNE
-        case DIR_PPM:
+        case dPPM:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 3;
             lMinX2 = maxX2 - 4;
@@ -1519,7 +1519,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
             break;
             //   BNW
-        case DIR_MPM:
+        case dMPM:
             lMinX1 = 3;
             lMaxX1 = 4;
             lMinX2 = maxX2 - 4;
@@ -1545,7 +1545,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BSE
-        case DIR_PMM:
+        case dPMM:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 3;
             lMinX2 = 1;
@@ -1571,7 +1571,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv);
             break;
             //   BSW
-        case DIR_MMM:
+        case dMMM:
             lMinX1 = 3;
             lMaxX1 = 4;
             lMinX2 = 1;
@@ -1644,55 +1644,55 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     int TmaxX2 = maxX2;
     int TmaxX3 = maxX3;
 
-    if (block.lock()->hasInterpolationFlagCF(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagCF(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagCF(dM00)) {
         if (minX1 == TminX1)
             minX1 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0P0)) {
+    if (block.lock()->hasInterpolationFlagCF(d0P0)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagCF(d0M0)) {
         if (minX2 == TminX2)
             minX2 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX3 == TmaxX3)
             maxX3 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(d00M)) {
         if (minX3 == TminX3)
             minX3 += 2;
     }
 
     // E-W-N-S
-    if (block.lock()->hasInterpolationFlagCF(DIR_PP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagCF(dPP0) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_MM0) && !block.lock()->hasInterpolationFlagCF(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagCF(dMM0) && !block.lock()->hasInterpolationFlagCF(dM00) &&
+        !block.lock()->hasInterpolationFlagCF(d0M0)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (minX2 == TminX2)
             minX2 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_PM0) && !block.lock()->hasInterpolationFlagCF(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagCF(dPM0) && !block.lock()->hasInterpolationFlagCF(dP00) &&
+        !block.lock()->hasInterpolationFlagCF(d0M0)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (minX2 == TminX2)
             minX2 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_MP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagCF(dMP0) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(dM00)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (maxX2 == TmaxX2)
@@ -1700,29 +1700,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     //	////T-B-E-W
-    if (block.lock()->hasInterpolationFlagCF(DIR_P0P) && !block.lock()->hasInterpolationFlagCF(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(dP0P) && !block.lock()->hasInterpolationFlagCF(dP00) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (maxX3 == TmaxX3)
             maxX3 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_M0M) && !block.lock()->hasInterpolationFlagCF(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(dM0M) && !block.lock()->hasInterpolationFlagCF(dM00) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_P0M) && !block.lock()->hasInterpolationFlagCF(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(dP0M) && !block.lock()->hasInterpolationFlagCF(dP00) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_M0P) && !block.lock()->hasInterpolationFlagCF(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(dM0P) && !block.lock()->hasInterpolationFlagCF(dM00) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (maxX3 == TmaxX3)
@@ -1730,29 +1730,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     ////T-B-N-S
-    if (block.lock()->hasInterpolationFlagCF(DIR_0PP) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d0PP) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
         if (maxX3 == TmaxX3)
             maxX3 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0MM) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(d0MM) && !block.lock()->hasInterpolationFlagCF(d0M0) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (minX2 == TminX2)
             minX2 += 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0PM) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(d0PM) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0MP) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d0MP) && !block.lock()->hasInterpolationFlagCF(d0M0) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (minX2 == TminX2)
             minX2 += 2;
         if (maxX3 == TmaxX3)
@@ -1760,10 +1760,10 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     // if
-    // (block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0P0)
-    // && !block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P00)) if
-    // (!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_00P)&&
-    // !block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P00))
+    // (block.lock()->hasInterpolationFlagCF(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0P0)
+    // && !block.lock()->hasInterpolationFlagCF(D3Q27System::dP00)) if
+    // (!block.lock()->hasInterpolationFlagCF(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d00P)&&
+    // !block.lock()->hasInterpolationFlagCF(D3Q27System::dP00))
     //{
     //   if (maxX1==TmaxX1) maxX1 -= 2;
     //   if (maxX2==TmaxX2) maxX2 -= 2;
@@ -1786,55 +1786,55 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     int TmaxX2 = maxX2;
     int TmaxX3 = maxX3;
 
-    if (block.lock()->hasInterpolationFlagCF(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagCF(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagCF(dM00)) {
         if (minX1 == TminX1)
             minX1 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0P0)) {
+    if (block.lock()->hasInterpolationFlagCF(d0P0)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagCF(d0M0)) {
         if (minX2 == TminX2)
             minX2 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX3 == TmaxX3)
             maxX3 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(d00M)) {
         if (minX3 == TminX3)
             minX3 += 2;
     }
 
     // E-W-N-S
-    if (block.lock()->hasInterpolationFlagCF(DIR_PP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagCF(dPP0) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_MM0) && !block.lock()->hasInterpolationFlagCF(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagCF(dMM0) && !block.lock()->hasInterpolationFlagCF(dM00) &&
+        !block.lock()->hasInterpolationFlagCF(d0M0)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (minX2 == TminX2)
             minX2 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_PM0) && !block.lock()->hasInterpolationFlagCF(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagCF(dPM0) && !block.lock()->hasInterpolationFlagCF(dP00) &&
+        !block.lock()->hasInterpolationFlagCF(d0M0)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (minX2 == TminX2)
             minX2 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_MP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagCF(dMP0) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(dM00)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (maxX2 == TmaxX2)
@@ -1842,29 +1842,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     //	////T-B-E-W
-    if (block.lock()->hasInterpolationFlagCF(DIR_P0P) && !block.lock()->hasInterpolationFlagCF(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(dP0P) && !block.lock()->hasInterpolationFlagCF(dP00) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (maxX3 == TmaxX3)
             maxX3 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_M0M) && !block.lock()->hasInterpolationFlagCF(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(dM0M) && !block.lock()->hasInterpolationFlagCF(dM00) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_P0M) && !block.lock()->hasInterpolationFlagCF(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(dP0M) && !block.lock()->hasInterpolationFlagCF(dP00) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_M0P) && !block.lock()->hasInterpolationFlagCF(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(dM0P) && !block.lock()->hasInterpolationFlagCF(dM00) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (minX1 == TminX1)
             minX1 += 2;
         if (maxX3 == TmaxX3)
@@ -1872,29 +1872,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     ////T-B-N-S
-    if (block.lock()->hasInterpolationFlagCF(DIR_0PP) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d0PP) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
         if (maxX3 == TmaxX3)
             maxX3 -= 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0MM) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(d0MM) && !block.lock()->hasInterpolationFlagCF(d0M0) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (minX2 == TminX2)
             minX2 += 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0PM) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagCF(d0PM) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(d00M)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 2;
         if (minX3 == TminX3)
             minX3 += 2;
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0MP) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d0MP) && !block.lock()->hasInterpolationFlagCF(d0M0) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (minX2 == TminX2)
             minX2 += 2;
         if (maxX3 == TmaxX3)
@@ -1902,8 +1902,8 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     // if
-    // (block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0P0)
-    // && !block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P00))
+    // (block.lock()->hasInterpolationFlagCF(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0P0)
+    // && !block.lock()->hasInterpolationFlagCF(D3Q27System::dP00))
     //{
     //   if (maxX1==TmaxX1) maxX1 -= 2;
     //   if (maxX2==TmaxX2) maxX2 -= 2;
@@ -1937,7 +1937,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::findCFnodes()
     using namespace D3Q27System;
     using namespace vf::lbm::dir;
 
-    if (block.lock()->hasInterpolationFlagCF(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagCF(dM00)) {
         lMinX1 = 1;
         lMaxX1 = lMinX1 + 1;
 
@@ -1957,8 +1957,8 @@ void CoarseToFineVectorConnector<VectorTransmitter>::findCFnodes()
         getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false);
         findCFnodes(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
     }
-    if (block.lock()->hasInterpolationFlagCF(DIR_0PP) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagCF(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagCF(d0PP) && !block.lock()->hasInterpolationFlagCF(d0P0) &&
+        !block.lock()->hasInterpolationFlagCF(d00P)) {
         lMinX2 = maxX2 - 3;
         lMaxX2 = lMinX2 + 1;
         lMinX3 = maxX3 - 3;
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.cpp b/src/cpu/core/Connectors/FineToCoarseVectorConnector.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.cpp
rename to src/cpu/core/Connectors/FineToCoarseVectorConnector.cpp
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.h b/src/cpu/core/Connectors/FineToCoarseVectorConnector.h
similarity index 85%
rename from src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.h
rename to src/cpu/core/Connectors/FineToCoarseVectorConnector.h
index 94222fee2940dc13411b4c7520ac64a5ab942478..7b92bac07e2cd606fcf4f5531c6992e442bf4ee1 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.h
+++ b/src/cpu/core/Connectors/FineToCoarseVectorConnector.h
@@ -147,16 +147,16 @@ FineToCoarseVectorConnector<VectorTransmitter>::FineToCoarseVectorConnector(SPtr
 {
     using namespace vf::lbm::dir;
 
-    if (!(sendDir == DIR_P00 || sendDir == DIR_M00 || sendDir == DIR_0P0 ||
-          sendDir == DIR_0M0 || sendDir == DIR_00P || sendDir == DIR_00M ||
-          sendDir == DIR_PP0 || sendDir == DIR_MM0 || sendDir == DIR_PM0 ||
-          sendDir == DIR_MP0 || sendDir == DIR_P0P || sendDir == DIR_M0M ||
-          sendDir == DIR_P0M || sendDir == DIR_M0P || sendDir == DIR_0PP ||
-          sendDir == DIR_0MM || sendDir == DIR_0PM || sendDir == DIR_0MP
+    if (!(sendDir == dP00 || sendDir == dM00 || sendDir == d0P0 ||
+          sendDir == d0M0 || sendDir == d00P || sendDir == d00M ||
+          sendDir == dPP0 || sendDir == dMM0 || sendDir == dPM0 ||
+          sendDir == dMP0 || sendDir == dP0P || sendDir == dM0M ||
+          sendDir == dP0M || sendDir == dM0P || sendDir == d0PP ||
+          sendDir == d0MM || sendDir == d0PM || sendDir == d0MP
 
-          || sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_PMP ||
-          sendDir == DIR_MMP || sendDir == DIR_PPM || sendDir == DIR_MPM ||
-          sendDir == DIR_PMM || sendDir == DIR_MMM
+          || sendDir == dPPP || sendDir == dMPP || sendDir == dPMP ||
+          sendDir == dMMP || sendDir == dPPM || sendDir == dMPM ||
+          sendDir == dPMM || sendDir == dMMM
 
           )) {
         throw UbException(UB_EXARGS, "invalid constructor for this direction");
@@ -240,44 +240,44 @@ void FineToCoarseVectorConnector<VectorTransmitter>::init()
     int iCellSize       = 1; // size of interpolation cell
 
     switch (this->sendDir) {
-        case DIR_P00:
-        case DIR_M00:
+        case dP00:
+        case dM00:
             sendSize = (bMaxX2 - 1) / 2 * (bMaxX3 - 1) / 2 * sendDataPerNode * iCellSize;
             break;
-        case DIR_0P0:
-        case DIR_0M0:
+        case d0P0:
+        case d0M0:
             sendSize = (bMaxX1 - 1) / 2 * (bMaxX3 - 1) / 2 * sendDataPerNode * iCellSize;
             break;
-        case DIR_00P:
-        case DIR_00M:
+        case d00P:
+        case d00M:
             sendSize = (bMaxX1 - 1) / 2 * (bMaxX2 - 1) / 2 * sendDataPerNode * iCellSize;
             break;
-        case DIR_PP0:
-        case DIR_MM0:
-        case DIR_PM0:
-        case DIR_MP0:
+        case dPP0:
+        case dMM0:
+        case dPM0:
+        case dMP0:
             sendSize = (3 * bMaxX3 - 3) * sendDataPerNode * iCellSize;
             break; // buffer overhead, should be (3*bMaxX3-6) for even bMax3
-        case DIR_P0P:
-        case DIR_M0M:
-        case DIR_P0M:
-        case DIR_M0P:
+        case dP0P:
+        case dM0M:
+        case dP0M:
+        case dM0P:
             sendSize = (3 * bMaxX2 - 3) * sendDataPerNode * iCellSize;
             break;
-        case DIR_0PP:
-        case DIR_0MM:
-        case DIR_0PM:
-        case DIR_0MP:
+        case d0PP:
+        case d0MM:
+        case d0PM:
+        case d0MP:
             sendSize = (3 * bMaxX1 - 3) * sendDataPerNode * iCellSize;
             break;
-        case DIR_PPP:
-        case DIR_MPP:
-        case DIR_PMP:
-        case DIR_MMP:
-        case DIR_PPM:
-        case DIR_MPM:
-        case DIR_PMM:
-        case DIR_MMM:
+        case dPPP:
+        case dMPP:
+        case dPMP:
+        case dMMP:
+        case dPPM:
+        case dMPM:
+        case dPMM:
+        case dMMM:
             sendSize = 3 * (3 * bMaxX1 - 3) * sendDataPerNode * iCellSize;
             break;
         default:
@@ -327,42 +327,42 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
     //////////////
 
     switch (sendDir) {
-        case DIR_P00:
+        case dP00:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = maxX1 - 7;
             lMaxX1 = lMinX1 + 1;
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_M00:
+        case dM00:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = 5;
             lMaxX1 = lMinX1 + 1;
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_0P0:
+        case d0P0:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX2 = maxX2 - 7;
             lMaxX2 = lMinX2 + 1;
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_0M0:
+        case d0M0:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX2 = 5;
             lMaxX2 = lMinX2 + 1;
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_00P:
+        case d00P:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX3 = maxX3 - 7;
             lMaxX3 = lMinX3 + 1;
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_00M:
+        case d00M:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX3 = 5;
@@ -371,7 +371,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
         //	////N-S-E-W
-        case DIR_PP0:
+        case dPP0:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = maxX1 - 7;
@@ -386,7 +386,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             lMaxX2 = lMinX2 + 5;
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_MM0:
+        case dMM0:
 
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
@@ -403,7 +403,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_PM0:
+        case dPM0:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = maxX1 - 7;
@@ -420,7 +420,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
 
-        case DIR_MP0:
+        case dMP0:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = 1;
@@ -436,7 +436,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //////T-B-E-W
-        case DIR_P0P:
+        case dP0P:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = maxX1 - 7;
@@ -452,7 +452,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_M0M:
+        case dM0M:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = 1;
@@ -468,7 +468,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_P0M:
+        case dP0M:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = maxX1 - 7;
@@ -484,7 +484,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_M0P:
+        case dM0P:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX1 = 1;
@@ -501,7 +501,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
             ///////////////T-B-N-S
             //
-        case DIR_0PP:
+        case d0PP:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX2 = maxX2 - 7;
@@ -517,7 +517,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_0MM:
+        case d0MM:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX2 = 1;
@@ -533,7 +533,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_0PM:
+        case d0PM:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX2 = maxX2 - 7;
@@ -549,7 +549,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_0MP:
+        case d0MP:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
             lMinX2 = 1;
@@ -566,7 +566,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
         // TNE
-        case DIR_PPP:
+        case dPPP:
             lMinX1 = maxX1 - 7;
             lMaxX1 = maxX1 - 6;
             lMinX2 = maxX2 - 7;
@@ -593,7 +593,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
         // TNW
-        case DIR_MPP:
+        case dMPP:
             lMinX1 = 5;
             lMaxX1 = 6;
             lMinX2 = maxX2 - 7;
@@ -622,7 +622,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
         //      TSE
-        case DIR_PMP:
+        case dPMP:
             lMinX1 = maxX1 - 7;
             lMaxX1 = maxX1 - 6;
             lMinX2 = 1;
@@ -649,7 +649,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
         //      TSW
-        case DIR_MMP:
+        case dMMP:
             lMinX1 = 5;
             lMaxX1 = 6;
             lMinX2 = 1;
@@ -676,7 +676,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
         //      BNE
-        case DIR_PPM:
+        case dPPM:
             lMinX1 = maxX1 - 7;
             lMaxX1 = maxX1 - 6;
             lMinX2 = maxX2 - 7;
@@ -703,7 +703,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
 
             break;
         //      BNW
-        case DIR_MPM:
+        case dMPM:
             lMinX1 = 5;
             lMaxX1 = 6;
             lMinX2 = maxX2 - 7;
@@ -731,7 +731,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
         //      BSE
-        case DIR_PMM:
+        case dPMM:
             lMinX1 = maxX1 - 7;
             lMaxX1 = maxX1 - 6;
             lMinX2 = 1;
@@ -759,7 +759,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             break;
 
         // BSW
-        case DIR_MMM:
+        case dMMM:
             lMinX1 = 5;
             lMaxX1 = 6;
             lMinX2 = 1;
@@ -878,42 +878,42 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
     lMaxX3 = maxX3 - 1;
 
     switch (sendDir) {
-        case DIR_P00:
+        case dP00:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 1;
             getLocalMinMaxCF(maxX2, lMinX2, lMaxX2);
             getLocalMinMaxCF(maxX3, lMinX3, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_M00:
+        case dM00:
             lMinX1 = 2;
             lMaxX1 = lMinX1 + 1;
             getLocalMinMaxCF(maxX2, lMinX2, lMaxX2);
             getLocalMinMaxCF(maxX3, lMinX3, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_0P0:
+        case d0P0:
             lMinX2 = maxX2 - 4;
             lMaxX2 = lMinX2 + 1;
             getLocalMinMaxCF(maxX1, lMinX1, lMaxX1);
             getLocalMinMaxCF(maxX3, lMinX3, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_0M0:
+        case d0M0:
             lMinX2 = 2;
             lMaxX2 = lMinX2 + 1;
             getLocalMinMaxCF(maxX1, lMinX1, lMaxX1);
             getLocalMinMaxCF(maxX3, lMinX3, lMaxX3);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_00P:
+        case d00P:
             lMinX3 = maxX3 - 4;
             lMaxX3 = lMinX3 + 1;
             getLocalMinMaxCF(maxX1, lMinX1, lMaxX1);
             getLocalMinMaxCF(maxX2, lMinX2, lMaxX2);
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
-        case DIR_00M:
+        case d00M:
             lMinX3 = 2;
             lMaxX3 = lMinX3 + 1;
             getLocalMinMaxCF(maxX1, lMinX1, lMaxX1);
@@ -922,7 +922,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             break;
 
             /////E-W-N-S
-        case DIR_PP0:
+        case dPP0:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = maxX2 - 4;
@@ -931,7 +931,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_MM0:
+        case dMM0:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = 0;
@@ -940,7 +940,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_PM0:
+        case dPM0:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = 0;
@@ -949,7 +949,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_MP0:
+        case dMP0:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 3;
             lMinX2 = maxX2 - 4;
@@ -959,7 +959,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             break;
         //
         //	/////T-B-E-W
-        case DIR_P0P:
+        case dP0P:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = maxX3 - 4;
@@ -968,7 +968,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_M0M:
+        case dM0M:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = 0;
@@ -977,7 +977,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_P0M:
+        case dP0M:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = 0;
@@ -986,7 +986,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_M0P:
+        case dM0P:
             lMinX1 = 0;
             lMaxX1 = lMinX1 + 3;
             lMinX3 = maxX3 - 4;
@@ -997,7 +997,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
 
         //	////////////////T-B-N-S
         //
-        case DIR_0PP:
+        case d0PP:
             lMinX2 = maxX2 - 4;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = maxX3 - 4;
@@ -1006,7 +1006,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_0MM:
+        case d0MM:
             lMinX2 = 0;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = 0;
@@ -1015,7 +1015,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_0PM:
+        case d0PM:
             lMinX2 = maxX2 - 4;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = 0;
@@ -1024,7 +1024,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        case DIR_0MP:
+        case d0MP:
             lMinX2 = 0;
             lMaxX2 = lMinX2 + 3;
             lMinX3 = maxX3 - 4;
@@ -1034,7 +1034,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             break;
 
         //   //TNE
-        case DIR_PPP:
+        case dPPP:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 1;
             lMinX2 = maxX2 - 4;
@@ -1044,7 +1044,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //   TNW
-        case DIR_MPP:
+        case dMPP:
             lMinX1 = 0;
             lMaxX1 = 3;
             lMinX2 = maxX2 - 4;
@@ -1054,7 +1054,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //   TSE
-        case DIR_PMP:
+        case dPMP:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 1;
             lMinX2 = 0;
@@ -1064,7 +1064,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //   TSW
-        case DIR_MMP:
+        case dMMP:
             lMinX1 = 0;
             lMaxX1 = 3;
             lMinX2 = 0;
@@ -1074,7 +1074,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //   BNE
-        case DIR_PPM:
+        case dPPM:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 1;
             lMinX2 = maxX2 - 4;
@@ -1084,7 +1084,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //   BNW
-        case DIR_MPM:
+        case dMPM:
             lMinX1 = 0;
             lMaxX1 = 3;
             lMinX2 = maxX2 - 4;
@@ -1094,7 +1094,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             //   BSE
-        case DIR_PMM:
+        case dPMM:
             lMinX1 = maxX1 - 4;
             lMaxX1 = maxX1 - 1;
             lMinX2 = 0;
@@ -1104,7 +1104,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
             // BSW
-        case DIR_MMM:
+        case dMMM:
             lMinX1 = 0;
             lMaxX1 = 3;
             lMinX2 = 0;
@@ -1174,56 +1174,56 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     int TmaxX2 = maxX2;
     int TmaxX3 = maxX3;
 
-    if (block.lock()->hasInterpolationFlagFC(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagFC(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagFC(dM00)) {
         if (minX1 == TminX1)
             minX1 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0P0)) {
+    if (block.lock()->hasInterpolationFlagFC(d0P0)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagFC(d0M0)) {
         if (minX2 == TminX2)
             minX2 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(d00P)) {
         if (maxX3 == TmaxX3)
             maxX3 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(d00M)) {
         if (minX3 == TminX3)
             minX3 += 4;
     }
 
     ////////////
     /////E-W-N-S
-    if (block.lock()->hasInterpolationFlagFC(DIR_PP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagFC(dPP0) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_MM0) && !block.lock()->hasInterpolationFlagFC(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagFC(dMM0) && !block.lock()->hasInterpolationFlagFC(dM00) &&
+        !block.lock()->hasInterpolationFlagFC(d0M0)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (minX2 == TminX2)
             minX2 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_PM0) && !block.lock()->hasInterpolationFlagFC(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagFC(dPM0) && !block.lock()->hasInterpolationFlagFC(dP00) &&
+        !block.lock()->hasInterpolationFlagFC(d0M0)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (minX2 == TminX2)
             minX2 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_MP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagFC(dMP0) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(dM00)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (maxX2 == TmaxX2)
@@ -1231,29 +1231,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     //////T-B-E-W
-    if (block.lock()->hasInterpolationFlagFC(DIR_P0P) && !block.lock()->hasInterpolationFlagFC(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(dP0P) && !block.lock()->hasInterpolationFlagFC(dP00) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (maxX3 == TmaxX3)
             maxX3 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_M0M) && !block.lock()->hasInterpolationFlagFC(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(dM0M) && !block.lock()->hasInterpolationFlagFC(dM00) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_P0M) && !block.lock()->hasInterpolationFlagFC(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(dP0M) && !block.lock()->hasInterpolationFlagFC(dP00) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_M0P) && !block.lock()->hasInterpolationFlagFC(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(dM0P) && !block.lock()->hasInterpolationFlagFC(dM00) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (maxX3 == TmaxX3)
@@ -1261,29 +1261,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     ////T-B-N-S
-    if (block.lock()->hasInterpolationFlagFC(DIR_0PP) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(d0PP) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
         if (maxX3 == TmaxX3)
             maxX3 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0MM) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(d0MM) && !block.lock()->hasInterpolationFlagFC(d0M0) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (minX2 == TminX2)
             minX2 += 4;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0PM) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(d0PM) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0MP) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(d0MP) && !block.lock()->hasInterpolationFlagFC(d0M0) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (minX2 == TminX2)
             minX2 += 4;
         if (maxX3 == TmaxX3)
@@ -1291,10 +1291,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     // if
-    // (block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0P0)
-    // && !block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P00)) if
-    // (!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_00P) &&
-    // !block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P00))
+    // (block.lock()->hasInterpolationFlagFC(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0P0)
+    // && !block.lock()->hasInterpolationFlagFC(D3Q27System::dP00)) if
+    // (!block.lock()->hasInterpolationFlagFC(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d00P) &&
+    // !block.lock()->hasInterpolationFlagFC(D3Q27System::dP00))
     //{
     //   if (maxX1==TmaxX1) maxX1 -= 3;
     //   if (maxX2==TmaxX2) maxX2 -= 3;
@@ -1317,56 +1317,56 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     int TmaxX2 = maxX2;
     int TmaxX3 = maxX3;
 
-    if (block.lock()->hasInterpolationFlagFC(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagFC(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagFC(dM00)) {
         if (minX1 == TminX1)
             minX1 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0P0)) {
+    if (block.lock()->hasInterpolationFlagFC(d0P0)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagFC(d0M0)) {
         if (minX2 == TminX2)
             minX2 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(d00P)) {
         if (maxX3 == TmaxX3)
             maxX3 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(d00M)) {
         if (minX3 == TminX3)
             minX3 += 4;
     }
 
     ////////////
     /////E-W-N-S
-    if (block.lock()->hasInterpolationFlagFC(DIR_PP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_P00)) {
+    if (block.lock()->hasInterpolationFlagFC(dPP0) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(dP00)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_MM0) && !block.lock()->hasInterpolationFlagFC(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagFC(dMM0) && !block.lock()->hasInterpolationFlagFC(dM00) &&
+        !block.lock()->hasInterpolationFlagFC(d0M0)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (minX2 == TminX2)
             minX2 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_PM0) && !block.lock()->hasInterpolationFlagFC(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block.lock()->hasInterpolationFlagFC(dPM0) && !block.lock()->hasInterpolationFlagFC(dP00) &&
+        !block.lock()->hasInterpolationFlagFC(d0M0)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (minX2 == TminX2)
             minX2 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_MP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_M00)) {
+    if (block.lock()->hasInterpolationFlagFC(dMP0) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(dM00)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (maxX2 == TmaxX2)
@@ -1374,29 +1374,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     //////T-B-E-W
-    if (block.lock()->hasInterpolationFlagFC(DIR_P0P) && !block.lock()->hasInterpolationFlagFC(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(dP0P) && !block.lock()->hasInterpolationFlagFC(dP00) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (maxX3 == TmaxX3)
             maxX3 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_M0M) && !block.lock()->hasInterpolationFlagFC(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(dM0M) && !block.lock()->hasInterpolationFlagFC(dM00) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_P0M) && !block.lock()->hasInterpolationFlagFC(DIR_P00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(dP0M) && !block.lock()->hasInterpolationFlagFC(dP00) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (maxX1 == TmaxX1)
             maxX1 -= 3;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_M0P) && !block.lock()->hasInterpolationFlagFC(DIR_M00) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(dM0P) && !block.lock()->hasInterpolationFlagFC(dM00) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (minX1 == TminX1)
             minX1 += 4;
         if (maxX3 == TmaxX3)
@@ -1404,29 +1404,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     ////T-B-N-S
-    if (block.lock()->hasInterpolationFlagFC(DIR_0PP) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(d0PP) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
         if (maxX3 == TmaxX3)
             maxX3 -= 3;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0MM) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(d0MM) && !block.lock()->hasInterpolationFlagFC(d0M0) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (minX2 == TminX2)
             minX2 += 4;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0PM) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00M)) {
+    if (block.lock()->hasInterpolationFlagFC(d0PM) && !block.lock()->hasInterpolationFlagFC(d0P0) &&
+        !block.lock()->hasInterpolationFlagFC(d00M)) {
         if (maxX2 == TmaxX2)
             maxX2 -= 3;
         if (minX3 == TminX3)
             minX3 += 4;
     }
-    if (block.lock()->hasInterpolationFlagFC(DIR_0MP) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) &&
-        !block.lock()->hasInterpolationFlagFC(DIR_00P)) {
+    if (block.lock()->hasInterpolationFlagFC(d0MP) && !block.lock()->hasInterpolationFlagFC(d0M0) &&
+        !block.lock()->hasInterpolationFlagFC(d00P)) {
         if (minX2 == TminX2)
             minX2 += 4;
         if (maxX3 == TmaxX3)
@@ -1434,8 +1434,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
     }
 
     // if
-    // (block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0P0)
-    // && !block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P00))
+    // (block.lock()->hasInterpolationFlagFC(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0P0)
+    // && !block.lock()->hasInterpolationFlagFC(D3Q27System::dP00))
     //{
     //   if (maxX1==TmaxX1) maxX1 -= 3;
     //   if (maxX2==TmaxX2) maxX2 -= 3;
@@ -1462,8 +1462,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
     using namespace vf::lbm::dir;
 
     switch (sendDir) {
-        case DIR_P00:
-        case DIR_M00:
+        case dP00:
+        case dM00:
             if (connType == OddEvenSE)
                 minX2 += oMinX2;
             if (connType == OddOddNE) {
@@ -1473,8 +1473,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
             if (connType == EvenOddNW)
                 minX3 += oMinX3;
             break;
-        case DIR_0P0:
-        case DIR_0M0:
+        case d0P0:
+        case d0M0:
             if (connType == OddEvenSE)
                 minX1 += oMinX1;
             if (connType == OddOddNE) {
@@ -1484,8 +1484,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
             if (connType == EvenOddNW)
                 minX3 += oMinX3;
             break;
-        case DIR_00P:
-        case DIR_00M:
+        case d00P:
+        case d00M:
             if (connType == OddEvenSE)
                 minX1 += oMinX1;
             if (connType == OddOddNE) {
@@ -1497,10 +1497,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
             break;
 
             /////
-        case DIR_PP0:
-        case DIR_MM0:
-        case DIR_PM0:
-        case DIR_MP0:
+        case dPP0:
+        case dMM0:
+        case dPM0:
+        case dMP0:
             // case SW:
             if (connType == OddEvenSE)
                 // minX2 += oMinX2;
@@ -1513,10 +1513,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
             break;
 
             //////
-        case DIR_P0P:
-        case DIR_M0M:
-        case DIR_P0M:
-        case DIR_M0P:
+        case dP0P:
+        case dM0M:
+        case dP0M:
+        case dM0P:
             if (connType == OddEvenSE)
                 //		minX1 += oMinX1;
                 if (connType == OddOddNE) {
@@ -1528,10 +1528,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
             break;
 
         //	//////
-        case DIR_0PP:
-        case DIR_0MM:
-        case DIR_0PM:
-        case DIR_0MP:
+        case d0PP:
+        case d0MM:
+        case d0PM:
+        case d0MP:
             if (connType == OddEvenSE)
                 minX1 += oMinX1;
             if (connType == OddOddNE) {
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnectorTest.cpp b/src/cpu/core/Connectors/FineToCoarseVectorConnectorTest.cpp
similarity index 98%
rename from src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnectorTest.cpp
rename to src/cpu/core/Connectors/FineToCoarseVectorConnectorTest.cpp
index 1d400f74e8e4a2def9419c4e5288c512db7af936..81d56102ef98b6dfd6695e087fcad181dbcac7e0 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnectorTest.cpp
+++ b/src/cpu/core/Connectors/FineToCoarseVectorConnectorTest.cpp
@@ -27,7 +27,7 @@ TEST_F(FineToCoarseVectorConnectorTest, getLocalMinMax)
 {
     using namespace vf::lbm::dir;
 
-    int sendDir = DIR_P00;
+    int sendDir = dP00;
     block->setInterpolationFlagFC(sendDir);
     //FineToCoarseVectorConnector(SPtr<Block3D> block, VectorTransmitterPtr sender, VectorTransmitterPtr receiver,
                                 //int sendDir, InterpolationProcessorPtr iprocessor, CFconnectorType connType);
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.cpp b/src/cpu/core/Connectors/FullDirectConnector.cpp
similarity index 87%
rename from src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.cpp
rename to src/cpu/core/Connectors/FullDirectConnector.cpp
index 7a12ef1bb30796bd2aa24fd6c61c07f26295950d..d40fc36cb9a15e1b7d1664be2ab2beeee74df394 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/FullDirectConnector.cpp
@@ -62,7 +62,7 @@ void FullDirectConnector::exchangeData()
     using namespace vf::lbm::dir;
 
     // EAST
-    if (sendDir == DIR_P00) {
+    if (sendDir == dP00) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x2 = 1; x2 < maxX2; x2++) {
                 exchangeData(maxX1 - 1, x2, x3, 0, x2, x3);
@@ -70,7 +70,7 @@ void FullDirectConnector::exchangeData()
         }
     }
     // WEST
-    else if (sendDir == DIR_M00) {
+    else if (sendDir == dM00) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x2 = 1; x2 < maxX2; x2++) {
                 exchangeData(1, x2, x3, maxX1, x2, x3);
@@ -78,7 +78,7 @@ void FullDirectConnector::exchangeData()
         }
     }
     // NORTH
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 exchangeData(x1, maxX2 - 1, x3, x1, 0, x3);
@@ -86,7 +86,7 @@ void FullDirectConnector::exchangeData()
         }
     }
     // SOUTH
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 exchangeData(x1, 1, x3, x1, maxX2, x3);
@@ -95,7 +95,7 @@ void FullDirectConnector::exchangeData()
     }
 
     // TOP
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = 1; x2 < maxX2; x2++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 exchangeData(x1, x2, maxX3 - 1, x1, x2, 0);
@@ -103,7 +103,7 @@ void FullDirectConnector::exchangeData()
         }
     }
     // BOTTOM
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = 1; x2 < maxX2; x2++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 exchangeData(x1, x2, 1, x1, x2, maxX3);
@@ -111,77 +111,77 @@ void FullDirectConnector::exchangeData()
         }
     }
     // NORTHEAST
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             exchangeData(maxX1 - 1, maxX2 - 1, x3, 0, 0, x3);
         }
     }
     // NORTHWEST
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             exchangeData(1, maxX2 - 1, x3, maxX1, 0, x3);
         }
     }
     // SOUTHWEST
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             exchangeData(1, 1, x3, maxX1, maxX2, x3);
         }
     }
     // SOUTHEAST
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             exchangeData(maxX1 - 1, 1, x3, 0, maxX2, x3);
         }
-    } else if (sendDir == DIR_P0P)
+    } else if (sendDir == dP0P)
         for (int x2 = 1; x2 < maxX2; x2++) {
             exchangeData(maxX1 - 1, x2, maxX3 - 1, 0, x2, 0);
         }
-    else if (sendDir == DIR_M0M)
+    else if (sendDir == dM0M)
         for (int x2 = 1; x2 < maxX2; x2++) {
             exchangeData(1, x2, 1, maxX1, x2, maxX3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = 1; x2 < maxX2; x2++) {
             exchangeData(maxX1 - 1, x2, 1, 0, x2, maxX3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = 1; x2 < maxX2; x2++) {
             exchangeData(1, x2, maxX3 - 1, maxX1, x2, 0);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = 1; x1 < maxX1; x1++) {
             exchangeData(x1, maxX2 - 1, maxX3 - 1, x1, 0, 0);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = 1; x1 < maxX1; x1++) {
             exchangeData(x1, 1, 1, x1, maxX2, maxX3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = 1; x1 < maxX1; x1++) {
             exchangeData(x1, maxX2 - 1, 1, x1, 0, maxX3);
         }
 
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = 1; x1 < maxX1; x1++) {
             exchangeData(x1, 1, maxX3 - 1, x1, maxX2, 0);
         }
 
-    else if (sendDir == DIR_MMP) {
+    else if (sendDir == dMMP) {
         exchangeData(1, 1, maxX3 - 1, maxX1, maxX2, 0);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         exchangeData(maxX1 - 1, 1, maxX3 - 1, 0, maxX2, 0);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         exchangeData(1, maxX2 - 1, maxX3 - 1, maxX1, 0, 0);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         exchangeData(maxX1 - 1, maxX2 - 1, maxX3 - 1, 0, 0, 0);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         exchangeData(1, 1, 1, maxX1, maxX2, maxX3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         exchangeData(maxX1 - 1, 1, 1, 0, maxX2, maxX3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         exchangeData(1, maxX2 - 1, 1, maxX1, 0, maxX3);
-    } else if (sendDir == DIR_PPM) {
+    } else if (sendDir == dPPM) {
         exchangeData(maxX1 - 1, maxX2 - 1, 1, 0, 0, maxX3);
     } else
         UB_THROW(UbException(UB_EXARGS, "unknown dir"));
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h b/src/cpu/core/Connectors/FullDirectConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h
rename to src/cpu/core/Connectors/FullDirectConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.cpp b/src/cpu/core/Connectors/FullVectorConnector.cpp
similarity index 81%
rename from src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.cpp
rename to src/cpu/core/Connectors/FullVectorConnector.cpp
index d4cb17d156016815b20f8420a4699a428899af51..ff501a8ecfc123ffba8eb1a0906126281b22ead8 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/FullVectorConnector.cpp
@@ -65,7 +65,7 @@ void FullVectorConnector::fillData()
 
     int index = 0;
     // EAST
-    if (sendDir == DIR_P00) {
+    if (sendDir == dP00) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x2 = 1; x2 < maxX2; x2++) {
                 fillData(sdata, index, maxX1 - 1, x2, x3);
@@ -73,7 +73,7 @@ void FullVectorConnector::fillData()
         }
     }
     // WEST
-    else if (sendDir == DIR_M00) {
+    else if (sendDir == dM00) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x2 = 1; x2 < maxX2; x2++) {
                 fillData(sdata, index, 1, x2, x3);
@@ -81,7 +81,7 @@ void FullVectorConnector::fillData()
         }
     }
     // NORTH
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 fillData(sdata, index, x1, maxX2 - 1, x3);
@@ -89,7 +89,7 @@ void FullVectorConnector::fillData()
         }
     }
     // SOUTH
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 fillData(sdata, index, x1, 1, x3);
@@ -97,7 +97,7 @@ void FullVectorConnector::fillData()
         }
     }
     // TOP
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = 1; x2 < maxX2; x2++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 fillData(sdata, index, x1, x2, maxX3 - 1);
@@ -105,7 +105,7 @@ void FullVectorConnector::fillData()
         }
     }
     // BOTTOM
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = 1; x2 < maxX2; x2++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 fillData(sdata, index, x1, x2, 1);
@@ -113,24 +113,24 @@ void FullVectorConnector::fillData()
         }
     }
     // NE NW SW SE
-    else if (sendDir == DIR_PP0 || sendDir == DIR_MP0 || sendDir == DIR_MM0 ||
-             sendDir == DIR_PM0) {
+    else if (sendDir == dPP0 || sendDir == dMP0 || sendDir == dMM0 ||
+             sendDir == dPM0) {
         int x1 = 0;
         int x2 = 0;
         switch (sendDir) {
-            case DIR_PP0:
+            case dPP0:
                 x1 = maxX1 - 1;
                 x2 = maxX2 - 1;
                 break;
-            case DIR_MP0:
+            case dMP0:
                 x1 = 1;
                 x2 = maxX2 - 1;
                 break;
-            case DIR_MM0:
+            case dMM0:
                 x1 = 1;
                 x2 = 1;
                 break;
-            case DIR_PM0:
+            case dPM0:
                 x1 = maxX1 - 1;
                 x2 = 1;
                 break;
@@ -140,24 +140,24 @@ void FullVectorConnector::fillData()
         }
     }
     // TE TW BW BE
-    else if (sendDir == DIR_P0P || sendDir == DIR_M0P || sendDir == DIR_M0M ||
-             sendDir == DIR_P0M) {
+    else if (sendDir == dP0P || sendDir == dM0P || sendDir == dM0M ||
+             sendDir == dP0M) {
         int x1 = 0;
         int x3 = 0;
         switch (sendDir) {
-            case DIR_P0P:
+            case dP0P:
                 x1 = maxX1 - 1;
                 x3 = maxX3 - 1;
                 break;
-            case DIR_M0P:
+            case dM0P:
                 x1 = 1;
                 x3 = maxX3 - 1;
                 break;
-            case DIR_M0M:
+            case dM0M:
                 x1 = 1;
                 x3 = 1;
                 break;
-            case DIR_P0M:
+            case dP0M:
                 x1 = maxX1 - 1;
                 x3 = 1;
                 break;
@@ -167,24 +167,24 @@ void FullVectorConnector::fillData()
         }
     }
     // TN BN BS TS
-    else if (sendDir == DIR_0PP || sendDir == DIR_0PM || sendDir == DIR_0MM ||
-             sendDir == DIR_0MP) {
+    else if (sendDir == d0PP || sendDir == d0PM || sendDir == d0MM ||
+             sendDir == d0MP) {
         int x2 = 0;
         int x3 = 0;
         switch (sendDir) {
-            case DIR_0PP:
+            case d0PP:
                 x3 = maxX3 - 1;
                 x2 = maxX2 - 1;
                 break;
-            case DIR_0PM:
+            case d0PM:
                 x3 = 1;
                 x2 = maxX2 - 1;
                 break;
-            case DIR_0MM:
+            case d0MM:
                 x3 = 1;
                 x2 = 1;
                 break;
-            case DIR_0MP:
+            case d0MP:
                 x3 = maxX3 - 1;
                 x2 = 1;
                 break;
@@ -194,49 +194,49 @@ void FullVectorConnector::fillData()
         }
     }
     // TNE TNW TSW TSE BNE BNW BSW BSE
-    else if (sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_MMP ||
-             sendDir == DIR_PMP || sendDir == DIR_PPM || sendDir == DIR_MPM ||
-             sendDir == DIR_MMM || sendDir == DIR_PMM) {
+    else if (sendDir == dPPP || sendDir == dMPP || sendDir == dMMP ||
+             sendDir == dPMP || sendDir == dPPM || sendDir == dMPM ||
+             sendDir == dMMM || sendDir == dPMM) {
         int x1 = 0;
         int x2 = 0;
         int x3 = 0;
         switch (sendDir) {
-            case DIR_PPP:
+            case dPPP:
                 x1 = maxX1 - 1;
                 x2 = maxX2 - 1;
                 x3 = maxX3 - 1;
                 break;
-            case DIR_MPP:
+            case dMPP:
                 x1 = 1;
                 x2 = maxX2 - 1;
                 x3 = maxX3 - 1;
                 break;
-            case DIR_MMP:
+            case dMMP:
                 x1 = 1;
                 x2 = 1;
                 x3 = maxX3 - 1;
                 break;
-            case DIR_PMP:
+            case dPMP:
                 x1 = maxX1 - 1;
                 x2 = 1;
                 x3 = maxX3 - 1;
                 break;
-            case DIR_PPM:
+            case dPPM:
                 x1 = maxX1 - 1;
                 x2 = maxX2 - 1;
                 x3 = 1;
                 break;
-            case DIR_MPM:
+            case dMPM:
                 x1 = 1;
                 x2 = maxX2 - 1;
                 x3 = 1;
                 break;
-            case DIR_MMM:
+            case dMMM:
                 x1 = 1;
                 x2 = 1;
                 x3 = 1;
                 break;
-            case DIR_PMM:
+            case dPMM:
                 x1 = maxX1 - 1;
                 x2 = 1;
                 x3 = 1;
@@ -261,37 +261,37 @@ void FullVectorConnector::distributeData()
 
     int index = 0;
 
-    if (sendDir == DIR_M00) {
+    if (sendDir == dM00) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x2 = 1; x2 < maxX2; x2++) {
                 distributeData(rdata, index, 0, x2, x3);
             }
         }
-    } else if (sendDir == DIR_P00) {
+    } else if (sendDir == dP00) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x2 = 1; x2 < maxX2; x2++) {
                 distributeData(rdata, index, maxX1, x2, x3);
             }
         }
-    } else if (sendDir == DIR_0M0) {
+    } else if (sendDir == d0M0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 distributeData(rdata, index, x1, 0, x3);
             }
         }
-    } else if (sendDir == DIR_0P0) {
+    } else if (sendDir == d0P0) {
         for (int x3 = 1; x3 < maxX3; x3++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 distributeData(rdata, index, x1, maxX2, x3);
             }
         }
-    } else if (sendDir == DIR_00M) {
+    } else if (sendDir == d00M) {
         for (int x2 = 1; x2 < maxX2; x2++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 distributeData(rdata, index, x1, x2, 0);
             }
         }
-    } else if (sendDir == DIR_00P) {
+    } else if (sendDir == d00P) {
         for (int x2 = 1; x2 < maxX2; x2++) {
             for (int x1 = 1; x1 < maxX1; x1++) {
                 distributeData(rdata, index, x1, x2, maxX3);
@@ -299,25 +299,25 @@ void FullVectorConnector::distributeData()
         }
     }
     // NE NW SW SE
-    else if (sendDir == DIR_PP0 || sendDir == DIR_MP0 || sendDir == DIR_MM0 ||
-             sendDir == DIR_PM0) {
+    else if (sendDir == dPP0 || sendDir == dMP0 || sendDir == dMM0 ||
+             sendDir == dPM0) {
         int x1 = 0;
         int x2 = 0;
         switch (sendDir) // wenn sendir NE dann kommen werte von SW
         {
-            case DIR_PP0:
+            case dPP0:
                 x1 = maxX1;
                 x2 = maxX2;
                 break;
-            case DIR_MP0:
+            case dMP0:
                 x1 = 0;
                 x2 = maxX2;
                 break;
-            case DIR_MM0:
+            case dMM0:
                 x1 = 0;
                 x2 = 0;
                 break;
-            case DIR_PM0:
+            case dPM0:
                 x1 = maxX1;
                 x2 = 0;
                 break;
@@ -328,27 +328,27 @@ void FullVectorConnector::distributeData()
 
     }
     // TE TW BW BE
-    else if (sendDir == DIR_P0P || sendDir == DIR_M0P || sendDir == DIR_M0M ||
-             sendDir == DIR_P0M)
+    else if (sendDir == dP0P || sendDir == dM0P || sendDir == dM0M ||
+             sendDir == dP0M)
 
     {
         int x1 = 0;
         int x3 = 0;
         switch (sendDir) // wenn sendir NE dann kommen werte von SW
         {
-            case DIR_P0P:
+            case dP0P:
                 x1 = maxX1;
                 x3 = maxX3;
                 break;
-            case DIR_M0P:
+            case dM0P:
                 x1 = 0;
                 x3 = maxX3;
                 break;
-            case DIR_M0M:
+            case dM0M:
                 x1 = 0;
                 x3 = 0;
                 break;
-            case DIR_P0M:
+            case dP0M:
                 x1 = maxX1;
                 x3 = 0;
                 break;
@@ -358,24 +358,24 @@ void FullVectorConnector::distributeData()
         }
     }
     // TN BN BS TS
-    else if (sendDir == DIR_0PP || sendDir == DIR_0PM || sendDir == DIR_0MM ||
-             sendDir == DIR_0MP) {
+    else if (sendDir == d0PP || sendDir == d0PM || sendDir == d0MM ||
+             sendDir == d0MP) {
         int x2 = 0;
         int x3 = 0;
         switch (sendDir) {
-            case DIR_0PP:
+            case d0PP:
                 x3 = maxX3;
                 x2 = maxX2;
                 break;
-            case DIR_0PM:
+            case d0PM:
                 x3 = 0;
                 x2 = maxX2;
                 break;
-            case DIR_0MM:
+            case d0MM:
                 x3 = 0;
                 x2 = 0;
                 break;
-            case DIR_0MP:
+            case d0MP:
                 x3 = maxX3;
                 x2 = 0;
                 break;
@@ -385,50 +385,50 @@ void FullVectorConnector::distributeData()
         }
     }
     // TNE TNW TSW TSE BNE BNW BSW BSE
-    else if (sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_MMP ||
-             sendDir == DIR_PMP || sendDir == DIR_PPM || sendDir == DIR_MPM ||
-             sendDir == DIR_MMM || sendDir == DIR_PMM) {
+    else if (sendDir == dPPP || sendDir == dMPP || sendDir == dMMP ||
+             sendDir == dPMP || sendDir == dPPM || sendDir == dMPM ||
+             sendDir == dMMM || sendDir == dPMM) {
         int x1 = 0;
         int x2 = 0;
         int x3 = 0;
 
         switch (sendDir) {
-            case DIR_PPP:
+            case dPPP:
                 x1 = maxX1;
                 x2 = maxX2;
                 x3 = maxX3;
                 break;
-            case DIR_MPP:
+            case dMPP:
                 x1 = 0;
                 x2 = maxX2;
                 x3 = maxX3;
                 break;
-            case DIR_MMP:
+            case dMMP:
                 x1 = 0;
                 x2 = 0;
                 x3 = maxX3;
                 break;
-            case DIR_PMP:
+            case dPMP:
                 x1 = maxX1;
                 x2 = 0;
                 x3 = maxX3;
                 break;
-            case DIR_PPM:
+            case dPPM:
                 x1 = maxX1;
                 x2 = maxX2;
                 x3 = 0;
                 break;
-            case DIR_MPM:
+            case dMPM:
                 x1 = 0;
                 x2 = maxX2;
                 x3 = 0;
                 break;
-            case DIR_MMM:
+            case dMMM:
                 x1 = 0;
                 x2 = 0;
                 x3 = 0;
                 break;
-            case DIR_PMM:
+            case dPMM:
                 x1 = maxX1;
                 x2 = 0;
                 x3 = 0;
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.h b/src/cpu/core/Connectors/FullVectorConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.h
rename to src/cpu/core/Connectors/FullVectorConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h b/src/cpu/core/Connectors/LocalBlock3DConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h
rename to src/cpu/core/Connectors/LocalBlock3DConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.cpp b/src/cpu/core/Connectors/OneDistributionFullDirectConnector.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.cpp
rename to src/cpu/core/Connectors/OneDistributionFullDirectConnector.cpp
diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.h b/src/cpu/core/Connectors/OneDistributionFullDirectConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.h
rename to src/cpu/core/Connectors/OneDistributionFullDirectConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp
similarity index 75%
rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp
rename to src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp
index be66dfb5b0785198e826f3fe2017aa479b92b53a..2ce640d47d00836d8b289ccb159a07455c280b45 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp
@@ -21,51 +21,51 @@ void OneDistributionFullVectorConnector::init()
 
     int anz = 27;
     switch (sendDir) {
-        case DIR_000:
+        case d000:
             UB_THROW(UbException(UB_EXARGS, "ZERO not allowed"));
             break;
-        case DIR_P00:
-        case DIR_M00:
+        case dP00:
+        case dM00:
             sender->getData().resize(maxX2 * maxX3 * anz, c0o1);
             break;
-        case DIR_0P0:
-        case DIR_0M0:
+        case d0P0:
+        case d0M0:
             sender->getData().resize(maxX1 * maxX3 * anz, c0o1);
             break;
-        case DIR_00P:
-        case DIR_00M:
+        case d00P:
+        case d00M:
             sender->getData().resize(maxX1 * maxX2 * anz, c0o1);
             break;
 
-        case DIR_PP0:
-        case DIR_MM0:
-        case DIR_PM0:
-        case DIR_MP0:
+        case dPP0:
+        case dMM0:
+        case dPM0:
+        case dMP0:
             sender->getData().resize(maxX3 * anz, c0o1);
             break;
 
-        case DIR_P0P:
-        case DIR_M0M:
-        case DIR_P0M:
-        case DIR_M0P:
+        case dP0P:
+        case dM0M:
+        case dP0M:
+        case dM0P:
             sender->getData().resize(maxX2 * anz, c0o1);
             break;
 
-        case DIR_0PP:
-        case DIR_0MM:
-        case DIR_0PM:
-        case DIR_0MP:
+        case d0PP:
+        case d0MM:
+        case d0PM:
+        case d0MP:
             sender->getData().resize(maxX1 * anz, c0o1);
             break;
 
-        case DIR_PPP:
-        case DIR_MMM:
-        case DIR_PPM:
-        case DIR_MMP:
-        case DIR_PMP:
-        case DIR_MPM:
-        case DIR_PMM:
-        case DIR_MPP:
+        case dPPP:
+        case dMMM:
+        case dPPM:
+        case dMMP:
+        case dPMP:
+        case dMPM:
+        case dPMM:
+        case dMPP:
             sender->getData().resize(anz, c0o1);
             break;
 
diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.h b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.h
rename to src/cpu/core/Connectors/OneDistributionFullVectorConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.cpp b/src/cpu/core/Connectors/RemoteBlock3DConnector.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.cpp
rename to src/cpu/core/Connectors/RemoteBlock3DConnector.cpp
diff --git a/src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.h b/src/cpu/core/Connectors/RemoteBlock3DConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.h
rename to src/cpu/core/Connectors/RemoteBlock3DConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
similarity index 94%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
index 4856743128041bbfef3048fb53c9d8110de498fb..ce4f88cb7760c412a27fa53e9823353bcfa1f494 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
@@ -96,7 +96,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
     int maxX3m3 = maxX3 - 3;
 
     // EAST
-    if (sendDir == DIR_P00) {
+    if (sendDir == dP00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 exchangeData(maxX1m3, x2, x3, minX1, x2, x3);
@@ -105,7 +105,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // WEST
-    else if (sendDir == DIR_M00) {
+    else if (sendDir == dM00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 exchangeData(minX1p3, x2, x3, maxX1, x2, x3);
@@ -114,7 +114,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // NORTH
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, maxX2m3, x3, x1, minX2, x3);
@@ -123,7 +123,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // SOUTH
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, minX2p3, x3, x1, maxX2, x3);
@@ -133,7 +133,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
     }
 
     // TOP
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, x2, maxX3m3, x1, x2, minX3);
@@ -142,7 +142,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // BOTTOM
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, x2, minX3p3, x1, x2, maxX3);
@@ -151,7 +151,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // NORTHEAST
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(maxX1m3, maxX2m3, x3, minX1, minX2, x3);
             exchangeData(maxX1m2, maxX2m2, x3, minX1p1, minX2p1, x3);
@@ -160,7 +160,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // NORTHWEST
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(minX1p3, maxX2m3, x3, maxX1, minX2, x3);
             exchangeData(minX1p2, maxX2m2, x3, maxX1m1, minX2p1, x3);
@@ -169,7 +169,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // SOUTHWEST
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(minX1p3, minX2p3, x3, maxX1, maxX2, x3);
             exchangeData(minX1p2, minX2p2, x3, maxX1m1, maxX2m1, x3);
@@ -178,70 +178,70 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // SOUTHEAST
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(maxX1m3, minX2p3, x3, minX1, maxX2, x3);
             exchangeData(maxX1m2, minX2p2, x3, minX1p1, maxX2m1, x3);
             exchangeData(maxX1m3, minX2p2, x3, minX1, maxX2m1, x3);
             exchangeData(maxX1m2, minX2p3, x3, minX1p1, maxX2, x3);
         }
-    } else if (sendDir == DIR_P0P)
+    } else if (sendDir == dP0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(maxX1m3, x2, maxX3m3, minX1, x2, minX3);
             exchangeData(maxX1m2, x2, maxX3m2, minX1p1, x2, minX3p1);
             exchangeData(maxX1m3, x2, maxX3m2, minX1, x2, minX3p1);
             exchangeData(maxX1m2, x2, maxX3m3, minX1p1, x2, minX3);
         }
-    else if (sendDir == DIR_M0M)
+    else if (sendDir == dM0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(minX1p3, x2, minX3p3, maxX1, x2, maxX3);
             exchangeData(minX1p2, x2, minX3p2, maxX1m1, x2, maxX3m1);
             exchangeData(minX1p3, x2, minX3p2, maxX1, x2, maxX3m1);
             exchangeData(minX1p2, x2, minX3p3, maxX1m1, x2, maxX3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(maxX1m3, x2, minX3p3, minX1, x2, maxX3);
             exchangeData(maxX1m2, x2, minX3p2, minX1p1, x2, maxX3m1);
             exchangeData(maxX1m3, x2, minX3p2, minX1, x2, maxX3m1);
             exchangeData(maxX1m2, x2, minX3p3, minX1p1, x2, maxX3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(minX1p3, x2, maxX3m3, maxX1, x2, minX3);
             exchangeData(minX1p2, x2, maxX3m2, maxX1m1, x2, minX3p1);
             exchangeData(minX1p3, x2, maxX3m2, maxX1, x2, minX3p1);
             exchangeData(minX1p2, x2, maxX3m3, maxX1m1, x2, minX3);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, maxX2m3, maxX3m3, x1, minX2, minX3);
             exchangeData(x1, maxX2m2, maxX3m2, x1, minX2p1, minX3p1);
             exchangeData(x1, maxX2m3, maxX3m2, x1, minX2, minX3p1);
             exchangeData(x1, maxX2m2, maxX3m3, x1, minX2p1, minX3);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, minX2p3, minX3p3, x1, maxX2, maxX3);
             exchangeData(x1, minX2p2, minX3p2, x1, maxX2m1, maxX3m1);
             exchangeData(x1, minX2p3, minX3p2, x1, maxX2, maxX3m1);
             exchangeData(x1, minX2p2, minX3p3, x1, maxX2m1, maxX3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, maxX2m3, minX3p3, x1, minX2, maxX3);
             exchangeData(x1, maxX2m2, minX3p2, x1, minX2p1, maxX3m1);
             exchangeData(x1, maxX2m3, minX3p2, x1, minX2, maxX3m1);
             exchangeData(x1, maxX2m2, minX3p3, x1, minX2p1, maxX3);
         }
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, minX2p3, maxX3m3, x1, maxX2, minX3);
             exchangeData(x1, minX2p2, maxX3m2, x1, maxX2m1, minX3p1);
             exchangeData(x1, minX2p3, maxX3m2, x1, maxX2, minX3p1);
             exchangeData(x1, minX2p2, maxX3m3, x1, maxX2m1, minX3);
         }
-    else if (sendDir == DIR_MMP) {
+    else if (sendDir == dMMP) {
         exchangeData(minX1p3, minX2p3, maxX3m3, maxX1, maxX2, minX3);
         exchangeData(minX1p2, minX2p2, maxX3m2, maxX1m1, maxX2m1, minX3p1);
         exchangeData(minX1p3, minX2p2, maxX3m2, maxX1, maxX2m1, minX3p1);
@@ -250,7 +250,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, minX2p3, maxX3m2, maxX1, maxX2, minX3p1);
         exchangeData(minX1p3, minX2p2, maxX3m3, maxX1, maxX2m1, minX3);
         exchangeData(minX1p2, minX2p3, maxX3m3, maxX1m1, maxX2, minX3);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         exchangeData(maxX1m3, minX1p3, maxX3m3, minX1, maxX2, minX3);
         exchangeData(maxX1m2, minX1p2, maxX3m2, minX1p1, maxX2m1, minX3p1);
         exchangeData(maxX1m3, minX1p2, maxX3m2, minX1, maxX2m1, minX3p1);
@@ -259,7 +259,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(maxX1m3, minX1p3, maxX3m2, minX1, maxX2, minX3p1);
         exchangeData(maxX1m3, minX1p2, maxX3m3, minX1, maxX2m1, minX3);
         exchangeData(maxX1m2, minX1p3, maxX3m3, minX1p1, maxX2, minX3);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         exchangeData(minX1p3, maxX2m3, maxX3m3, maxX1, minX2, minX3);
         exchangeData(minX1p2, maxX2m2, maxX3m2, maxX1m1, minX2p1, minX3p1);
         exchangeData(minX1p3, maxX2m2, maxX3m2, maxX1, minX2p1, minX3p1);
@@ -268,7 +268,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, maxX2m3, maxX3m2, maxX1, minX2, minX3p1);
         exchangeData(minX1p3, maxX2m2, maxX3m3, maxX1, minX2p1, minX3);
         exchangeData(minX1p2, maxX2m3, maxX3m3, maxX1m1, minX2, minX3);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         exchangeData(maxX1m3, maxX2m3, maxX3m3, minX1, minX2, minX3);
         exchangeData(maxX1m2, maxX2m2, maxX3m2, minX1p1, minX2p1, minX3p1);
         exchangeData(maxX1m3, maxX2m2, maxX3m2, minX1, minX2p1, minX3p1);
@@ -277,7 +277,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(maxX1m3, maxX2m3, maxX3m2, minX1, minX2, minX3p1);
         exchangeData(maxX1m3, maxX2m2, maxX3m3, minX1, minX2p1, minX3);
         exchangeData(maxX1m2, maxX2m3, maxX3m3, minX1p1, minX2, minX3);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         exchangeData(minX1p3, minX2p3, minX3p3, maxX1, maxX2, maxX3);
         exchangeData(minX1p2, minX2p2, minX3p2, maxX1m1, maxX2m1, maxX3m1);
         exchangeData(minX1p3, minX2p2, minX3p2, maxX1, maxX2m1, maxX3m1);
@@ -286,7 +286,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, minX2p3, minX3p2, maxX1, maxX2, maxX3m1);
         exchangeData(minX1p3, minX2p2, minX3p3, maxX1, maxX2m1, maxX3);
         exchangeData(minX1p2, minX2p3, minX3p3, maxX1m1, maxX2, maxX3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         exchangeData(maxX1m3, minX2p3, minX3p3, minX1, maxX2, maxX3);
         exchangeData(maxX1m2, minX2p2, minX3p2, minX1p1, maxX2m1, maxX3m1);
         exchangeData(maxX1m3, minX2p2, minX3p2, minX1, maxX2m1, maxX3m1);
@@ -295,7 +295,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(maxX1m3, minX2p3, minX3p2, minX1, maxX2, maxX3m1);
         exchangeData(maxX1m3, minX2p2, minX3p3, minX1, maxX2m1, maxX3);
         exchangeData(maxX1m2, minX2p3, minX3p3, minX1p1, maxX2, maxX3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         exchangeData(minX1p3, maxX2m3, minX3p3, maxX1, minX2, maxX3);
         exchangeData(minX1p2, maxX2m2, minX3p2, maxX1m1, minX2p1, maxX3m1);
         exchangeData(minX1p3, maxX2m2, minX3p2, maxX1, minX2p1, maxX3m1);
@@ -304,7 +304,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, maxX2m3, minX3p2, maxX1, minX2, maxX3m1);
         exchangeData(minX1p3, maxX2m2, minX3p3, maxX1, minX2p1, maxX3);
         exchangeData(minX1p2, maxX2m3, minX3p3, maxX1m1, minX2, maxX3);
-    } else if (sendDir == DIR_PPM) {
+    } else if (sendDir == dPPM) {
         exchangeData(maxX1m3, maxX2m3, minX3p3, minX1, minX2, maxX3);
         exchangeData(maxX1m2, maxX2m2, minX3p2, minX1p1, minX2p1, maxX3m1);
         exchangeData(maxX1m3, maxX2m2, minX3p2, minX1, minX2p1, maxX3m1);
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h
rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp
similarity index 90%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp
rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp
index a94da62ef440c3f1ff67f48d75d0ba18c34887ec..3f6789e01d31108bb1fe4d879bde5a32a295eb51 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp
@@ -63,37 +63,37 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::init()
    int anz = 3*27+1;
    switch (sendDir)
    {
-   case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
-   case DIR_P00:
-   case DIR_M00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1);   break;
-   case DIR_0P0:
-   case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1);   break;
-   case DIR_00P:
-   case DIR_00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1);   break;
+   case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
+   case dP00:
+   case dM00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1);   break;
+   case d0P0:
+   case d0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1);   break;
+   case d00P:
+   case d00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1);   break;
 
-   case DIR_PP0:
-   case DIR_MM0:
-   case DIR_PM0:
-   case DIR_MP0:  sender->getData().resize(maxX3*anz*4, c0o1);   break;
+   case dPP0:
+   case dMM0:
+   case dPM0:
+   case dMP0:  sender->getData().resize(maxX3*anz*4, c0o1);   break;
 
-   case DIR_P0P:
-   case DIR_M0M:
-   case DIR_P0M:
-   case DIR_M0P:  sender->getData().resize(maxX2*anz*4, c0o1);   break;
+   case dP0P:
+   case dM0M:
+   case dP0M:
+   case dM0P:  sender->getData().resize(maxX2*anz*4, c0o1);   break;
 
-   case DIR_0PP:
-   case DIR_0MM:
-   case DIR_0PM:
-   case DIR_0MP:  sender->getData().resize(maxX1*anz*4, c0o1);   break;
+   case d0PP:
+   case d0MM:
+   case d0PM:
+   case d0MP:  sender->getData().resize(maxX1*anz*4, c0o1);   break;
 
-   case DIR_PPP:
-   case DIR_MMM:
-   case DIR_PPM:
-   case DIR_MMP:
-   case DIR_PMP:
-   case DIR_MPM:
-   case DIR_PMM:
-   case DIR_MPP:  sender->getData().resize(anz*8, c0o1);   break;
+   case dPPP:
+   case dMMM:
+   case dPPM:
+   case dMMP:
+   case dPMP:
+   case dMPM:
+   case dPMM:
+   case dMPP:  sender->getData().resize(anz*8, c0o1);   break;
 
    default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir"));
    }
@@ -143,7 +143,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
 
     int index = 0;
     // EAST
-    if (sendDir == DIR_P00) {
+    if (sendDir == dP00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 fillData(sdata, index, maxX1m3, x2, x3);
@@ -152,7 +152,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // WEST
-    else if (sendDir == DIR_M00) {
+    else if (sendDir == dM00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 fillData(sdata, index, minX1p3, x2, x3);
@@ -161,7 +161,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // NORTH
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, maxX2m3, x3);
@@ -170,7 +170,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // SOUTH
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, minX2p3, x3);
@@ -180,7 +180,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
     }
 
     // TOP
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, x2, maxX3m3);
@@ -189,7 +189,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // BOTTOM
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, x2, minX3p3);
@@ -198,7 +198,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // NORTHEAST
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, maxX1m3, maxX2m3, x3);
             fillData(sdata, index, maxX1m2, maxX2m2, x3);
@@ -207,7 +207,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // NORTHWEST
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, minX1p3, maxX2m3, x3);
             fillData(sdata, index, minX1p2, maxX2m2, x3);
@@ -216,7 +216,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // SOUTHWEST
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, minX1p3, minX2p3, x3);
             fillData(sdata, index, minX1p2, minX2p2, x3);
@@ -225,70 +225,70 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // SOUTHEAST
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, maxX1m3, minX2p3, x3);
             fillData(sdata, index, maxX1m2, minX2p2, x3);
             fillData(sdata, index, maxX1m3, minX2p2, x3);
             fillData(sdata, index, maxX1m2, minX2p3, x3);
         }
-    } else if (sendDir == DIR_P0P)
+    } else if (sendDir == dP0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, maxX1m3, x2, maxX3m3);
             fillData(sdata, index, maxX1m2, x2, maxX3m2);
             fillData(sdata, index, maxX1m3, x2, maxX3m2);
             fillData(sdata, index, maxX1m2, x2, maxX3m3);
         }
-    else if (sendDir == DIR_M0M)
+    else if (sendDir == dM0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, minX1p3, x2, minX3p3);
             fillData(sdata, index, minX1p2, x2, minX3p2);
             fillData(sdata, index, minX1p3, x2, minX3p2);
             fillData(sdata, index, minX1p2, x2, minX3p3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, maxX1m3, x2, minX3p3);
             fillData(sdata, index, maxX1m2, x2, minX3p2);
             fillData(sdata, index, maxX1m3, x2, minX3p2);
             fillData(sdata, index, maxX1m2, x2, minX3p3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, minX1p3, x2, maxX3m3);
             fillData(sdata, index, minX1p2, x2, maxX3m2);
             fillData(sdata, index, minX1p3, x2, maxX3m2);
             fillData(sdata, index, minX1p2, x2, maxX3m3);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, maxX2m3, maxX3m3);
             fillData(sdata, index, x1, maxX2m2, maxX3m2);
             fillData(sdata, index, x1, maxX2m3, maxX3m2);
             fillData(sdata, index, x1, maxX2m2, maxX3m3);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, minX2p3, minX3p3);
             fillData(sdata, index, x1, minX2p2, minX3p2);
             fillData(sdata, index, x1, minX2p3, minX3p2);
             fillData(sdata, index, x1, minX2p2, minX3p3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, maxX2m3, minX3p3);
             fillData(sdata, index, x1, maxX2m2, minX3p2);
             fillData(sdata, index, x1, maxX2m3, minX3p2);
             fillData(sdata, index, x1, maxX2m2, minX3p3);
         }
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, minX2p3, maxX3m3);
             fillData(sdata, index, x1, minX2p2, maxX3m2);
             fillData(sdata, index, x1, minX2p3, maxX3m2);
             fillData(sdata, index, x1, minX2p2, maxX3m3);
         }
-    else if (sendDir == DIR_MMP) {
+    else if (sendDir == dMMP) {
         fillData(sdata, index, minX1p3, minX2p3, maxX3m3);
         fillData(sdata, index, minX1p2, minX2p2, maxX3m2);
         fillData(sdata, index, minX1p3, minX2p2, maxX3m2);
@@ -297,7 +297,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, minX2p3, maxX3m2);
         fillData(sdata, index, minX1p3, minX2p2, maxX3m3);
         fillData(sdata, index, minX1p2, minX2p3, maxX3m3);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         fillData(sdata, index, maxX1m3, minX1p3, maxX3m3);
         fillData(sdata, index, maxX1m2, minX1p2, maxX3m2);
         fillData(sdata, index, maxX1m3, minX1p2, maxX3m2);
@@ -306,7 +306,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, maxX1m3, minX1p3, maxX3m2);
         fillData(sdata, index, maxX1m3, minX1p2, maxX3m3);
         fillData(sdata, index, maxX1m2, minX1p3, maxX3m3);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         fillData(sdata, index, minX1p3, maxX2m3, maxX3m3);
         fillData(sdata, index, minX1p2, maxX2m2, maxX3m2);
         fillData(sdata, index, minX1p3, maxX2m2, maxX3m2);
@@ -315,7 +315,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, maxX2m3, maxX3m2);
         fillData(sdata, index, minX1p3, maxX2m2, maxX3m3);
         fillData(sdata, index, minX1p2, maxX2m3, maxX3m3);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         fillData(sdata, index, maxX1m3, maxX2m3, maxX3m3);
         fillData(sdata, index, maxX1m2, maxX2m2, maxX3m2);
         fillData(sdata, index, maxX1m3, maxX2m2, maxX3m2);
@@ -324,7 +324,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, maxX1m3, maxX2m3, maxX3m2);
         fillData(sdata, index, maxX1m3, maxX2m2, maxX3m3);
         fillData(sdata, index, maxX1m2, maxX2m3, maxX3m3);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         fillData(sdata, index, minX1p3, minX2p3, minX3p3);
         fillData(sdata, index, minX1p2, minX2p2, minX3p2);
         fillData(sdata, index, minX1p3, minX2p2, minX3p2);
@@ -333,7 +333,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, minX2p3, minX3p2);
         fillData(sdata, index, minX1p3, minX2p2, minX3p3);
         fillData(sdata, index, minX1p2, minX2p3, minX3p3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         fillData(sdata, index, maxX1m3, minX2p3, minX3p3);
         fillData(sdata, index, maxX1m2, minX2p2, minX3p2);
         fillData(sdata, index, maxX1m3, minX2p2, minX3p2);
@@ -342,7 +342,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, maxX1m3, minX2p3, minX3p2);
         fillData(sdata, index, maxX1m3, minX2p2, minX3p3);
         fillData(sdata, index, maxX1m2, minX2p3, minX3p3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         fillData(sdata, index, minX1p3, maxX2m3, minX3p3);
         fillData(sdata, index, minX1p2, maxX2m2, minX3p2);
         fillData(sdata, index, minX1p3, maxX2m2, minX3p2);
@@ -351,7 +351,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, maxX2m3, minX3p2);
         fillData(sdata, index, minX1p3, maxX2m2, minX3p3);
         fillData(sdata, index, minX1p2, maxX2m3, minX3p3);
-    } else if (sendDir == DIR_PPM) {
+    } else if (sendDir == dPPM) {
         fillData(sdata, index, maxX1m3, maxX2m3, minX3p3);
         fillData(sdata, index, maxX1m2, maxX2m2, minX3p2);
         fillData(sdata, index, maxX1m3, maxX2m2, minX3p2);
@@ -407,7 +407,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
     int maxX3m2 = maxX3 - 2;
     //int maxX3m3 = maxX3 - 3;
 
-    if (sendDir == DIR_M00) {
+    if (sendDir == dM00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 distributeData(rdata, index, minX1, x2, x3);
@@ -415,7 +415,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_P00) {
+    else if (sendDir == dP00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 distributeData(rdata, index, maxX1, x2, x3);
@@ -423,7 +423,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, minX2, x3);
@@ -431,7 +431,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, maxX2, x3);
@@ -439,7 +439,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, x2, minX3);
@@ -447,7 +447,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, x2, maxX3);
@@ -455,7 +455,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, minX1, minX2, x3);
             distributeData(rdata, index, minX1p1, minX2p1, x3);
@@ -463,7 +463,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             distributeData(rdata, index, minX1p1, minX2, x3);
         }
     }
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, maxX1, minX2, x3);
             distributeData(rdata, index, maxX1m1, minX2p1, x3);
@@ -471,7 +471,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             distributeData(rdata, index, maxX1m1, minX2, x3);
         }
     }
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, maxX1, maxX2, x3);
             distributeData(rdata, index, maxX1m1, maxX2m1, x3);
@@ -479,70 +479,70 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             distributeData(rdata, index, maxX1m1, maxX2, x3);
         }
     }
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, minX1, maxX2, x3);
             distributeData(rdata, index, minX1p1, maxX2m1, x3);
             distributeData(rdata, index, minX1, maxX2m1, x3);
             distributeData(rdata, index, minX1p1, maxX2, x3);
         }
-    } else if (sendDir == DIR_M0M)
+    } else if (sendDir == dM0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, minX1, x2, minX3);
             distributeData(rdata, index, minX1p1, x2, minX3p1);
             distributeData(rdata, index, minX1, x2, minX3p1);
             distributeData(rdata, index, minX1p1, x2, minX3);
         }
-    else if (sendDir == DIR_P0P)
+    else if (sendDir == dP0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, maxX1, x2, maxX3);
             distributeData(rdata, index, maxX1m1, x2, maxX3m1);
             distributeData(rdata, index, maxX1, x2, maxX3m1);
             distributeData(rdata, index, maxX1m1, x2, maxX3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, minX1, x2, maxX3);
             distributeData(rdata, index, minX1p1, x2, maxX3m1);
             distributeData(rdata, index, minX1, x2, maxX3m1);
             distributeData(rdata, index, minX1p1, x2, maxX3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, maxX1, x2, minX3);
             distributeData(rdata, index, maxX1m1, x2, minX3p1);
             distributeData(rdata, index, maxX1, x2, minX3p1);
             distributeData(rdata, index, maxX1m1, x2, minX3);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, minX2, minX3);
             distributeData(rdata, index, x1, minX2p1, minX3p1);
             distributeData(rdata, index, x1, minX2, minX3p1);
             distributeData(rdata, index, x1, minX2p1, minX3);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, maxX2, maxX3);
             distributeData(rdata, index, x1, maxX2m1, maxX3m1);
             distributeData(rdata, index, x1, maxX2, maxX3m1);
             distributeData(rdata, index, x1, maxX2m1, maxX3);
         }
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, minX2, maxX3);
             distributeData(rdata, index, x1, minX2p1, maxX3m1);
             distributeData(rdata, index, x1, minX2, maxX3m1);
             distributeData(rdata, index, x1, minX2p1, maxX3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, maxX2, minX3);
             distributeData(rdata, index, x1, maxX2m1, minX3p1);
             distributeData(rdata, index, x1, maxX2, minX3p1);
             distributeData(rdata, index, x1, maxX2m1, minX3);
         }
-    else if (sendDir == DIR_PPM) {
+    else if (sendDir == dPPM) {
         distributeData(rdata, index, maxX1, maxX2, minX3);
         distributeData(rdata, index, maxX1m1, maxX2m1, minX3p1);
         distributeData(rdata, index, maxX1, maxX2m1, minX3p1);
@@ -551,7 +551,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, maxX2, minX3p1);
         distributeData(rdata, index, maxX1, maxX2m1, minX3);
         distributeData(rdata, index, maxX1m1, maxX2, minX3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         distributeData(rdata, index, minX1, maxX2, minX3);
         distributeData(rdata, index, minX1p1, maxX2m1, minX3p1);
         distributeData(rdata, index, minX1, maxX2m1, minX3p1);
@@ -560,7 +560,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, minX1, maxX2, minX3p1);
         distributeData(rdata, index, minX1, maxX2m1, minX3);
         distributeData(rdata, index, minX1p1, maxX2, minX3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         distributeData(rdata, index, maxX1, minX2, minX3);
         distributeData(rdata, index, maxX1m1, minX2p1, minX3p1);
         distributeData(rdata, index, maxX1, minX2p1, minX3p1);
@@ -569,7 +569,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, minX2, minX3p1);
         distributeData(rdata, index, maxX1, minX2p1, minX3);
         distributeData(rdata, index, maxX1m1, minX2, minX3);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         distributeData(rdata, index, minX1, minX2, minX3);
         distributeData(rdata, index, minX1p1, minX2p1, minX3p1);
         distributeData(rdata, index, minX1, minX2p1, minX3p1);
@@ -578,7 +578,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, minX1, minX2, minX3p1);
         distributeData(rdata, index, minX1, minX2p1, minX3);
         distributeData(rdata, index, minX1p1, minX2, minX3);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         distributeData(rdata, index, maxX1, maxX2, maxX3);
         distributeData(rdata, index, maxX1m1, maxX2m1, maxX3m1);
         distributeData(rdata, index, maxX1, maxX2m1, maxX3m1);
@@ -587,7 +587,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, maxX2, maxX3m1);
         distributeData(rdata, index, maxX1, maxX2m1, maxX3);
         distributeData(rdata, index, maxX1m1, maxX2, maxX3);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         distributeData(rdata, index, minX1, maxX2, maxX3);
         distributeData(rdata, index, minX1p1, maxX2m1, maxX3m1);
         distributeData(rdata, index, minX1, maxX2m1, maxX3m1);
@@ -596,7 +596,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, minX1, maxX2, maxX3m1);
         distributeData(rdata, index, minX1, maxX2m1, maxX3);
         distributeData(rdata, index, minX1p1, maxX2, maxX3);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         distributeData(rdata, index, maxX1, minX2, maxX3);
         distributeData(rdata, index, maxX1m1, minX2p1, maxX3m1);
         distributeData(rdata, index, maxX1, minX2p1, maxX3m1);
@@ -605,7 +605,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, minX2, maxX3m1);
         distributeData(rdata, index, maxX1, minX2p1, maxX3);
         distributeData(rdata, index, maxX1m1, minX2, maxX3);
-    } else if (sendDir == DIR_MMP) {
+    } else if (sendDir == dMMP) {
         distributeData(rdata, index, minX1, minX2, maxX3);
         distributeData(rdata, index, minX1p1, minX2p1, maxX3m1);
         distributeData(rdata, index, minX1, minX2p1, maxX3m1);
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h
rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.cpp
rename to src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.h b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.h
rename to src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp
similarity index 79%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp
rename to src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp
index 65315b4f33ea1d64df96cb919d2335f8130e950e..25d838b81f6dad17ba81c15882c50b4b30be2b40 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp
@@ -62,37 +62,37 @@ void ThreeDistributionsFullVectorConnector::init()
    int anz = 3*27;
    switch (sendDir)
    {
-   case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
-   case DIR_P00:
-   case DIR_M00: sender->getData().resize(maxX2*maxX3*anz, c0o1);   break;
-   case DIR_0P0:
-   case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1);   break;
-   case DIR_00P:
-   case DIR_00M: sender->getData().resize(maxX1*maxX2*anz, c0o1);   break;
+   case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
+   case dP00:
+   case dM00: sender->getData().resize(maxX2*maxX3*anz, c0o1);   break;
+   case d0P0:
+   case d0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1);   break;
+   case d00P:
+   case d00M: sender->getData().resize(maxX1*maxX2*anz, c0o1);   break;
 
-   case DIR_PP0:
-   case DIR_MM0:
-   case DIR_PM0:
-   case DIR_MP0:  sender->getData().resize(maxX3*anz, c0o1);   break;
+   case dPP0:
+   case dMM0:
+   case dPM0:
+   case dMP0:  sender->getData().resize(maxX3*anz, c0o1);   break;
 
-   case DIR_P0P:
-   case DIR_M0M:
-   case DIR_P0M:
-   case DIR_M0P:  sender->getData().resize(maxX2*anz, c0o1);   break;
+   case dP0P:
+   case dM0M:
+   case dP0M:
+   case dM0P:  sender->getData().resize(maxX2*anz, c0o1);   break;
 
-   case DIR_0PP:
-   case DIR_0MM:
-   case DIR_0PM:
-   case DIR_0MP:  sender->getData().resize(maxX1*anz, c0o1);   break;
+   case d0PP:
+   case d0MM:
+   case d0PM:
+   case d0MP:  sender->getData().resize(maxX1*anz, c0o1);   break;
 
-   case DIR_PPP:
-   case DIR_MMM:
-   case DIR_PPM:
-   case DIR_MMP:
-   case DIR_PMP:
-   case DIR_MPM:
-   case DIR_PMM:
-   case DIR_MPP:  sender->getData().resize(anz, c0o1);   break;
+   case dPPP:
+   case dMMM:
+   case dPPM:
+   case dMMP:
+   case dPMP:
+   case dMPM:
+   case dPMM:
+   case dMPP:  sender->getData().resize(anz, c0o1);   break;
 
    default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir"));
    }
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.h b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.h
rename to src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TransmitterType.h b/src/cpu/core/Connectors/TransmitterType.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/TransmitterType.h
rename to src/cpu/core/Connectors/TransmitterType.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
similarity index 94%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
index 121fef6b86040aab370e9ffd925bea0033d61446..7413f237ecc603a73ad6d39a61689b0f9785b042 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
@@ -94,7 +94,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
     int maxX3m3 = maxX3 - 3;
 
     // EAST
-    if (sendDir == DIR_P00) {
+    if (sendDir == dP00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 exchangeData(maxX1m3, x2, x3, minX1, x2, x3);
@@ -103,7 +103,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // WEST
-    else if (sendDir == DIR_M00) {
+    else if (sendDir == dM00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 exchangeData(minX1p3, x2, x3, maxX1, x2, x3);
@@ -112,7 +112,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // NORTH
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, maxX2m3, x3, x1, minX2, x3);
@@ -121,7 +121,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // SOUTH
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, minX2p3, x3, x1, maxX2, x3);
@@ -131,7 +131,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
     }
 
     // TOP
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, x2, maxX3m3, x1, x2, minX3);
@@ -140,7 +140,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // BOTTOM
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 exchangeData(x1, x2, minX3p3, x1, x2, maxX3);
@@ -149,7 +149,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // NORTHEAST
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(maxX1m3, maxX2m3, x3, minX1, minX2, x3);
             exchangeData(maxX1m2, maxX2m2, x3, minX1p1, minX2p1, x3);
@@ -158,7 +158,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // NORTHWEST
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(minX1p3, maxX2m3, x3, maxX1, minX2, x3);
             exchangeData(minX1p2, maxX2m2, x3, maxX1m1, minX2p1, x3);
@@ -167,7 +167,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // SOUTHWEST
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(minX1p3, minX2p3, x3, maxX1, maxX2, x3);
             exchangeData(minX1p2, minX2p2, x3, maxX1m1, maxX2m1, x3);
@@ -176,70 +176,70 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         }
     }
     // SOUTHEAST
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             exchangeData(maxX1m3, minX2p3, x3, minX1, maxX2, x3);
             exchangeData(maxX1m2, minX2p2, x3, minX1p1, maxX2m1, x3);
             exchangeData(maxX1m3, minX2p2, x3, minX1, maxX2m1, x3);
             exchangeData(maxX1m2, minX2p3, x3, minX1p1, maxX2, x3);
         }
-    } else if (sendDir == DIR_P0P)
+    } else if (sendDir == dP0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(maxX1m3, x2, maxX3m3, minX1, x2, minX3);
             exchangeData(maxX1m2, x2, maxX3m2, minX1p1, x2, minX3p1);
             exchangeData(maxX1m3, x2, maxX3m2, minX1, x2, minX3p1);
             exchangeData(maxX1m2, x2, maxX3m3, minX1p1, x2, minX3);
         }
-    else if (sendDir == DIR_M0M)
+    else if (sendDir == dM0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(minX1p3, x2, minX3p3, maxX1, x2, maxX3);
             exchangeData(minX1p2, x2, minX3p2, maxX1m1, x2, maxX3m1);
             exchangeData(minX1p3, x2, minX3p2, maxX1, x2, maxX3m1);
             exchangeData(minX1p2, x2, minX3p3, maxX1m1, x2, maxX3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(maxX1m3, x2, minX3p3, minX1, x2, maxX3);
             exchangeData(maxX1m2, x2, minX3p2, minX1p1, x2, maxX3m1);
             exchangeData(maxX1m3, x2, minX3p2, minX1, x2, maxX3m1);
             exchangeData(maxX1m2, x2, minX3p3, minX1p1, x2, maxX3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             exchangeData(minX1p3, x2, maxX3m3, maxX1, x2, minX3);
             exchangeData(minX1p2, x2, maxX3m2, maxX1m1, x2, minX3p1);
             exchangeData(minX1p3, x2, maxX3m2, maxX1, x2, minX3p1);
             exchangeData(minX1p2, x2, maxX3m3, maxX1m1, x2, minX3);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, maxX2m3, maxX3m3, x1, minX2, minX3);
             exchangeData(x1, maxX2m2, maxX3m2, x1, minX2p1, minX3p1);
             exchangeData(x1, maxX2m3, maxX3m2, x1, minX2, minX3p1);
             exchangeData(x1, maxX2m2, maxX3m3, x1, minX2p1, minX3);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, minX2p3, minX3p3, x1, maxX2, maxX3);
             exchangeData(x1, minX2p2, minX3p2, x1, maxX2m1, maxX3m1);
             exchangeData(x1, minX2p3, minX3p2, x1, maxX2, maxX3m1);
             exchangeData(x1, minX2p2, minX3p3, x1, maxX2m1, maxX3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, maxX2m3, minX3p3, x1, minX2, maxX3);
             exchangeData(x1, maxX2m2, minX3p2, x1, minX2p1, maxX3m1);
             exchangeData(x1, maxX2m3, minX3p2, x1, minX2, maxX3m1);
             exchangeData(x1, maxX2m2, minX3p3, x1, minX2p1, maxX3);
         }
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             exchangeData(x1, minX2p3, maxX3m3, x1, maxX2, minX3);
             exchangeData(x1, minX2p2, maxX3m2, x1, maxX2m1, minX3p1);
             exchangeData(x1, minX2p3, maxX3m2, x1, maxX2, minX3p1);
             exchangeData(x1, minX2p2, maxX3m3, x1, maxX2m1, minX3);
         }
-    else if (sendDir == DIR_MMP) {
+    else if (sendDir == dMMP) {
         exchangeData(minX1p3, minX2p3, maxX3m3, maxX1, maxX2, minX3);
         exchangeData(minX1p2, minX2p2, maxX3m2, maxX1m1, maxX2m1, minX3p1);
         exchangeData(minX1p3, minX2p2, maxX3m2, maxX1, maxX2m1, minX3p1);
@@ -248,7 +248,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, minX2p3, maxX3m2, maxX1, maxX2, minX3p1);
         exchangeData(minX1p3, minX2p2, maxX3m3, maxX1, maxX2m1, minX3);
         exchangeData(minX1p2, minX2p3, maxX3m3, maxX1m1, maxX2, minX3);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         exchangeData(maxX1m3, minX1p3, maxX3m3, minX1, maxX2, minX3);
         exchangeData(maxX1m2, minX1p2, maxX3m2, minX1p1, maxX2m1, minX3p1);
         exchangeData(maxX1m3, minX1p2, maxX3m2, minX1, maxX2m1, minX3p1);
@@ -257,7 +257,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(maxX1m3, minX1p3, maxX3m2, minX1, maxX2, minX3p1);
         exchangeData(maxX1m3, minX1p2, maxX3m3, minX1, maxX2m1, minX3);
         exchangeData(maxX1m2, minX1p3, maxX3m3, minX1p1, maxX2, minX3);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         exchangeData(minX1p3, maxX2m3, maxX3m3, maxX1, minX2, minX3);
         exchangeData(minX1p2, maxX2m2, maxX3m2, maxX1m1, minX2p1, minX3p1);
         exchangeData(minX1p3, maxX2m2, maxX3m2, maxX1, minX2p1, minX3p1);
@@ -266,7 +266,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, maxX2m3, maxX3m2, maxX1, minX2, minX3p1);
         exchangeData(minX1p3, maxX2m2, maxX3m3, maxX1, minX2p1, minX3);
         exchangeData(minX1p2, maxX2m3, maxX3m3, maxX1m1, minX2, minX3);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         exchangeData(maxX1m3, maxX2m3, maxX3m3, minX1, minX2, minX3);
         exchangeData(maxX1m2, maxX2m2, maxX3m2, minX1p1, minX2p1, minX3p1);
         exchangeData(maxX1m3, maxX2m2, maxX3m2, minX1, minX2p1, minX3p1);
@@ -275,7 +275,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(maxX1m3, maxX2m3, maxX3m2, minX1, minX2, minX3p1);
         exchangeData(maxX1m3, maxX2m2, maxX3m3, minX1, minX2p1, minX3);
         exchangeData(maxX1m2, maxX2m3, maxX3m3, minX1p1, minX2, minX3);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         exchangeData(minX1p3, minX2p3, minX3p3, maxX1, maxX2, maxX3);
         exchangeData(minX1p2, minX2p2, minX3p2, maxX1m1, maxX2m1, maxX3m1);
         exchangeData(minX1p3, minX2p2, minX3p2, maxX1, maxX2m1, maxX3m1);
@@ -284,7 +284,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, minX2p3, minX3p2, maxX1, maxX2, maxX3m1);
         exchangeData(minX1p3, minX2p2, minX3p3, maxX1, maxX2m1, maxX3);
         exchangeData(minX1p2, minX2p3, minX3p3, maxX1m1, maxX2, maxX3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         exchangeData(maxX1m3, minX2p3, minX3p3, minX1, maxX2, maxX3);
         exchangeData(maxX1m2, minX2p2, minX3p2, minX1p1, maxX2m1, maxX3m1);
         exchangeData(maxX1m3, minX2p2, minX3p2, minX1, maxX2m1, maxX3m1);
@@ -293,7 +293,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(maxX1m3, minX2p3, minX3p2, minX1, maxX2, maxX3m1);
         exchangeData(maxX1m3, minX2p2, minX3p3, minX1, maxX2m1, maxX3);
         exchangeData(maxX1m2, minX2p3, minX3p3, minX1p1, maxX2, maxX3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         exchangeData(minX1p3, maxX2m3, minX3p3, maxX1, minX2, maxX3);
         exchangeData(minX1p2, maxX2m2, minX3p2, maxX1m1, minX2p1, maxX3m1);
         exchangeData(minX1p3, maxX2m2, minX3p2, maxX1, minX2p1, maxX3m1);
@@ -302,7 +302,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData()
         exchangeData(minX1p3, maxX2m3, minX3p2, maxX1, minX2, maxX3m1);
         exchangeData(minX1p3, maxX2m2, minX3p3, maxX1, minX2p1, maxX3);
         exchangeData(minX1p2, maxX2m3, minX3p3, maxX1m1, minX2, maxX3);
-    } else if (sendDir == DIR_PPM) {
+    } else if (sendDir == dPPM) {
         exchangeData(maxX1m3, maxX2m3, minX3p3, minX1, minX2, maxX3);
         exchangeData(maxX1m2, maxX2m2, minX3p2, minX1p1, minX2p1, maxX3m1);
         exchangeData(maxX1m3, maxX2m2, minX3p2, minX1, minX2p1, maxX3m1);
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h
rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp
similarity index 90%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp
rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp
index f8ff7d5c28bb04e41f51a5223dc9a64bcd0cf317..00f6348a4e3c5d5309ca6a4eb5f5e730f71c13c7 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp
@@ -62,37 +62,37 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::init()
    int anz = 2*27+1;
    switch (sendDir)
    {
-   case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
-   case DIR_P00:
-   case DIR_M00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1);   break;
-   case DIR_0P0:
-   case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1);   break;
-   case DIR_00P:
-   case DIR_00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1);   break;
+   case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
+   case dP00:
+   case dM00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1);   break;
+   case d0P0:
+   case d0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1);   break;
+   case d00P:
+   case d00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1);   break;
 
-   case DIR_PP0:
-   case DIR_MM0:
-   case DIR_PM0:
-   case DIR_MP0:  sender->getData().resize(maxX3*anz*4, c0o1);   break;
+   case dPP0:
+   case dMM0:
+   case dPM0:
+   case dMP0:  sender->getData().resize(maxX3*anz*4, c0o1);   break;
 
-   case DIR_P0P:
-   case DIR_M0M:
-   case DIR_P0M:
-   case DIR_M0P:  sender->getData().resize(maxX2*anz*4, c0o1);   break;
+   case dP0P:
+   case dM0M:
+   case dP0M:
+   case dM0P:  sender->getData().resize(maxX2*anz*4, c0o1);   break;
 
-   case DIR_0PP:
-   case DIR_0MM:
-   case DIR_0PM:
-   case DIR_0MP:  sender->getData().resize(maxX1*anz*4, c0o1);   break;
+   case d0PP:
+   case d0MM:
+   case d0PM:
+   case d0MP:  sender->getData().resize(maxX1*anz*4, c0o1);   break;
 
-   case DIR_PPP:
-   case DIR_MMM:
-   case DIR_PPM:
-   case DIR_MMP:
-   case DIR_PMP:
-   case DIR_MPM:
-   case DIR_PMM:
-   case DIR_MPP:  sender->getData().resize(anz*8, c0o1);   break;
+   case dPPP:
+   case dMMM:
+   case dPPM:
+   case dMMP:
+   case dPMP:
+   case dMPM:
+   case dPMM:
+   case dMPP:  sender->getData().resize(anz*8, c0o1);   break;
 
    default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir"));
    }
@@ -142,7 +142,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
 
     int index = 0;
     // EAST
-    if (sendDir == DIR_P00) {
+    if (sendDir == dP00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 fillData(sdata, index, maxX1m3, x2, x3);
@@ -151,7 +151,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // WEST
-    else if (sendDir == DIR_M00) {
+    else if (sendDir == dM00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 fillData(sdata, index, minX1p3, x2, x3);
@@ -160,7 +160,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // NORTH
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, maxX2m3, x3);
@@ -169,7 +169,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // SOUTH
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, minX2p3, x3);
@@ -179,7 +179,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
     }
 
     // TOP
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, x2, maxX3m3);
@@ -188,7 +188,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // BOTTOM
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 fillData(sdata, index, x1, x2, minX3p3);
@@ -197,7 +197,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // NORTHEAST
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, maxX1m3, maxX2m3, x3);
             fillData(sdata, index, maxX1m2, maxX2m2, x3);
@@ -206,7 +206,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // NORTHWEST
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, minX1p3, maxX2m3, x3);
             fillData(sdata, index, minX1p2, maxX2m2, x3);
@@ -215,7 +215,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // SOUTHWEST
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, minX1p3, minX2p3, x3);
             fillData(sdata, index, minX1p2, minX2p2, x3);
@@ -224,70 +224,70 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         }
     }
     // SOUTHEAST
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             fillData(sdata, index, maxX1m3, minX2p3, x3);
             fillData(sdata, index, maxX1m2, minX2p2, x3);
             fillData(sdata, index, maxX1m3, minX2p2, x3);
             fillData(sdata, index, maxX1m2, minX2p3, x3);
         }
-    } else if (sendDir == DIR_P0P)
+    } else if (sendDir == dP0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, maxX1m3, x2, maxX3m3);
             fillData(sdata, index, maxX1m2, x2, maxX3m2);
             fillData(sdata, index, maxX1m3, x2, maxX3m2);
             fillData(sdata, index, maxX1m2, x2, maxX3m3);
         }
-    else if (sendDir == DIR_M0M)
+    else if (sendDir == dM0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, minX1p3, x2, minX3p3);
             fillData(sdata, index, minX1p2, x2, minX3p2);
             fillData(sdata, index, minX1p3, x2, minX3p2);
             fillData(sdata, index, minX1p2, x2, minX3p3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, maxX1m3, x2, minX3p3);
             fillData(sdata, index, maxX1m2, x2, minX3p2);
             fillData(sdata, index, maxX1m3, x2, minX3p2);
             fillData(sdata, index, maxX1m2, x2, minX3p3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             fillData(sdata, index, minX1p3, x2, maxX3m3);
             fillData(sdata, index, minX1p2, x2, maxX3m2);
             fillData(sdata, index, minX1p3, x2, maxX3m2);
             fillData(sdata, index, minX1p2, x2, maxX3m3);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, maxX2m3, maxX3m3);
             fillData(sdata, index, x1, maxX2m2, maxX3m2);
             fillData(sdata, index, x1, maxX2m3, maxX3m2);
             fillData(sdata, index, x1, maxX2m2, maxX3m3);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, minX2p3, minX3p3);
             fillData(sdata, index, x1, minX2p2, minX3p2);
             fillData(sdata, index, x1, minX2p3, minX3p2);
             fillData(sdata, index, x1, minX2p2, minX3p3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, maxX2m3, minX3p3);
             fillData(sdata, index, x1, maxX2m2, minX3p2);
             fillData(sdata, index, x1, maxX2m3, minX3p2);
             fillData(sdata, index, x1, maxX2m2, minX3p3);
         }
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             fillData(sdata, index, x1, minX2p3, maxX3m3);
             fillData(sdata, index, x1, minX2p2, maxX3m2);
             fillData(sdata, index, x1, minX2p3, maxX3m2);
             fillData(sdata, index, x1, minX2p2, maxX3m3);
         }
-    else if (sendDir == DIR_MMP) {
+    else if (sendDir == dMMP) {
         fillData(sdata, index, minX1p3, minX2p3, maxX3m3);
         fillData(sdata, index, minX1p2, minX2p2, maxX3m2);
         fillData(sdata, index, minX1p3, minX2p2, maxX3m2);
@@ -296,7 +296,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, minX2p3, maxX3m2);
         fillData(sdata, index, minX1p3, minX2p2, maxX3m3);
         fillData(sdata, index, minX1p2, minX2p3, maxX3m3);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         fillData(sdata, index, maxX1m3, minX1p3, maxX3m3);
         fillData(sdata, index, maxX1m2, minX1p2, maxX3m2);
         fillData(sdata, index, maxX1m3, minX1p2, maxX3m2);
@@ -305,7 +305,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, maxX1m3, minX1p3, maxX3m2);
         fillData(sdata, index, maxX1m3, minX1p2, maxX3m3);
         fillData(sdata, index, maxX1m2, minX1p3, maxX3m3);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         fillData(sdata, index, minX1p3, maxX2m3, maxX3m3);
         fillData(sdata, index, minX1p2, maxX2m2, maxX3m2);
         fillData(sdata, index, minX1p3, maxX2m2, maxX3m2);
@@ -314,7 +314,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, maxX2m3, maxX3m2);
         fillData(sdata, index, minX1p3, maxX2m2, maxX3m3);
         fillData(sdata, index, minX1p2, maxX2m3, maxX3m3);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         fillData(sdata, index, maxX1m3, maxX2m3, maxX3m3);
         fillData(sdata, index, maxX1m2, maxX2m2, maxX3m2);
         fillData(sdata, index, maxX1m3, maxX2m2, maxX3m2);
@@ -323,7 +323,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, maxX1m3, maxX2m3, maxX3m2);
         fillData(sdata, index, maxX1m3, maxX2m2, maxX3m3);
         fillData(sdata, index, maxX1m2, maxX2m3, maxX3m3);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         fillData(sdata, index, minX1p3, minX2p3, minX3p3);
         fillData(sdata, index, minX1p2, minX2p2, minX3p2);
         fillData(sdata, index, minX1p3, minX2p2, minX3p2);
@@ -332,7 +332,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, minX2p3, minX3p2);
         fillData(sdata, index, minX1p3, minX2p2, minX3p3);
         fillData(sdata, index, minX1p2, minX2p3, minX3p3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         fillData(sdata, index, maxX1m3, minX2p3, minX3p3);
         fillData(sdata, index, maxX1m2, minX2p2, minX3p2);
         fillData(sdata, index, maxX1m3, minX2p2, minX3p2);
@@ -341,7 +341,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, maxX1m3, minX2p3, minX3p2);
         fillData(sdata, index, maxX1m3, minX2p2, minX3p3);
         fillData(sdata, index, maxX1m2, minX2p3, minX3p3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         fillData(sdata, index, minX1p3, maxX2m3, minX3p3);
         fillData(sdata, index, minX1p2, maxX2m2, minX3p2);
         fillData(sdata, index, minX1p3, maxX2m2, minX3p2);
@@ -350,7 +350,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData()
         fillData(sdata, index, minX1p3, maxX2m3, minX3p2);
         fillData(sdata, index, minX1p3, maxX2m2, minX3p3);
         fillData(sdata, index, minX1p2, maxX2m3, minX3p3);
-    } else if (sendDir == DIR_PPM) {
+    } else if (sendDir == dPPM) {
         fillData(sdata, index, maxX1m3, maxX2m3, minX3p3);
         fillData(sdata, index, maxX1m2, maxX2m2, minX3p2);
         fillData(sdata, index, maxX1m3, maxX2m2, minX3p2);
@@ -406,7 +406,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
     int maxX3m2 = maxX3 - 2;
     //int maxX3m3 = maxX3 - 3;
 
-    if (sendDir == DIR_M00) {
+    if (sendDir == dM00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 distributeData(rdata, index, minX1, x2, x3);
@@ -414,7 +414,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_P00) {
+    else if (sendDir == dP00) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
                 distributeData(rdata, index, maxX1, x2, x3);
@@ -422,7 +422,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_0M0) {
+    else if (sendDir == d0M0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, minX2, x3);
@@ -430,7 +430,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_0P0) {
+    else if (sendDir == d0P0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, maxX2, x3);
@@ -438,7 +438,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_00M) {
+    else if (sendDir == d00M) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, x2, minX3);
@@ -446,7 +446,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_00P) {
+    else if (sendDir == d00P) {
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
                 distributeData(rdata, index, x1, x2, maxX3);
@@ -454,7 +454,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             }
         }
     }
-    else if (sendDir == DIR_MM0) {
+    else if (sendDir == dMM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, minX1, minX2, x3);
             distributeData(rdata, index, minX1p1, minX2p1, x3);
@@ -462,7 +462,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             distributeData(rdata, index, minX1p1, minX2, x3);
         }
     }
-    else if (sendDir == DIR_PM0) {
+    else if (sendDir == dPM0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, maxX1, minX2, x3);
             distributeData(rdata, index, maxX1m1, minX2p1, x3);
@@ -470,7 +470,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             distributeData(rdata, index, maxX1m1, minX2, x3);
         }
     }
-    else if (sendDir == DIR_PP0) {
+    else if (sendDir == dPP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, maxX1, maxX2, x3);
             distributeData(rdata, index, maxX1m1, maxX2m1, x3);
@@ -478,70 +478,70 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
             distributeData(rdata, index, maxX1m1, maxX2, x3);
         }
     }
-    else if (sendDir == DIR_MP0) {
+    else if (sendDir == dMP0) {
         for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
             distributeData(rdata, index, minX1, maxX2, x3);
             distributeData(rdata, index, minX1p1, maxX2m1, x3);
             distributeData(rdata, index, minX1, maxX2m1, x3);
             distributeData(rdata, index, minX1p1, maxX2, x3);
         }
-    } else if (sendDir == DIR_M0M)
+    } else if (sendDir == dM0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, minX1, x2, minX3);
             distributeData(rdata, index, minX1p1, x2, minX3p1);
             distributeData(rdata, index, minX1, x2, minX3p1);
             distributeData(rdata, index, minX1p1, x2, minX3);
         }
-    else if (sendDir == DIR_P0P)
+    else if (sendDir == dP0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, maxX1, x2, maxX3);
             distributeData(rdata, index, maxX1m1, x2, maxX3m1);
             distributeData(rdata, index, maxX1, x2, maxX3m1);
             distributeData(rdata, index, maxX1m1, x2, maxX3);
         }
-    else if (sendDir == DIR_M0P)
+    else if (sendDir == dM0P)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, minX1, x2, maxX3);
             distributeData(rdata, index, minX1p1, x2, maxX3m1);
             distributeData(rdata, index, minX1, x2, maxX3m1);
             distributeData(rdata, index, minX1p1, x2, maxX3);
         }
-    else if (sendDir == DIR_P0M)
+    else if (sendDir == dP0M)
         for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
             distributeData(rdata, index, maxX1, x2, minX3);
             distributeData(rdata, index, maxX1m1, x2, minX3p1);
             distributeData(rdata, index, maxX1, x2, minX3p1);
             distributeData(rdata, index, maxX1m1, x2, minX3);
         }
-    else if (sendDir == DIR_0MM)
+    else if (sendDir == d0MM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, minX2, minX3);
             distributeData(rdata, index, x1, minX2p1, minX3p1);
             distributeData(rdata, index, x1, minX2, minX3p1);
             distributeData(rdata, index, x1, minX2p1, minX3);
         }
-    else if (sendDir == DIR_0PP)
+    else if (sendDir == d0PP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, maxX2, maxX3);
             distributeData(rdata, index, x1, maxX2m1, maxX3m1);
             distributeData(rdata, index, x1, maxX2, maxX3m1);
             distributeData(rdata, index, x1, maxX2m1, maxX3);
         }
-    else if (sendDir == DIR_0MP)
+    else if (sendDir == d0MP)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, minX2, maxX3);
             distributeData(rdata, index, x1, minX2p1, maxX3m1);
             distributeData(rdata, index, x1, minX2, maxX3m1);
             distributeData(rdata, index, x1, minX2p1, maxX3);
         }
-    else if (sendDir == DIR_0PM)
+    else if (sendDir == d0PM)
         for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
             distributeData(rdata, index, x1, maxX2, minX3);
             distributeData(rdata, index, x1, maxX2m1, minX3p1);
             distributeData(rdata, index, x1, maxX2, minX3p1);
             distributeData(rdata, index, x1, maxX2m1, minX3);
         }
-    else if (sendDir == DIR_PPM) {
+    else if (sendDir == dPPM) {
         distributeData(rdata, index, maxX1, maxX2, minX3);
         distributeData(rdata, index, maxX1m1, maxX2m1, minX3p1);
         distributeData(rdata, index, maxX1, maxX2m1, minX3p1);
@@ -550,7 +550,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, maxX2, minX3p1);
         distributeData(rdata, index, maxX1, maxX2m1, minX3);
         distributeData(rdata, index, maxX1m1, maxX2, minX3);
-    } else if (sendDir == DIR_MPM) {
+    } else if (sendDir == dMPM) {
         distributeData(rdata, index, minX1, maxX2, minX3);
         distributeData(rdata, index, minX1p1, maxX2m1, minX3p1);
         distributeData(rdata, index, minX1, maxX2m1, minX3p1);
@@ -559,7 +559,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, minX1, maxX2, minX3p1);
         distributeData(rdata, index, minX1, maxX2m1, minX3);
         distributeData(rdata, index, minX1p1, maxX2, minX3);
-    } else if (sendDir == DIR_PMM) {
+    } else if (sendDir == dPMM) {
         distributeData(rdata, index, maxX1, minX2, minX3);
         distributeData(rdata, index, maxX1m1, minX2p1, minX3p1);
         distributeData(rdata, index, maxX1, minX2p1, minX3p1);
@@ -568,7 +568,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, minX2, minX3p1);
         distributeData(rdata, index, maxX1, minX2p1, minX3);
         distributeData(rdata, index, maxX1m1, minX2, minX3);
-    } else if (sendDir == DIR_MMM) {
+    } else if (sendDir == dMMM) {
         distributeData(rdata, index, minX1, minX2, minX3);
         distributeData(rdata, index, minX1p1, minX2p1, minX3p1);
         distributeData(rdata, index, minX1, minX2p1, minX3p1);
@@ -577,7 +577,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, minX1, minX2, minX3p1);
         distributeData(rdata, index, minX1, minX2p1, minX3);
         distributeData(rdata, index, minX1p1, minX2, minX3);
-    } else if (sendDir == DIR_PPP) {
+    } else if (sendDir == dPPP) {
         distributeData(rdata, index, maxX1, maxX2, maxX3);
         distributeData(rdata, index, maxX1m1, maxX2m1, maxX3m1);
         distributeData(rdata, index, maxX1, maxX2m1, maxX3m1);
@@ -586,7 +586,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, maxX2, maxX3m1);
         distributeData(rdata, index, maxX1, maxX2m1, maxX3);
         distributeData(rdata, index, maxX1m1, maxX2, maxX3);
-    } else if (sendDir == DIR_MPP) {
+    } else if (sendDir == dMPP) {
         distributeData(rdata, index, minX1, maxX2, maxX3);
         distributeData(rdata, index, minX1p1, maxX2m1, maxX3m1);
         distributeData(rdata, index, minX1, maxX2m1, maxX3m1);
@@ -595,7 +595,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, minX1, maxX2, maxX3m1);
         distributeData(rdata, index, minX1, maxX2m1, maxX3);
         distributeData(rdata, index, minX1p1, maxX2, maxX3);
-    } else if (sendDir == DIR_PMP) {
+    } else if (sendDir == dPMP) {
         distributeData(rdata, index, maxX1, minX2, maxX3);
         distributeData(rdata, index, maxX1m1, minX2p1, maxX3m1);
         distributeData(rdata, index, maxX1, minX2p1, maxX3m1);
@@ -604,7 +604,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData()
         distributeData(rdata, index, maxX1, minX2, maxX3m1);
         distributeData(rdata, index, maxX1, minX2p1, maxX3);
         distributeData(rdata, index, maxX1m1, minX2, maxX3);
-    } else if (sendDir == DIR_MMP) {
+    } else if (sendDir == dMMP) {
         distributeData(rdata, index, minX1, minX2, maxX3);
         distributeData(rdata, index, minX1p1, minX2p1, maxX3m1);
         distributeData(rdata, index, minX1, minX2p1, maxX3m1);
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h
rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.cpp
rename to src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.h b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.h
rename to src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp
similarity index 79%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp
rename to src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp
index 36e34321d0bcaecec63b70d2b059542dc5514b95..a615bb51decac01730be1107a2c693d973d802fd 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp
@@ -61,37 +61,37 @@ void TwoDistributionsFullVectorConnector::init()
    int anz = 2*27;
    switch (sendDir)
    {
-   case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
-   case DIR_P00:
-   case DIR_M00: sender->getData().resize(maxX2*maxX3*anz, c0o1);   break;
-   case DIR_0P0:
-   case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1);   break;
-   case DIR_00P:
-   case DIR_00M: sender->getData().resize(maxX1*maxX2*anz, c0o1);   break;
+   case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
+   case dP00:
+   case dM00: sender->getData().resize(maxX2*maxX3*anz, c0o1);   break;
+   case d0P0:
+   case d0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1);   break;
+   case d00P:
+   case d00M: sender->getData().resize(maxX1*maxX2*anz, c0o1);   break;
 
-   case DIR_PP0:
-   case DIR_MM0:
-   case DIR_PM0:
-   case DIR_MP0:  sender->getData().resize(maxX3*anz, c0o1);   break;
+   case dPP0:
+   case dMM0:
+   case dPM0:
+   case dMP0:  sender->getData().resize(maxX3*anz, c0o1);   break;
 
-   case DIR_P0P:
-   case DIR_M0M:
-   case DIR_P0M:
-   case DIR_M0P:  sender->getData().resize(maxX2*anz, c0o1);   break;
+   case dP0P:
+   case dM0M:
+   case dP0M:
+   case dM0P:  sender->getData().resize(maxX2*anz, c0o1);   break;
 
-   case DIR_0PP:
-   case DIR_0MM:
-   case DIR_0PM:
-   case DIR_0MP:  sender->getData().resize(maxX1*anz, c0o1);   break;
+   case d0PP:
+   case d0MM:
+   case d0PM:
+   case d0MP:  sender->getData().resize(maxX1*anz, c0o1);   break;
 
-   case DIR_PPP:
-   case DIR_MMM:
-   case DIR_PPM:
-   case DIR_MMP:
-   case DIR_PMP:
-   case DIR_MPM:
-   case DIR_PMM:
-   case DIR_MPP:  sender->getData().resize(anz, c0o1);   break;
+   case dPPP:
+   case dMMM:
+   case dPPM:
+   case dMMP:
+   case dPMP:
+   case dMPM:
+   case dPMM:
+   case dMPP:  sender->getData().resize(anz, c0o1);   break;
 
    default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir"));
    }
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.h b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.h
rename to src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp
similarity index 72%
rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp
rename to src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp
index 07e62e78a57fa8817ec8f4b7c20bce693697788d..14d5904ebbf30dd6b3d5694cd89c6753357536f6 100644
--- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp
+++ b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp
@@ -85,7 +85,7 @@ void D3Q27EsoTwist3DSoA::swap()
     std::swap(d.TSW, d.BNE);
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::getDistribution(real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSoA::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
 {
     using namespace vf::lbm::dir;
 
@@ -93,38 +93,38 @@ void D3Q27EsoTwist3DSoA::getDistribution(real *const f, size_t x1, size_t x2, si
     size_t x2p = x2 + 1;
     size_t x3p = x3 + 1;
 
-    f[DIR_P00]   = (*d.E)(x1, x2, x3);
-    f[DIR_0P0]   = (*d.N)(x1, x2, x3);
-    f[DIR_00P]   = (*d.T)(x1, x2, x3);
-    f[DIR_PP0]  = (*d.NE)(x1, x2, x3);
-    f[DIR_MP0]  = (*d.NW)(x1p, x2, x3);
-    f[DIR_P0P]  = (*d.TE)(x1, x2, x3);
-    f[DIR_M0P]  = (*d.TW)(x1p, x2, x3);
-    f[DIR_0PP]  = (*d.TN)(x1, x2, x3);
-    f[DIR_0MP]  = (*d.TS)(x1, x2p, x3);
-    f[DIR_PPP] = (*d.TNE)(x1, x2, x3);
-    f[DIR_MPP] = (*d.TNW)(x1p, x2, x3);
-    f[DIR_PMP] = (*d.TSE)(x1, x2p, x3);
-    f[DIR_MMP] = (*d.TSW)(x1p, x2p, x3);
+    f[dP00]   = (*d.E)(x1, x2, x3);
+    f[d0P0]   = (*d.N)(x1, x2, x3);
+    f[d00P]   = (*d.T)(x1, x2, x3);
+    f[dPP0]  = (*d.NE)(x1, x2, x3);
+    f[dMP0]  = (*d.NW)(x1p, x2, x3);
+    f[dP0P]  = (*d.TE)(x1, x2, x3);
+    f[dM0P]  = (*d.TW)(x1p, x2, x3);
+    f[d0PP]  = (*d.TN)(x1, x2, x3);
+    f[d0MP]  = (*d.TS)(x1, x2p, x3);
+    f[dPPP] = (*d.TNE)(x1, x2, x3);
+    f[dMPP] = (*d.TNW)(x1p, x2, x3);
+    f[dPMP] = (*d.TSE)(x1, x2p, x3);
+    f[dMMP] = (*d.TSW)(x1p, x2p, x3);
 
-    f[DIR_M00]   = (*d.W)(x1p, x2, x3);
-    f[DIR_0M0]   = (*d.S)(x1, x2p, x3);
-    f[DIR_00M]   = (*d.B)(x1, x2, x3p);
-    f[DIR_MM0]  = (*d.SW)(x1p, x2p, x3);
-    f[DIR_PM0]  = (*d.SE)(x1, x2p, x3);
-    f[DIR_M0M]  = (*d.BW)(x1p, x2, x3p);
-    f[DIR_P0M]  = (*d.BE)(x1, x2, x3p);
-    f[DIR_0MM]  = (*d.BS)(x1, x2p, x3p);
-    f[DIR_0PM]  = (*d.BN)(x1, x2, x3p);
-    f[DIR_MMM] = (*d.BSW)(x1p, x2p, x3p);
-    f[DIR_PMM] = (*d.BSE)(x1, x2p, x3p);
-    f[DIR_MPM] = (*d.BNW)(x1p, x2, x3p);
-    f[DIR_PPM] = (*d.BNE)(x1, x2, x3p);
+    f[dM00]   = (*d.W)(x1p, x2, x3);
+    f[d0M0]   = (*d.S)(x1, x2p, x3);
+    f[d00M]   = (*d.B)(x1, x2, x3p);
+    f[dMM0]  = (*d.SW)(x1p, x2p, x3);
+    f[dPM0]  = (*d.SE)(x1, x2p, x3);
+    f[dM0M]  = (*d.BW)(x1p, x2, x3p);
+    f[dP0M]  = (*d.BE)(x1, x2, x3p);
+    f[d0MM]  = (*d.BS)(x1, x2p, x3p);
+    f[d0PM]  = (*d.BN)(x1, x2, x3p);
+    f[dMMM] = (*d.BSW)(x1p, x2p, x3p);
+    f[dPMM] = (*d.BSE)(x1, x2p, x3p);
+    f[dMPM] = (*d.BNW)(x1p, x2, x3p);
+    f[dPPM] = (*d.BNE)(x1, x2, x3p);
 
-    f[DIR_000] = (*d.REST)(x1, x2, x3);
+    f[d000] = (*d.REST)(x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSoA::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
 {
     using namespace vf::lbm::dir;
 
@@ -132,97 +132,97 @@ void D3Q27EsoTwist3DSoA::setDistribution(const real *const f, size_t x1, size_t
     size_t x2p = x2 + 1;
     size_t x3p = x3 + 1;
 
-    (*d.E)(x1, x2, x3)     = f[INV_P00];
-    (*d.N)(x1, x2, x3)     = f[INV_0P0];
-    (*d.T)(x1, x2, x3)     = f[INV_00P];
-    (*d.NE)(x1, x2, x3)    = f[INV_PP0];
-    (*d.NW)(x1p, x2, x3)   = f[INV_MP0];
-    (*d.TE)(x1, x2, x3)    = f[INV_P0P];
-    (*d.TW)(x1p, x2, x3)   = f[INV_M0P];
-    (*d.TN)(x1, x2, x3)    = f[INV_0PP];
-    (*d.TS)(x1, x2p, x3)   = f[INV_0MP];
-    (*d.TNE)(x1, x2, x3)   = f[INV_PPP];
-    (*d.TNW)(x1p, x2, x3)  = f[INV_MPP];
-    (*d.TSE)(x1, x2p, x3)  = f[INV_PMP];
-    (*d.TSW)(x1p, x2p, x3) = f[INV_MMP];
+    (*d.E)(x1, x2, x3)     = f[iP00];
+    (*d.N)(x1, x2, x3)     = f[i0P0];
+    (*d.T)(x1, x2, x3)     = f[i00P];
+    (*d.NE)(x1, x2, x3)    = f[iPP0];
+    (*d.NW)(x1p, x2, x3)   = f[iMP0];
+    (*d.TE)(x1, x2, x3)    = f[iP0P];
+    (*d.TW)(x1p, x2, x3)   = f[iM0P];
+    (*d.TN)(x1, x2, x3)    = f[i0PP];
+    (*d.TS)(x1, x2p, x3)   = f[i0MP];
+    (*d.TNE)(x1, x2, x3)   = f[iPPP];
+    (*d.TNW)(x1p, x2, x3)  = f[iMPP];
+    (*d.TSE)(x1, x2p, x3)  = f[iPMP];
+    (*d.TSW)(x1p, x2p, x3) = f[iMMP];
 
-    (*d.W)(x1p, x2, x3)     = f[INV_M00];
-    (*d.S)(x1, x2p, x3)     = f[INV_0M0];
-    (*d.B)(x1, x2, x3p)     = f[INV_00M];
-    (*d.SW)(x1p, x2p, x3)   = f[INV_MM0];
-    (*d.SE)(x1, x2p, x3)    = f[INV_PM0];
-    (*d.BW)(x1p, x2, x3p)   = f[INV_M0M];
-    (*d.BE)(x1, x2, x3p)    = f[INV_P0M];
-    (*d.BS)(x1, x2p, x3p)   = f[INV_0MM];
-    (*d.BN)(x1, x2, x3p)    = f[INV_0PM];
-    (*d.BSW)(x1p, x2p, x3p) = f[INV_MMM];
-    (*d.BSE)(x1, x2p, x3p)  = f[INV_PMM];
-    (*d.BNW)(x1p, x2, x3p)  = f[INV_MPM];
-    (*d.BNE)(x1, x2, x3p)   = f[INV_PPM];
+    (*d.W)(x1p, x2, x3)     = f[iM00];
+    (*d.S)(x1, x2p, x3)     = f[i0M0];
+    (*d.B)(x1, x2, x3p)     = f[i00M];
+    (*d.SW)(x1p, x2p, x3)   = f[iMM0];
+    (*d.SE)(x1, x2p, x3)    = f[iPM0];
+    (*d.BW)(x1p, x2, x3p)   = f[iM0M];
+    (*d.BE)(x1, x2, x3p)    = f[iP0M];
+    (*d.BS)(x1, x2p, x3p)   = f[i0MM];
+    (*d.BN)(x1, x2, x3p)    = f[i0PM];
+    (*d.BSW)(x1p, x2p, x3p) = f[iMMM];
+    (*d.BSE)(x1, x2p, x3p)  = f[iPMM];
+    (*d.BNW)(x1p, x2, x3p)  = f[iMPM];
+    (*d.BNE)(x1, x2, x3p)   = f[iPPM];
 
-    (*d.REST)(x1, x2, x3) = f[DIR_000];
+    (*d.REST)(x1, x2, x3) = f[d000];
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSoA::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
 {
     using namespace vf::lbm::dir;
 
-    f[INV_P00]   = (*d.E)(x1, x2, x3);
-    f[INV_0P0]   = (*d.N)(x1, x2, x3);
-    f[INV_00P]   = (*d.T)(x1, x2, x3);
-    f[INV_PP0]  = (*d.NE)(x1, x2, x3);
-    f[INV_MP0]  = (*d.NW)(x1 + 1, x2, x3);
-    f[INV_P0P]  = (*d.TE)(x1, x2, x3);
-    f[INV_M0P]  = (*d.TW)(x1 + 1, x2, x3);
-    f[INV_0PP]  = (*d.TN)(x1, x2, x3);
-    f[INV_0MP]  = (*d.TS)(x1, x2 + 1, x3);
-    f[INV_PPP] = (*d.TNE)(x1, x2, x3);
-    f[INV_MPP] = (*d.TNW)(x1 + 1, x2, x3);
-    f[INV_PMP] = (*d.TSE)(x1, x2 + 1, x3);
-    f[INV_MMP] = (*d.TSW)(x1 + 1, x2 + 1, x3);
+    f[iP00]   = (*d.E)(x1, x2, x3);
+    f[i0P0]   = (*d.N)(x1, x2, x3);
+    f[i00P]   = (*d.T)(x1, x2, x3);
+    f[iPP0]  = (*d.NE)(x1, x2, x3);
+    f[iMP0]  = (*d.NW)(x1 + 1, x2, x3);
+    f[iP0P]  = (*d.TE)(x1, x2, x3);
+    f[iM0P]  = (*d.TW)(x1 + 1, x2, x3);
+    f[i0PP]  = (*d.TN)(x1, x2, x3);
+    f[i0MP]  = (*d.TS)(x1, x2 + 1, x3);
+    f[iPPP] = (*d.TNE)(x1, x2, x3);
+    f[iMPP] = (*d.TNW)(x1 + 1, x2, x3);
+    f[iPMP] = (*d.TSE)(x1, x2 + 1, x3);
+    f[iMMP] = (*d.TSW)(x1 + 1, x2 + 1, x3);
 
-    f[INV_M00]   = (*d.W)(x1 + 1, x2, x3);
-    f[INV_0M0]   = (*d.S)(x1, x2 + 1, x3);
-    f[INV_00M]   = (*d.B)(x1, x2, x3 + 1);
-    f[INV_MM0]  = (*d.SW)(x1 + 1, x2 + 1, x3);
-    f[INV_PM0]  = (*d.SE)(x1, x2 + 1, x3);
-    f[INV_M0M]  = (*d.BW)(x1 + 1, x2, x3 + 1);
-    f[INV_P0M]  = (*d.BE)(x1, x2, x3 + 1);
-    f[INV_0MM]  = (*d.BS)(x1, x2 + 1, x3 + 1);
-    f[INV_0PM]  = (*d.BN)(x1, x2, x3 + 1);
-    f[INV_MMM] = (*d.BSW)(x1 + 1, x2 + 1, x3 + 1);
-    f[INV_PMM] = (*d.BSE)(x1, x2 + 1, x3 + 1);
-    f[INV_MPM] = (*d.BNW)(x1 + 1, x2, x3 + 1);
-    f[INV_PPM] = (*d.BNE)(x1, x2, x3 + 1);
+    f[iM00]   = (*d.W)(x1 + 1, x2, x3);
+    f[i0M0]   = (*d.S)(x1, x2 + 1, x3);
+    f[i00M]   = (*d.B)(x1, x2, x3 + 1);
+    f[iMM0]  = (*d.SW)(x1 + 1, x2 + 1, x3);
+    f[iPM0]  = (*d.SE)(x1, x2 + 1, x3);
+    f[iM0M]  = (*d.BW)(x1 + 1, x2, x3 + 1);
+    f[iP0M]  = (*d.BE)(x1, x2, x3 + 1);
+    f[i0MM]  = (*d.BS)(x1, x2 + 1, x3 + 1);
+    f[i0PM]  = (*d.BN)(x1, x2, x3 + 1);
+    f[iMMM] = (*d.BSW)(x1 + 1, x2 + 1, x3 + 1);
+    f[iPMM] = (*d.BSE)(x1, x2 + 1, x3 + 1);
+    f[iMPM] = (*d.BNW)(x1 + 1, x2, x3 + 1);
+    f[iPPM] = (*d.BNE)(x1, x2, x3 + 1);
 
-    f[DIR_000] = (*d.REST)(x1, x2, x3);
+    f[d000] = (*d.REST)(x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSoA::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
 {
-    //(*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::DIR_P00];
-    //(*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::DIR_0P0];
-    //(*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::DIR_00P];
-    //(*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::DIR_PP0];
-    //(*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::DIR_MP0];
-    //(*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::DIR_P0P];
-    //(*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::DIR_M0P];
-    //(*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::DIR_0PP];
-    //(*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::DIR_0MP];
-    //(*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::DIR_PPP];
-    //(*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::DIR_MPP];
-    //(*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::DIR_PMP];
-    //(*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_MMP];
+    //(*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::dP00];
+    //(*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::d0P0];
+    //(*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::d00P];
+    //(*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::dPP0];
+    //(*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::dMP0];
+    //(*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::dP0P];
+    //(*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::dM0P];
+    //(*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::d0PP];
+    //(*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::d0MP];
+    //(*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::dPPP];
+    //(*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::dMPP];
+    //(*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::dPMP];
+    //(*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::dMMP];
 
-    //(*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::DIR_M00 ];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::DIR_0M0 ];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::DIR_00M ];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::DIR_MM0];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::DIR_PM0];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::DIR_M0M];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::DIR_P0M];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::DIR_0MM];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::DIR_0PM];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::dM00 ];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::d0M0 ];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::d00M ];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::dMM0];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::dPM0];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::dM0M];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::dP0M];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::d0MM];
+    //(*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::d0PM];
     //(*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::BSW];
     //(*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::BSE];
     //(*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::BNW];
@@ -231,62 +231,62 @@ void D3Q27EsoTwist3DSoA::setDistributionInv(const real *const f, size_t x1, size
     //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST];
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+void D3Q27EsoTwist3DSoA::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                                      unsigned long int direction)
 {
     // bool directionFlag = false;
     // if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::DIR_P00]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::dP00]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-    //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::DIR_M00]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::dM00]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-    //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::DIR_0M0]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::d0M0]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::DIR_0P0]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::d0P0]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-    //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::DIR_00M]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::d00M]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::DIR_00P]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::d00P]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-    //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::DIR_MM0]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::dMM0]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::DIR_PP0]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::dPP0]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::DIR_MP0]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::dMP0]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-    //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::DIR_PM0]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::dPM0]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-    //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::DIR_M0M]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::dM0M]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::DIR_P0P]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::dP0P]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::DIR_M0P]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::dM0P]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-    //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::DIR_P0M]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::dP0M]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-    //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::DIR_0MM]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::d0MM]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::DIR_0PP]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::d0PP]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::DIR_0MP]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::d0MP]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-    //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::DIR_0PM]; directionFlag=true;
+    //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::d0PM]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
     //   (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::BSW]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::DIR_PPP]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::dPPP]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
     //   (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::BSE]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::DIR_MPP]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::dMPP]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
     //   (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::BNW]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::DIR_PMP]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::dPMP]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
     //   (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_DIR_PPM]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f[D3Q27System::DIR_MMP]; directionFlag=true;
+    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f[D3Q27System::dMMP]; directionFlag=true;
     // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
     //   (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true;
     //#ifdef _DEBUG
@@ -294,86 +294,86 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(const real *const f, size_t
     //#endif //DEBUG
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction)
+void D3Q27EsoTwist3DSoA::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction)
 {
     // switch (direction)
     //{
-    // case D3Q27System::DIR_P00 :
+    // case D3Q27System::dP00 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f;
     //   break;
-    // case D3Q27System::DIR_M00 :
+    // case D3Q27System::dM00 :
     //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_0M0 :
+    // case D3Q27System::d0M0 :
     //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_0P0 :
+    // case D3Q27System::d0P0 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f;
     //   break;
-    // case D3Q27System::DIR_00M :
+    // case D3Q27System::d00M :
     //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_00P :
+    // case D3Q27System::d00P :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f;
     //   break;
-    // case D3Q27System::DIR_MM0 :
+    // case D3Q27System::dMM0 :
     //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_PP0 :
+    // case D3Q27System::dPP0 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f;
     //   break;
-    // case D3Q27System::DIR_MP0 :
+    // case D3Q27System::dMP0 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f;
     //   break;
-    // case D3Q27System::DIR_PM0 :
+    // case D3Q27System::dPM0 :
     //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_M0M :
+    // case D3Q27System::dM0M :
     //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_P0P :
+    // case D3Q27System::dP0P :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_M0P :
+    // case D3Q27System::dM0P :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_P0M :
+    // case D3Q27System::dP0M :
     //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_0MM :
+    // case D3Q27System::d0MM :
     //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_0PP :
+    // case D3Q27System::d0PP :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_0MP :
+    // case D3Q27System::d0MP :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_0PM :
+    // case D3Q27System::d0PM :
     //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f;
     //   break;
     // case D3Q27System::BSW :
     //   (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_PPP :
+    // case D3Q27System::dPPP :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f;
     //   break;
     // case D3Q27System::BSE :
     //   (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_MPP :
+    // case D3Q27System::dMPP :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f;
     //   break;
     // case D3Q27System::BNW :
     //   (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f;
     //   break;
-    // case D3Q27System::DIR_PMP :
+    // case D3Q27System::dPMP :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f;
     //   break;
     // case D3Q27System::DIR_DIR_PPM :
     //   (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f;
     //   break;
-    // case D3Q27System::DIR_MMP :
+    // case D3Q27System::dMMP :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f;
     //   break;
     // case D3Q27System::REST :
@@ -384,65 +384,65 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(real f, size_t x1, size_t x
     //}
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+void D3Q27EsoTwist3DSoA::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                                         unsigned long int direction)
 {
     //   bool directionFlag = false;
     //   if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-    //      (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::DIR_P00]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::dP00]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::DIR_M00]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::dM00]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::DIR_0M0]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::d0M0]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-    //      (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::DIR_0P0]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::d0P0]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::DIR_00M]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::d00M]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-    //      (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::DIR_00P]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::d00P]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::DIR_MM0]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::dMM0]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-    //      (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::DIR_PP0]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::dPP0]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-    //      (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::DIR_MP0]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::dMP0]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::DIR_PM0]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::dPM0]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::DIR_M0M]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::dM0M]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-    //      (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::DIR_P0P]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::dP0P]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-    //      (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::DIR_M0P]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::dM0P]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::DIR_P0M]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::dP0M]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::DIR_0MM]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::d0MM]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-    //      (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::DIR_0PP]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::d0PP]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-    //      (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::DIR_0MP]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::d0MP]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::DIR_0PM]; directionFlag=true;
+    //      (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::d0PM]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
     //      (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::BSW];
     //      directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-    //      (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::DIR_PPP]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::dPPP]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
     //      (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::BSE];
     //      directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-    //      (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::DIR_MPP]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::dMPP]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
     //      (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::BNW];
     //      directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-    //      (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::DIR_PMP]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::dPMP]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
     //      (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1)= f[D3Q27System::DIR_DIR_PPM]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-    //      (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_MMP]; directionFlag=true;
+    //      (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::dMMP]; directionFlag=true;
     //   if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
     //      (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true;
     //#ifdef _DEBUG
@@ -450,87 +450,87 @@ void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(const real *const f, siz
     //#endif //DEBUG
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+void D3Q27EsoTwist3DSoA::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                                         unsigned long int direction)
 {
     // switch (direction)
     //{
-    // case D3Q27System::DIR_P00 :
+    // case D3Q27System::dP00 :
     //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_M00 :
+    // case D3Q27System::dM00 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f;
     //   break;
-    // case D3Q27System::DIR_0M0 :
+    // case D3Q27System::d0M0 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f;
     //   break;
-    // case D3Q27System::DIR_0P0 :
+    // case D3Q27System::d0P0 :
     //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_00M :
+    // case D3Q27System::d00M :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f;
     //   break;
-    // case D3Q27System::DIR_00P :
+    // case D3Q27System::d00P :
     //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_MM0 :
+    // case D3Q27System::dMM0 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f;
     //   break;
-    // case D3Q27System::DIR_PP0 :
+    // case D3Q27System::dPP0 :
     //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_MP0 :
+    // case D3Q27System::dMP0 :
     //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_PM0 :
+    // case D3Q27System::dPM0 :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f;
     //   break;
-    // case D3Q27System::DIR_M0M :
+    // case D3Q27System::dM0M :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_P0P :
+    // case D3Q27System::dP0P :
     //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_M0P :
+    // case D3Q27System::dM0P :
     //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_P0M :
+    // case D3Q27System::dP0M :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_0MM :
+    // case D3Q27System::d0MM :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f;
     //   break;
-    // case D3Q27System::DIR_0PP :
+    // case D3Q27System::d0PP :
     //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f;
     //   break;
-    // case D3Q27System::DIR_0MP :
+    // case D3Q27System::d0MP :
     //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f;
     //   break;
-    // case D3Q27System::DIR_0PM :
+    // case D3Q27System::d0PM :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f;
     //   break;
     // case D3Q27System::BSW :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f;
     //   break;
-    // case D3Q27System::DIR_PPP :
+    // case D3Q27System::dPPP :
     //   (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f;
     //   break;
     // case D3Q27System::BSE :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f;
     //   break;
-    // case D3Q27System::DIR_MPP :
+    // case D3Q27System::dMPP :
     //   (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f;
     //   break;
     // case D3Q27System::BNW :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f;
     //   break;
-    // case D3Q27System::DIR_PMP :
+    // case D3Q27System::dPMP :
     //   (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f;
     //   break;
     // case D3Q27System::DIR_DIR_PPM :
     //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f;
     //   break;
-    // case D3Q27System::DIR_MMP :
+    // case D3Q27System::dMMP :
     //   (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f;
     //   break;
     // case D3Q27System::REST :
@@ -546,57 +546,57 @@ real D3Q27EsoTwist3DSoA::getDistributionInvForDirection(size_t /*x1*/, size_t /*
 {
     // switch (direction)
     //{
-    // case D3Q27System::DIR_P00 :
+    // case D3Q27System::dP00 :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    );
-    // case D3Q27System::DIR_M00 :
+    // case D3Q27System::dM00 :
     //   return (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3);
-    // case D3Q27System::DIR_0M0 :
+    // case D3Q27System::d0M0 :
     //   return (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3);
-    // case D3Q27System::DIR_0P0 :
+    // case D3Q27System::d0P0 :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    );
-    // case D3Q27System::DIR_00M :
+    // case D3Q27System::d00M :
     //   return (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3);
-    // case D3Q27System::DIR_00P :
+    // case D3Q27System::d00P :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  );
-    // case D3Q27System::DIR_MM0 :
+    // case D3Q27System::dMM0 :
     //   return (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3);
-    // case D3Q27System::DIR_PP0 :
+    // case D3Q27System::dPP0 :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   );
-    // case D3Q27System::DIR_MP0 :
+    // case D3Q27System::dMP0 :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   );
-    // case D3Q27System::DIR_PM0 :
+    // case D3Q27System::dPM0 :
     //   return (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3);
-    // case D3Q27System::DIR_M0M :
+    // case D3Q27System::dM0M :
     //   return (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3);
-    // case D3Q27System::DIR_P0P :
+    // case D3Q27System::dP0P :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 );
-    // case D3Q27System::DIR_M0P :
+    // case D3Q27System::dM0P :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 );
-    // case D3Q27System::DIR_P0M :
+    // case D3Q27System::dP0M :
     //   return (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3);
-    // case D3Q27System::DIR_0MM :
+    // case D3Q27System::d0MM :
     //   return (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3);
-    // case D3Q27System::DIR_0PP :
+    // case D3Q27System::d0PP :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 );
-    // case D3Q27System::DIR_0MP :
+    // case D3Q27System::d0MP :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 );
-    // case D3Q27System::DIR_0PM :
+    // case D3Q27System::d0PM :
     //   return (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3);
     // case D3Q27System::BSW :
     //   return (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3);
-    // case D3Q27System::DIR_PPP :
+    // case D3Q27System::dPPP :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1);
     // case D3Q27System::BSE :
     //   return (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3);
-    // case D3Q27System::DIR_MPP :
+    // case D3Q27System::dMPP :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1);
     // case D3Q27System::BNW :
     //   return (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3);
-    // case D3Q27System::DIR_PMP :
+    // case D3Q27System::dPMP :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1);
     // case D3Q27System::DIR_DIR_PPM :
     //   return (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3);
-    // case D3Q27System::DIR_MMP :
+    // case D3Q27System::dMMP :
     //   return (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1);
     // case D3Q27System::REST :
     //   return (*this->zeroDistributions)(x1,x2,x3);
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h
similarity index 81%
rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h
rename to src/cpu/core/Data/D3Q27EsoTwist3DSoA.h
index 204e6fe15f69a387c289ae8c60f63d59ef62ddc3..503054373c0ef6cf7fbbc4bd24cf1d06c769995a 100644
--- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h
+++ b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h
@@ -48,28 +48,28 @@ public:
     //////////////////////////////////////////////////////////////////////////
     void swap() override;
     //////////////////////////////////////////////////////////////////////////
-    void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
+    void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
+    void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
     ////////////////////////////////////////////////////////////////////////
-    void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override;
+    void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override;
+    void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                      unsigned long int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override;
+    void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
     real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
+    real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
     size_t getNX1() const override;
     //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp
similarity index 72%
rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp
rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp
index ae213baab78c7c18912c2b33af684aad47e3b1dd..f40adc2eab55c3292faaec698ff0bdb666adf13c 100644
--- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp
+++ b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp
@@ -54,294 +54,294 @@ D3Q27EsoTwist3DSplittedVector::~D3Q27EsoTwist3DSplittedVector() = default;
 //////////////////////////////////////////////////////////////////////////
 void D3Q27EsoTwist3DSplittedVector::swap() { std::swap(this->localDistributions, this->nonLocalDistributions); }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::getDistribution(real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSplittedVector::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
 {
     const size_t x1p = x1 + 1;
     const size_t x2p = x2 + 1;
     const size_t x3p = x3 + 1;
 
-    f[vf::lbm::dir::DIR_P00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3);
-    f[vf::lbm::dir::DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3);
-    f[vf::lbm::dir::DIR_00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3);
-    f[vf::lbm::dir::DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3);
-    f[vf::lbm::dir::DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1p, x2, x3);
-    f[vf::lbm::dir::DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3);
-    f[vf::lbm::dir::DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1p, x2, x3);
-    f[vf::lbm::dir::DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3);
-    f[vf::lbm::dir::DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2p, x3);
-    f[vf::lbm::dir::DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3);
-    f[vf::lbm::dir::DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1p, x2, x3);
-    f[vf::lbm::dir::DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2p, x3);
-    f[vf::lbm::dir::DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1p, x2p, x3);
+    f[vf::lbm::dir::dP00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3);
+    f[vf::lbm::dir::d0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3);
+    f[vf::lbm::dir::d00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3);
+    f[vf::lbm::dir::dPP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3);
+    f[vf::lbm::dir::dMP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1p, x2, x3);
+    f[vf::lbm::dir::dP0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3);
+    f[vf::lbm::dir::dM0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1p, x2, x3);
+    f[vf::lbm::dir::d0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3);
+    f[vf::lbm::dir::d0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2p, x3);
+    f[vf::lbm::dir::dPPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3);
+    f[vf::lbm::dir::dMPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1p, x2, x3);
+    f[vf::lbm::dir::dPMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2p, x3);
+    f[vf::lbm::dir::dMMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1p, x2p, x3);
 
-    f[vf::lbm::dir::DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1p, x2, x3);
-    f[vf::lbm::dir::DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2p, x3);
-    f[vf::lbm::dir::DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3p);
-    f[vf::lbm::dir::DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1p, x2p, x3);
-    f[vf::lbm::dir::DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2p, x3);
-    f[vf::lbm::dir::DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1p, x2, x3p);
-    f[vf::lbm::dir::DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3p);
-    f[vf::lbm::dir::DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2p, x3p);
-    f[vf::lbm::dir::DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3p);
-    f[vf::lbm::dir::DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1p, x2p, x3p);
-    f[vf::lbm::dir::DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2p, x3p);
-    f[vf::lbm::dir::DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1p, x2, x3p);
-    f[vf::lbm::dir::DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3p);
+    f[vf::lbm::dir::dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1p, x2, x3);
+    f[vf::lbm::dir::d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2p, x3);
+    f[vf::lbm::dir::d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3p);
+    f[vf::lbm::dir::dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1p, x2p, x3);
+    f[vf::lbm::dir::dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2p, x3);
+    f[vf::lbm::dir::dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1p, x2, x3p);
+    f[vf::lbm::dir::dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3p);
+    f[vf::lbm::dir::d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2p, x3p);
+    f[vf::lbm::dir::d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3p);
+    f[vf::lbm::dir::dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1p, x2p, x3p);
+    f[vf::lbm::dir::dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2p, x3p);
+    f[vf::lbm::dir::dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1p, x2, x3p);
+    f[vf::lbm::dir::dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3p);
 
-    f[vf::lbm::dir::DIR_000] = (*this->zeroDistributions)(x1, x2, x3);
+    f[vf::lbm::dir::d000] = (*this->zeroDistributions)(x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
 {
     using namespace vf::lbm::dir;
 
-    (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[INV_P00];
-    (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[INV_0P0];
-    (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[INV_00P];
-    (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[INV_PP0];
-    (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[INV_MP0];
-    (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[INV_P0P];
-    (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[INV_M0P];
-    (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[INV_0PP];
-    (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[INV_0MP];
-    (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[INV_PPP];
-    (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[INV_MPP];
-    (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[INV_PMP];
-    (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[INV_MMP];
+    (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[iP00];
+    (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[i0P0];
+    (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[i00P];
+    (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[iPP0];
+    (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[iMP0];
+    (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[iP0P];
+    (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[iM0P];
+    (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[i0PP];
+    (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[i0MP];
+    (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[iPPP];
+    (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[iMPP];
+    (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[iPMP];
+    (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[iMMP];
 
-    (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[INV_M00];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[INV_0M0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[INV_00M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[INV_MM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[INV_PM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[INV_M0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[INV_P0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[INV_0MM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[INV_0PM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[INV_MMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[INV_PMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[INV_MPM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[INV_PPM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[iM00];
+    (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[i0M0];
+    (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[i00M];
+    (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[iMM0];
+    (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[iPM0];
+    (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[iM0M];
+    (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[iP0M];
+    (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[i0MM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[i0PM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[iMMM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[iPMM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[iMPM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[iPPM];
 
-    (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000];
+    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSplittedVector::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
 {
     using namespace vf::lbm::dir;
 
-    f[INV_P00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3);
-    f[INV_0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3);
-    f[INV_00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3);
-    f[INV_PP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3);
-    f[INV_MP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3);
-    f[INV_P0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3);
-    f[INV_M0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3);
-    f[INV_0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3);
-    f[INV_0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3);
-    f[INV_PPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3);
-    f[INV_MPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3);
-    f[INV_PMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3);
-    f[INV_MMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3);
+    f[iP00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3);
+    f[i0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3);
+    f[i00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3);
+    f[iPP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3);
+    f[iMP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3);
+    f[iP0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3);
+    f[iM0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3);
+    f[i0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3);
+    f[i0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3);
+    f[iPPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3);
+    f[iMPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3);
+    f[iPMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3);
+    f[iMMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3);
 
-    f[INV_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3);
-    f[INV_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3);
-    f[INV_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1);
-    f[INV_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3);
-    f[INV_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3);
-    f[INV_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1);
-    f[INV_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1);
-    f[INV_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1);
-    f[INV_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1);
-    f[INV_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1);
-    f[INV_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1);
-    f[INV_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1);
-    f[INV_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1);
+    f[iM00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3);
+    f[i0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3);
+    f[i00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1);
+    f[iMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3);
+    f[iPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3);
+    f[iM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1);
+    f[iP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1);
+    f[i0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1);
+    f[i0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1);
+    f[iMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1);
+    f[iPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1);
+    f[iMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1);
+    f[iPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1);
 
-    f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3);
+    f[d000] = (*this->zeroDistributions)(x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3)
+void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
 {
     using namespace vf::lbm::dir;
 
-    (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[DIR_P00];
-    (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[DIR_0P0];
-    (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[DIR_00P];
-    (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[DIR_PP0];
-    (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[DIR_MP0];
-    (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[DIR_P0P];
-    (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[DIR_M0P];
-    (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[DIR_0PP];
-    (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[DIR_0MP];
-    (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[DIR_PPP];
-    (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[DIR_MPP];
-    (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[DIR_PMP];
-    (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[DIR_MMP];
+    (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[dP00];
+    (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[d0P0];
+    (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[d00P];
+    (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[dPP0];
+    (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[dMP0];
+    (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[dP0P];
+    (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[dM0P];
+    (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[d0PP];
+    (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[d0MP];
+    (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[dPPP];
+    (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[dMPP];
+    (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[dPMP];
+    (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[dMMP];
 
-    (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[DIR_M00];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[DIR_0M0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[DIR_00M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[DIR_MM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[DIR_PM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[DIR_M0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[DIR_P0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[DIR_0MM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[DIR_0PM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[DIR_MMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[DIR_PMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[DIR_MPM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[DIR_PPM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[dM00];
+    (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[d0M0];
+    (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[d00M];
+    (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[dMM0];
+    (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[dPM0];
+    (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[dM0M];
+    (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[dP0M];
+    (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[d0MM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[d0PM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[dMMM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[dPMM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[dMPM];
+    (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[dPPM];
 
-    (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000];
+    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                                                 unsigned long int direction)
 {
     using namespace vf::lbm::dir;
 
     if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[DIR_P00];
+        (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[dP00];
     if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-        (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[DIR_M00];
+        (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[dM00];
     if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-        (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[DIR_0M0];
+        (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[d0M0];
     if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-        (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[DIR_0P0];
+        (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[d0P0];
     if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-        (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[DIR_00M];
+        (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[d00M];
     if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-        (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[DIR_00P];
+        (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[d00P];
     if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-        (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[DIR_MM0];
+        (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[dMM0];
     if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[DIR_PP0];
+        (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[dPP0];
     if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[DIR_MP0];
+        (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[dMP0];
     if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-        (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[DIR_PM0];
+        (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[dPM0];
     if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-        (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[DIR_M0M];
+        (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[dM0M];
     if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[DIR_P0P];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[dP0P];
     if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[DIR_M0P];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[dM0P];
     if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-        (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[DIR_P0M];
+        (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[dP0M];
     if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-        (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[DIR_0MM];
+        (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[d0MM];
     if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[DIR_0PP];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[d0PP];
     if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[DIR_0MP];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[d0MP];
     if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-        (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[DIR_0PM];
+        (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[d0PM];
     if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
-        (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[DIR_MMM];
+        (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[dMMM];
     if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[DIR_PPP];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[dPPP];
     if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
-        (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[DIR_PMM];
+        (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[dPMM];
     if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[DIR_MPP];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[dMPP];
     if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
-        (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[DIR_MPM];
+        (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[dMPM];
     if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[DIR_PMP];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[dPMP];
     if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
-        (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[DIR_PPM];
+        (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[dPPM];
     if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[DIR_MMP];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[dMMP];
     if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
-        (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000];
+        (*this->zeroDistributions)(x1, x2, x3) = f[d000];
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
+void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                                                 int direction)
 {
     using namespace vf::lbm::dir;
  
     switch (direction) {
-        case DIR_P00:
+        case dP00:
             (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f;
             break;
-        case DIR_M00:
+        case dM00:
             (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f;
             break;
-        case DIR_0M0:
+        case d0M0:
             (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f;
             break;
-        case DIR_0P0:
+        case d0P0:
             (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f;
             break;
-        case DIR_00M:
+        case d00M:
             (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f;
             break;
-        case DIR_00P:
+        case d00P:
             (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f;
             break;
-        case DIR_MM0:
+        case dMM0:
             (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f;
             break;
-        case DIR_PP0:
+        case dPP0:
             (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f;
             break;
-        case DIR_MP0:
+        case dMP0:
             (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f;
             break;
-        case DIR_PM0:
+        case dPM0:
             (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f;
             break;
-        case DIR_M0M:
+        case dM0M:
             (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f;
             break;
-        case DIR_P0P:
+        case dP0P:
             (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f;
             break;
-        case DIR_M0P:
+        case dM0P:
             (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f;
             break;
-        case DIR_P0M:
+        case dP0M:
             (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f;
             break;
-        case DIR_0MM:
+        case d0MM:
             (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f;
             break;
-        case DIR_0PP:
+        case d0PP:
             (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f;
             break;
-        case DIR_0MP:
+        case d0MP:
             (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f;
             break;
-        case DIR_0PM:
+        case d0PM:
             (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f;
             break;
-        case DIR_MMM:
+        case dMMM:
             (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f;
             break;
-        case DIR_PPP:
+        case dPPP:
             (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f;
             break;
-        case DIR_PMM:
+        case dPMM:
             (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f;
             break;
-        case DIR_MPP:
+        case dMPP:
             (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f;
             break;
-        case DIR_MPM:
+        case dMPM:
             (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f;
             break;
-        case DIR_PMP:
+        case dPMP:
             (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f;
             break;
-        case DIR_PPM:
+        case dPPM:
             (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f;
             break;
-        case DIR_MMP:
+        case dMMP:
             (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f;
             break;
-        case DIR_000:
+        case d000:
             (*this->zeroDistributions)(x1, x2, x3) = f;
             break;
         default:
@@ -349,152 +349,152 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(real f, size_t x
     }
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(const real *const f, size_t x1, size_t x2,
+void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2,
                                                                    size_t x3, unsigned long int direction)
 {
     using namespace vf::lbm::dir;
 
     if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-        (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[DIR_P00];
+        (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[dP00];
     if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[DIR_M00];
+        (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[dM00];
     if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-        (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[DIR_0M0];
+        (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[d0M0];
     if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-        (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[DIR_0P0];
+        (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[d0P0];
     if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-        (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[DIR_00M];
+        (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[d00M];
     if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-        (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[DIR_00P];
+        (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[d00P];
     if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[DIR_MM0];
+        (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[dMM0];
     if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-        (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[DIR_PP0];
+        (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[dPP0];
     if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-        (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[DIR_MP0];
+        (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[dMP0];
     if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[DIR_PM0];
+        (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[dPM0];
     if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[DIR_M0M];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[dM0M];
     if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-        (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[DIR_P0P];
+        (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[dP0P];
     if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-        (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[DIR_M0P];
+        (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[dM0P];
     if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[DIR_P0M];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[dP0M];
     if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[DIR_0MM];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[d0MM];
     if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-        (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[DIR_0PP];
+        (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[d0PP];
     if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-        (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[DIR_0MP];
+        (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[d0MP];
     if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[DIR_0PM];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[d0PM];
     if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[DIR_MMM];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[dMMM];
     if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-        (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[DIR_PPP];
+        (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[dPPP];
     if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[DIR_PMM];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[dPMM];
     if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-        (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[DIR_MPP];
+        (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[dMPP];
     if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[DIR_MPM];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[dMPM];
     if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-        (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[DIR_PMP];
+        (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[dPMP];
     if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[DIR_PPM];
+        (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[dPPM];
     if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-        (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[DIR_MMP];
+        (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[dMMP];
     if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
-        (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000];
+        (*this->zeroDistributions)(x1, x2, x3) = f[d000];
 }
 //////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                                                    unsigned long int direction)
 {
     using namespace vf::lbm::dir;
 
     switch (direction) {
-        case DIR_P00:
+        case dP00:
             (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f;
             break;
-        case DIR_M00:
+        case dM00:
             (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f;
             break;
-        case DIR_0M0:
+        case d0M0:
             (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f;
             break;
-        case DIR_0P0:
+        case d0P0:
             (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f;
             break;
-        case DIR_00M:
+        case d00M:
             (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f;
             break;
-        case DIR_00P:
+        case d00P:
             (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f;
             break;
-        case DIR_MM0:
+        case dMM0:
             (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f;
             break;
-        case DIR_PP0:
+        case dPP0:
             (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f;
             break;
-        case DIR_MP0:
+        case dMP0:
             (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f;
             break;
-        case DIR_PM0:
+        case dPM0:
             (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f;
             break;
-        case DIR_M0M:
+        case dM0M:
             (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f;
             break;
-        case DIR_P0P:
+        case dP0P:
             (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f;
             break;
-        case DIR_M0P:
+        case dM0P:
             (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f;
             break;
-        case DIR_P0M:
+        case dP0M:
             (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f;
             break;
-        case DIR_0MM:
+        case d0MM:
             (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f;
             break;
-        case DIR_0PP:
+        case d0PP:
             (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f;
             break;
-        case DIR_0MP:
+        case d0MP:
             (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f;
             break;
-        case DIR_0PM:
+        case d0PM:
             (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f;
             break;
-        case DIR_MMM:
+        case dMMM:
             (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f;
             break;
-        case DIR_PPP:
+        case dPPP:
             (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f;
             break;
-        case DIR_PMM:
+        case dPMM:
             (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f;
             break;
-        case DIR_MPP:
+        case dMPP:
             (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f;
             break;
-        case DIR_MPM:
+        case dMPM:
             (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f;
             break;
-        case DIR_PMP:
+        case dPMP:
             (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f;
             break;
-        case DIR_PPM:
+        case dPPM:
             (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f;
             break;
-        case DIR_MMP:
+        case dMMP:
             (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f;
             break;
-        case DIR_000:
+        case d000:
             (*this->zeroDistributions)(x1, x2, x3) = f;
             break;
         default:
@@ -502,64 +502,64 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(real f, size_
     }
 }
 //////////////////////////////////////////////////////////////////////////
-real D3Q27EsoTwist3DSplittedVector::getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)
+real D3Q27EsoTwist3DSplittedVector::getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)
 {
     using namespace vf::lbm::dir;
 
     switch (direction) {
-        case DIR_M00:
+        case dM00:
             return (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-        case DIR_P00:
+        case dP00:
             return (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-        case DIR_0P0:
+        case d0P0:
             return (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-        case DIR_0M0:
+        case d0M0:
             return (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-        case DIR_00P:
+        case d00P:
             return (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-        case DIR_00M:
+        case d00M:
             return (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-        case DIR_PP0:
+        case dPP0:
             return (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-        case DIR_MM0:
+        case dMM0:
             return (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-        case DIR_PM0:
+        case dPM0:
             return (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-        case DIR_MP0:
+        case dMP0:
             return (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-        case DIR_P0P:
+        case dP0P:
             return (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-        case DIR_M0M:
+        case dM0M:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-        case DIR_P0M:
+        case dP0M:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-        case DIR_M0P:
+        case dM0P:
             return (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-        case DIR_0PP:
+        case d0PP:
             return (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-        case DIR_0MM:
+        case d0MM:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-        case DIR_0PM:
+        case d0PM:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-        case DIR_0MP:
+        case d0MP:
             return (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-        case DIR_PPP:
+        case dPPP:
             return (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-        case DIR_MMM:
+        case dMMM:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-        case DIR_MPP:
+        case dMPP:
             return (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-        case DIR_PMM:
+        case dPMM:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-        case DIR_PMP:
+        case dPMP:
             return (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-        case DIR_MPM:
+        case dMPM:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-        case DIR_MMP:
+        case dMMP:
             return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-        case DIR_PPM:
+        case dPPM:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
-        case DIR_000:
+        case d000:
             return (*this->zeroDistributions)(x1, x2, x3);
         default:
             UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
@@ -571,59 +571,59 @@ real D3Q27EsoTwist3DSplittedVector::getDistributionInvForDirection(size_t x1, si
     using namespace vf::lbm::dir;
 
     switch (direction) {
-        case DIR_P00:
+        case dP00:
             return (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-        case DIR_M00:
+        case dM00:
             return (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-        case DIR_0M0:
+        case d0M0:
             return (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-        case DIR_0P0:
+        case d0P0:
             return (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-        case DIR_00M:
+        case d00M:
             return (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-        case DIR_00P:
+        case d00P:
             return (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-        case DIR_MM0:
+        case dMM0:
             return (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-        case DIR_PP0:
+        case dPP0:
             return (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-        case DIR_MP0:
+        case dMP0:
             return (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-        case DIR_PM0:
+        case dPM0:
             return (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-        case DIR_M0M:
+        case dM0M:
             return (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-        case DIR_P0P:
+        case dP0P:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-        case DIR_M0P:
+        case dM0P:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-        case DIR_P0M:
+        case dP0M:
             return (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-        case DIR_0MM:
+        case d0MM:
             return (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-        case DIR_0PP:
+        case d0PP:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-        case DIR_0MP:
+        case d0MP:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-        case DIR_0PM:
+        case d0PM:
             return (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-        case DIR_MMM:
+        case dMMM:
             return (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-        case DIR_PPP:
+        case dPPP:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-        case DIR_PMM:
+        case dPMM:
             return (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-        case DIR_MPP:
+        case dMPP:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-        case DIR_MPM:
+        case dMPM:
             return (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-        case DIR_PMP:
+        case dPMP:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-        case DIR_PPM:
+        case dPPM:
             return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-        case DIR_MMP:
+        case dMMP:
             return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
-        case DIR_000:
+        case d000:
             return (*this->zeroDistributions)(x1, x2, x3);
         default:
             UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h
similarity index 86%
rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h
rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h
index 21f1610641706dac82e1314b1a01be5959c8b0b2..5705df3965d6afc3218f996ae7c6164f5c3830e0 100644
--- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h
+++ b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h
@@ -55,28 +55,28 @@ public:
     //////////////////////////////////////////////////////////////////////////
     void swap() override;
     //////////////////////////////////////////////////////////////////////////
-    void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
+    void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
+    void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
     ////////////////////////////////////////////////////////////////////////
-    void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override;
+    void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override;
+    void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                      unsigned long int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override;
+    void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
     real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
+    real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
     size_t getNX1() const override;
     //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp
rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.h b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.h
rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h
diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/core/Data/DataSet3D.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Data/DataSet3D.h
rename to src/cpu/core/Data/DataSet3D.h
diff --git a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h b/src/cpu/core/Data/DistributionArray3D.h
similarity index 80%
rename from src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
rename to src/cpu/core/Data/DistributionArray3D.h
index fff57191d5172e2f3c085b6f8753018c58fae42a..21b9c23e998ae971130f918463cfe670f018b7a4 100644
--- a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
+++ b/src/cpu/core/Data/DistributionArray3D.h
@@ -55,39 +55,39 @@ public:
     //! \param x1 coordinate x1
     //! \param x2 coordinate x2
     //! \param x3 coordinate x3
-    virtual void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) = 0;
+    virtual void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) = 0;
     //! set distribution
     //! \param f distribution
     //! \param x1 coordinate x1
     //! \param x2 coordinate x2
     //! \param x3 coordinate x3
-    virtual void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) = 0;
+    virtual void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) = 0;
     //! get distribution in inverse order
     //! \param f distribution
     //! \param x1 coordinate x1
     //! \param x2 coordinate x2
     //! \param x3 coordinate x3
-    virtual void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) = 0;
+    virtual void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) = 0;
     //! set distribution in inverse order
     //! \param f distribution
     //! \param x1 coordinate x1
     //! \param x1 coordinate x2
     //! \param x1 coordinate x3
-    virtual void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) = 0;
+    virtual void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) = 0;
     //! set distribution in inverse order
     //! \param f distribution
     //! \param x1 coordinate x1
     //! \param x1 coordinate x2
     //! \param x1 coordinate x3
-    virtual void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    virtual void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                              unsigned long int direction)                               = 0;
-    virtual void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) = 0;
+    virtual void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) = 0;
     virtual real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction)      = 0;
-    virtual void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    virtual void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                                 unsigned long int direction)                            = 0;
-    virtual void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+    virtual void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                                 unsigned long int direction)                            = 0;
-    virtual real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)         = 0;
+    virtual real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)         = 0;
     virtual void swap()                                                                                 = 0;
 
 protected:
diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h b/src/cpu/core/Data/EsoTwist3D.h
similarity index 83%
rename from src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h
rename to src/cpu/core/Data/EsoTwist3D.h
index 6a65255adfaf48d415c76b66364f3f34966572c0..1642c09daddadb7add0e16c5c833e5cb79c21dd3 100644
--- a/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h
+++ b/src/cpu/core/Data/EsoTwist3D.h
@@ -43,16 +43,6 @@
 // Geier, M., & Schönherr, M. (2017). Esoteric twist: an efficient in-place streaming algorithmus for the lattice
 // Boltzmann method on massively parallel hardware. Computation, 5(2), 19.
 
-class EsoTwistD3Q27UnrollArray
-{
-};
-class EsoTwistPlusD3Q27UnrollArray
-{
-};
-class EsoTwistPlusD3Q19UnrollArray
-{
-};
-
 class EsoTwist3D : public DistributionArray3D
 {
 public:
@@ -63,31 +53,31 @@ public:
     //////////////////////////////////////////////////////////////////////////
     void swap() override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override = 0;
+    void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override = 0;
+    void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override = 0;
     ////////////////////////////////////////////////////////////////////////
-    void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override = 0;
+    void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override = 0;
+    void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                      unsigned long int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override = 0;
+    void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
     // virtual void getDistributionInvForDirection(real* const& f, const size_t& x1, const size_t& x2, const size_t&
     // x3, const unsigned long int& direction) = 0;
     //////////////////////////////////////////////////////////////////////////
     real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
+    real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
     size_t getNX1() const override = 0;
     //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp b/src/cpu/core/Data/EsoTwistD3Q27System.cpp
similarity index 88%
rename from src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp
rename to src/cpu/core/Data/EsoTwistD3Q27System.cpp
index c28f1d4896619d72f27d7cd99579295fa46c68a5..8f249ceeca6e0270a4396e6100fc1a7d0af0c3c6 100644
--- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp
+++ b/src/cpu/core/Data/EsoTwistD3Q27System.cpp
@@ -45,12 +45,12 @@ const int EsoTwistD3Q27System::ETX3[EsoTwistD3Q27System::ENDF + 1] = { 0, 0, 0,
 
 const int EsoTwistD3Q27System::etINVDIR[EsoTwistD3Q27System::ENDF + 1] = {
 
-    vf::lbm::dir::INV_P00,   vf::lbm::dir::INV_M00,   vf::lbm::dir::INV_0P0,   vf::lbm::dir::INV_0M0,   vf::lbm::dir::INV_00P,
-    vf::lbm::dir::INV_00M,   vf::lbm::dir::INV_PP0,  vf::lbm::dir::INV_MM0,  vf::lbm::dir::INV_PM0,  vf::lbm::dir::INV_MP0,
-    vf::lbm::dir::INV_P0P,  vf::lbm::dir::INV_M0M,  vf::lbm::dir::INV_P0M,  vf::lbm::dir::INV_M0P,  vf::lbm::dir::INV_0PP,
-    vf::lbm::dir::INV_0MM,  vf::lbm::dir::INV_0PM,  vf::lbm::dir::INV_0MP,  vf::lbm::dir::INV_PPP, vf::lbm::dir::INV_MPP,
-    vf::lbm::dir::INV_PMP, vf::lbm::dir::INV_MMP, vf::lbm::dir::INV_PPM, vf::lbm::dir::INV_MPM, vf::lbm::dir::INV_PMM,
-    vf::lbm::dir::INV_MMM, vf::lbm::dir::DIR_000
+    vf::lbm::dir::iP00,   vf::lbm::dir::iM00,   vf::lbm::dir::i0P0,   vf::lbm::dir::i0M0,   vf::lbm::dir::i00P,
+    vf::lbm::dir::i00M,   vf::lbm::dir::iPP0,  vf::lbm::dir::iMM0,  vf::lbm::dir::iPM0,  vf::lbm::dir::iMP0,
+    vf::lbm::dir::iP0P,  vf::lbm::dir::iM0M,  vf::lbm::dir::iP0M,  vf::lbm::dir::iM0P,  vf::lbm::dir::i0PP,
+    vf::lbm::dir::i0MM,  vf::lbm::dir::i0PM,  vf::lbm::dir::i0MP,  vf::lbm::dir::iPPP, vf::lbm::dir::iMPP,
+    vf::lbm::dir::iPMP, vf::lbm::dir::iMMP, vf::lbm::dir::iPPM, vf::lbm::dir::iMPM, vf::lbm::dir::iPMM,
+    vf::lbm::dir::iMMM, vf::lbm::dir::d000
 };
 
 const unsigned long int EsoTwistD3Q27System::etDIR[EsoTwistD3Q27System::ENDF + 1] = {
diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h b/src/cpu/core/Data/EsoTwistD3Q27System.h
similarity index 59%
rename from src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h
rename to src/cpu/core/Data/EsoTwistD3Q27System.h
index 74cd5b9b8fe0aeb58fad65c34c5231abb8eb4b8c..77db3dd1dc2d8406e0f0777ced845c8df54fca1a 100644
--- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h
+++ b/src/cpu/core/Data/EsoTwistD3Q27System.h
@@ -47,60 +47,60 @@ struct EsoTwistD3Q27System {
  //   const static int STARTDIR = D3Q27System::STARTDIR;
     const static int ENDDIR   = D3Q27System::ENDDIR;
 
-    static const int REST = vf::lbm::dir::DIR_000; /*f0 */
-    static const int E    = vf::lbm::dir::DIR_P00;    /*f1 */
-    static const int W    = vf::lbm::dir::DIR_M00;    /*f2 */
-    static const int N    = vf::lbm::dir::DIR_0P0;    /*f3 */
-    static const int S    = vf::lbm::dir::DIR_0M0;    /*f4 */
-    static const int T    = vf::lbm::dir::DIR_00P;    /*f5 */
-    static const int B    = vf::lbm::dir::DIR_00M;    /*f6 */
-    static const int NE   = vf::lbm::dir::DIR_PP0;   /*f7 */
-    static const int SW   = vf::lbm::dir::DIR_MM0;   /*f8 */
-    static const int SE   = vf::lbm::dir::DIR_PM0;   /*f9 */
-    static const int NW   = vf::lbm::dir::DIR_MP0;   /*f10*/
-    static const int TE   = vf::lbm::dir::DIR_P0P;   /*f11*/
-    static const int BW   = vf::lbm::dir::DIR_M0M;   /*f12*/
-    static const int BE   = vf::lbm::dir::DIR_P0M;   /*f13*/
-    static const int TW   = vf::lbm::dir::DIR_M0P;   /*f14*/
-    static const int TN   = vf::lbm::dir::DIR_0PP;   /*f15*/
-    static const int BS   = vf::lbm::dir::DIR_0MM;   /*f16*/
-    static const int BN   = vf::lbm::dir::DIR_0PM;   /*f17*/
-    static const int TS   = vf::lbm::dir::DIR_0MP;   /*f18*/
-    static const int TNE  = vf::lbm::dir::DIR_PPP;
-    static const int TNW  = vf::lbm::dir::DIR_MPP;
-    static const int TSE  = vf::lbm::dir::DIR_PMP;
-    static const int TSW  = vf::lbm::dir::DIR_MMP;
-    static const int BNE  = vf::lbm::dir::DIR_PPM;
-    static const int BNW  = vf::lbm::dir::DIR_MPM;
-    static const int BSE  = vf::lbm::dir::DIR_PMM;
-    static const int BSW  = vf::lbm::dir::DIR_MMM;
+    static const int REST = vf::lbm::dir::d000; /*f0 */
+    static const int E    = vf::lbm::dir::dP00;    /*f1 */
+    static const int W    = vf::lbm::dir::dM00;    /*f2 */
+    static const int N    = vf::lbm::dir::d0P0;    /*f3 */
+    static const int S    = vf::lbm::dir::d0M0;    /*f4 */
+    static const int T    = vf::lbm::dir::d00P;    /*f5 */
+    static const int B    = vf::lbm::dir::d00M;    /*f6 */
+    static const int NE   = vf::lbm::dir::dPP0;   /*f7 */
+    static const int SW   = vf::lbm::dir::dMM0;   /*f8 */
+    static const int SE   = vf::lbm::dir::dPM0;   /*f9 */
+    static const int NW   = vf::lbm::dir::dMP0;   /*f10*/
+    static const int TE   = vf::lbm::dir::dP0P;   /*f11*/
+    static const int BW   = vf::lbm::dir::dM0M;   /*f12*/
+    static const int BE   = vf::lbm::dir::dP0M;   /*f13*/
+    static const int TW   = vf::lbm::dir::dM0P;   /*f14*/
+    static const int TN   = vf::lbm::dir::d0PP;   /*f15*/
+    static const int BS   = vf::lbm::dir::d0MM;   /*f16*/
+    static const int BN   = vf::lbm::dir::d0PM;   /*f17*/
+    static const int TS   = vf::lbm::dir::d0MP;   /*f18*/
+    static const int TNE  = vf::lbm::dir::dPPP;
+    static const int TNW  = vf::lbm::dir::dMPP;
+    static const int TSE  = vf::lbm::dir::dPMP;
+    static const int TSW  = vf::lbm::dir::dMMP;
+    static const int BNE  = vf::lbm::dir::dPPM;
+    static const int BNW  = vf::lbm::dir::dMPM;
+    static const int BSE  = vf::lbm::dir::dPMM;
+    static const int BSW  = vf::lbm::dir::dMMM;
 
-    static const int INV_E   = vf::lbm::dir::DIR_M00;
-    static const int INV_W   = vf::lbm::dir::DIR_P00;
-    static const int INV_N   = vf::lbm::dir::DIR_0M0;
-    static const int INV_S   = vf::lbm::dir::DIR_0P0;
-    static const int INV_T   = vf::lbm::dir::DIR_00M;
-    static const int INV_B   = vf::lbm::dir::DIR_00P;
-    static const int INV_NE  = vf::lbm::dir::DIR_MM0;
-    static const int INV_SW  = vf::lbm::dir::DIR_PP0;
-    static const int INV_SE  = vf::lbm::dir::DIR_MP0;
-    static const int INV_NW  = vf::lbm::dir::DIR_PM0;
-    static const int INV_TE  = vf::lbm::dir::DIR_M0M;
-    static const int INV_BW  = vf::lbm::dir::DIR_P0P;
-    static const int INV_BE  = vf::lbm::dir::DIR_M0P;
-    static const int INV_TW  = vf::lbm::dir::DIR_P0M;
-    static const int INV_TN  = vf::lbm::dir::DIR_0MM;
-    static const int INV_BS  = vf::lbm::dir::DIR_0PP;
-    static const int INV_BN  = vf::lbm::dir::DIR_0MP;
-    static const int INV_TS  = vf::lbm::dir::DIR_0PM;
-    static const int INV_TNE = vf::lbm::dir::DIR_MMM;
-    static const int INV_TNW = vf::lbm::dir::DIR_PMM;
-    static const int INV_TSE = vf::lbm::dir::DIR_MPM;
-    static const int INV_TSW = vf::lbm::dir::DIR_PPM;
-    static const int INV_BNE = vf::lbm::dir::DIR_MMP;
-    static const int INV_BNW = vf::lbm::dir::DIR_PMP;
-    static const int INV_BSE = vf::lbm::dir::DIR_MPP;
-    static const int INV_BSW = vf::lbm::dir::DIR_PPP;
+    static const int INV_E   = vf::lbm::dir::dM00;
+    static const int INV_W   = vf::lbm::dir::dP00;
+    static const int INV_N   = vf::lbm::dir::d0M0;
+    static const int INV_S   = vf::lbm::dir::d0P0;
+    static const int INV_T   = vf::lbm::dir::d00M;
+    static const int INV_B   = vf::lbm::dir::d00P;
+    static const int INV_NE  = vf::lbm::dir::dMM0;
+    static const int INV_SW  = vf::lbm::dir::dPP0;
+    static const int INV_SE  = vf::lbm::dir::dMP0;
+    static const int INV_NW  = vf::lbm::dir::dPM0;
+    static const int INV_TE  = vf::lbm::dir::dM0M;
+    static const int INV_BW  = vf::lbm::dir::dP0P;
+    static const int INV_BE  = vf::lbm::dir::dM0P;
+    static const int INV_TW  = vf::lbm::dir::dP0M;
+    static const int INV_TN  = vf::lbm::dir::d0MM;
+    static const int INV_BS  = vf::lbm::dir::d0PP;
+    static const int INV_BN  = vf::lbm::dir::d0MP;
+    static const int INV_TS  = vf::lbm::dir::d0PM;
+    static const int INV_TNE = vf::lbm::dir::dMMM;
+    static const int INV_TNW = vf::lbm::dir::dPMM;
+    static const int INV_TSE = vf::lbm::dir::dMPM;
+    static const int INV_TSW = vf::lbm::dir::dPPM;
+    static const int INV_BNE = vf::lbm::dir::dMMP;
+    static const int INV_BNW = vf::lbm::dir::dPMP;
+    static const int INV_BSE = vf::lbm::dir::dMPP;
+    static const int INV_BSW = vf::lbm::dir::dPPP;
 
     static const unsigned long int etZERO; // 1;/*f0 */
     static const unsigned long int etE;    //  2;    /*f1 */
diff --git a/src/cpu/VirtualFluidsCore/Data/VoidData3D.h b/src/cpu/core/Data/VoidData3D.h
similarity index 52%
rename from src/cpu/VirtualFluidsCore/Data/VoidData3D.h
rename to src/cpu/core/Data/VoidData3D.h
index 25fe5dde2a5a874fdefe0eaf2502c86df29faa95..2b47d397149fbc06d03045d46c95d9b3c3c7a4fc 100644
--- a/src/cpu/VirtualFluidsCore/Data/VoidData3D.h
+++ b/src/cpu/core/Data/VoidData3D.h
@@ -19,28 +19,28 @@ public:
     size_t getNX1() const override { return NX1; }
     size_t getNX2() const override { return NX2; }
     size_t getNX3() const override { return NX3; }
-    void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {}
+    void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {}
+    void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {}
+    void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {}
+    void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                      unsigned long int direction) override
     {
     }
-    void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override {}
+    void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override {}
     real getDistributionInvForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override
     {
         return 0.0;
     }
-    void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override
     {
     }
-    void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3,
+    void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override
     {
     }
-    real getDistributionForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override
+    real getPreCollisionDistributionForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override
     {
         return 0.0;
     }
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp b/src/cpu/core/Interactors/D3Q27Interactor.cpp
similarity index 90%
rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp
rename to src/cpu/core/Interactors/D3Q27Interactor.cpp
index d9c605a587c90a96d0e070f9528fefb028307cf6..598cfe5b07174a230ae7437ec7217b3d05c94f6e 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp
+++ b/src/cpu/core/Interactors/D3Q27Interactor.cpp
@@ -91,110 +91,110 @@ void D3Q27Interactor::initRayVectors()
     using namespace vf::basics::constant;
 
     int fdir;
-    real c1oS2 = vf::basics::constant::one_over_sqrt2;
-    real c1oS3 = vf::basics::constant::one_over_sqrt3;
-    fdir         = DIR_P00;
+    real c1oS2 = vf::basics::constant::c1oSqrt2;
+    real c1oS3 = vf::basics::constant::c1oSqrt3;
+    fdir         = dP00;
     rayX1[fdir]  = c1o1;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_M00;
+    fdir         = dM00;
     rayX1[fdir]  = -c1o1;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_0P0;
+    fdir         = d0P0;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = c1o1;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_0M0;
+    fdir         = d0M0;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = -c1o1;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_00P;
+    fdir         = d00P;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = c1o1;
-    fdir         = DIR_00M;
+    fdir         = d00M;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = -c1o1;
-    fdir         = DIR_PP0;
+    fdir         = dPP0;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_MM0;
+    fdir         = dMM0;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_PM0;
+    fdir         = dPM0;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_MP0;
+    fdir         = dMP0;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = c0o1;
-    fdir         = DIR_P0P;
+    fdir         = dP0P;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_M0M;
+    fdir         = dM0M;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_P0M;
+    fdir         = dP0M;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_M0P;
+    fdir         = dM0P;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = c0o1;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_0PP;
+    fdir         = d0PP;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_0MM;
+    fdir         = d0MM;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_0PM;
+    fdir         = d0PM;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_0MP;
+    fdir         = d0MP;
     rayX1[fdir]  = c0o1;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = c1oS2;
 
-    fdir        = DIR_MPP;
+    fdir        = dMPP;
     rayX1[fdir] = -c1oS3;
     rayX2[fdir] = c1oS3;
     rayX3[fdir] = c1oS3;
-    fdir        = DIR_PPP;
+    fdir        = dPPP;
     rayX1[fdir] = c1oS3;
     rayX2[fdir] = c1oS3;
     rayX3[fdir] = c1oS3;
-    fdir        = DIR_MMP;
+    fdir        = dMMP;
     rayX1[fdir] = -c1oS3;
     rayX2[fdir] = -c1oS3;
     rayX3[fdir] = c1oS3;
-    fdir        = DIR_PMP;
+    fdir        = dPMP;
     rayX1[fdir] = c1oS3;
     rayX2[fdir] = -c1oS3;
     rayX3[fdir] = c1oS3;
-    fdir        = DIR_MPM;
+    fdir        = dMPM;
     rayX1[fdir] = -c1oS3;
     rayX2[fdir] = c1oS3;
     rayX3[fdir] = -c1oS3;
-    fdir        = DIR_PPM;
+    fdir        = dPPM;
     rayX1[fdir] = c1oS3;
     rayX2[fdir] = c1oS3;
     rayX3[fdir] = -c1oS3;
-    fdir        = DIR_MMM;
+    fdir        = dMMM;
     rayX1[fdir] = -c1oS3;
     rayX2[fdir] = -c1oS3;
     rayX3[fdir] = -c1oS3;
-    fdir        = DIR_PMM;
+    fdir        = dPMM;
     rayX1[fdir] = c1oS3;
     rayX2[fdir] = -c1oS3;
     rayX3[fdir] = -c1oS3;
@@ -332,19 +332,19 @@ bool D3Q27Interactor::setDifferencesToGbObject3D(const SPtr<Block3D> block)
             throw UbException(
                 UB_EXARGS, "fuer den bei LB nicht vorkommenden Fall deltaX1!=deltaX2!=deltaX3  nicht implementiert ");
 
-        vector<real> distNeigh(D3Q27System::FENDDIR + 1, vf::basics::constant::sqrt2 * deltaX1);
-        distNeigh[DIR_P00] = distNeigh[DIR_M00] = distNeigh[DIR_0P0] = deltaX1;
-        distNeigh[DIR_0M0] = distNeigh[DIR_00P] = distNeigh[DIR_00M] = deltaX1;
-        distNeigh[DIR_PP0] = distNeigh[DIR_MP0] = distNeigh[DIR_MM0] =
-            distNeigh[DIR_PM0]             = vf::basics::constant::sqrt2 * deltaX1;
-        distNeigh[DIR_P0P] = distNeigh[DIR_0PP] = distNeigh[DIR_M0P] =
-            distNeigh[DIR_0MP]             = vf::basics::constant::sqrt2 * deltaX1;
-        distNeigh[DIR_P0M] = distNeigh[DIR_0PM] = distNeigh[DIR_M0M] =
-            distNeigh[DIR_0MM]             = vf::basics::constant::sqrt2 * deltaX1;
-        distNeigh[DIR_PPP] = distNeigh[DIR_MPP] = distNeigh[DIR_PMP] =
-            distNeigh[DIR_MMP]              = vf::basics::constant::sqrt3 * deltaX1;
-        distNeigh[DIR_PPM] = distNeigh[DIR_MPM] = distNeigh[DIR_PMM] =
-            distNeigh[DIR_MMM]              = vf::basics::constant::sqrt3 * deltaX1;
+        vector<real> distNeigh(D3Q27System::FENDDIR + 1, vf::basics::constant::cSqrt2 * deltaX1);
+        distNeigh[dP00] = distNeigh[dM00] = distNeigh[d0P0] = deltaX1;
+        distNeigh[d0M0] = distNeigh[d00P] = distNeigh[d00M] = deltaX1;
+        distNeigh[dPP0] = distNeigh[dMP0] = distNeigh[dMM0] =
+            distNeigh[dPM0]             = vf::basics::constant::cSqrt2 * deltaX1;
+        distNeigh[dP0P] = distNeigh[d0PP] = distNeigh[dM0P] =
+            distNeigh[d0MP]             = vf::basics::constant::cSqrt2 * deltaX1;
+        distNeigh[dP0M] = distNeigh[d0PM] = distNeigh[dM0M] =
+            distNeigh[d0MM]             = vf::basics::constant::cSqrt2 * deltaX1;
+        distNeigh[dPPP] = distNeigh[dMPP] = distNeigh[dPMP] =
+            distNeigh[dMMP]              = vf::basics::constant::cSqrt3 * deltaX1;
+        distNeigh[dPPM] = distNeigh[dMPM] = distNeigh[dPMM] =
+            distNeigh[dMMM]              = vf::basics::constant::cSqrt3 * deltaX1;
         real q;
         bool pointOnBoundary = false;
 
@@ -621,132 +621,132 @@ void D3Q27Interactor::addQsLineSet(std::vector<UbTupleFloat3> &nodes, std::vecto
                     if (bc->hasBoundaryConditionFlag(D3Q27System::INVDIR[dir])) {
                         real x1b, x2b, x3b, q = bc->getQ(dir);
                         switch (dir) {
-                            case DIR_P00:
+                            case dP00:
                                 x1b = x1a + q * dx;
                                 x2b = x2a;
                                 x3b = x3a;
                                 break;
-                            case DIR_0P0:
+                            case d0P0:
                                 x1b = x1a;
                                 x2b = x2a + q * dx;
                                 x3b = x3a;
                                 break;
-                            case DIR_M00:
+                            case dM00:
                                 x1b = x1a - q * dx;
                                 x2b = x2a;
                                 x3b = x3a;
                                 break;
-                            case DIR_0M0:
+                            case d0M0:
                                 x1b = x1a;
                                 x2b = x2a - q * dx;
                                 x3b = x3a;
                                 break;
-                            case DIR_PP0:
+                            case dPP0:
                                 x1b = x1a + q * dx;
                                 x2b = x2a + q * dx;
                                 x3b = x3a;
                                 break;
-                            case DIR_MP0:
+                            case dMP0:
                                 x1b = x1a - q * dx;
                                 x2b = x2a + q * dx;
                                 x3b = x3a;
                                 break;
-                            case DIR_MM0:
+                            case dMM0:
                                 x1b = x1a - q * dx;
                                 x2b = x2a - q * dx;
                                 x3b = x3a;
                                 break;
-                            case DIR_PM0:
+                            case dPM0:
                                 x1b = x1a + q * dx;
                                 x2b = x2a - q * dx;
                                 x3b = x3a;
                                 break;
-                            case DIR_00P:
+                            case d00P:
                                 x1b = x1a;
                                 x2b = x2a;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_P0P:
+                            case dP0P:
                                 x1b = x1a + q * dx;
                                 x2b = x2a;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_0PP:
+                            case d0PP:
                                 x1b = x1a;
                                 x2b = x2a + q * dx;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_M0P:
+                            case dM0P:
                                 x1b = x1a - q * dx;
                                 x2b = x2a;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_0MP:
+                            case d0MP:
                                 x1b = x1a;
                                 x2b = x2a - q * dx;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_00M:
+                            case d00M:
                                 x1b = x1a;
                                 x2b = x2a;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_P0M:
+                            case dP0M:
                                 x1b = x1a + q * dx;
                                 x2b = x2a;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_0PM:
+                            case d0PM:
                                 x1b = x1a;
                                 x2b = x2a + q * dx;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_M0M:
+                            case dM0M:
                                 x1b = x1a - q * dx;
                                 x2b = x2a;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_0MM:
+                            case d0MM:
                                 x1b = x1a;
                                 x2b = x2a - q * dx;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_PPP:
+                            case dPPP:
                                 x1b = x1a + q * dx;
                                 x2b = x2a + q * dx;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_MMM:
+                            case dMMM:
                                 x1b = x1a - q * dx;
                                 x2b = x2a - q * dx;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_PPM:
+                            case dPPM:
                                 x1b = x1a + q * dx;
                                 x2b = x2a + q * dx;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_MMP:
+                            case dMMP:
                                 x1b = x1a - q * dx;
                                 x2b = x2a - q * dx;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_PMP:
+                            case dPMP:
                                 x1b = x1a + q * dx;
                                 x2b = x2a - q * dx;
                                 x3b = x3a + q * dx;
                                 break;
-                            case DIR_MPM:
+                            case dMPM:
                                 x1b = x1a - q * dx;
                                 x2b = x2a + q * dx;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_PMM:
+                            case dPMM:
                                 x1b = x1a + q * dx;
                                 x2b = x2a - q * dx;
                                 x3b = x3a - q * dx;
                                 break;
-                            case DIR_MPP:
+                            case dMPP:
                                 x1b = x1a - q * dx;
                                 x2b = x2a + q * dx;
                                 x3b = x3a + q * dx;
@@ -792,17 +792,17 @@ vector<pair<GbPoint3D, GbPoint3D>> D3Q27Interactor::getQsLineSet()
         bool include_TN_Edge = false; //(x1/x2/x3)=([0..blocknx1[/blocknx2/blocknx1)
         bool include_TE_Edge = false; //(x1/x2/x3)=(blocknx1/[0..blocknx2[/blocknx2)
         if (block) {
-            if (!block->getConnector(DIR_0P0))
+            if (!block->getConnector(d0P0))
                 include_N_Face = true;
-            if (!block->getConnector(DIR_P00))
+            if (!block->getConnector(dP00))
                 include_E_Face = true;
-            if (!block->getConnector(DIR_00P))
+            if (!block->getConnector(d00P))
                 include_T_Face = true;
-            if (!block->getConnector(DIR_PP0) && include_N_Face && include_E_Face)
+            if (!block->getConnector(dPP0) && include_N_Face && include_E_Face)
                 include_NE_Edge = true;
-            if (!block->getConnector(DIR_0PP) && include_T_Face && include_N_Face)
+            if (!block->getConnector(d0PP) && include_T_Face && include_N_Face)
                 include_TN_Edge = true;
-            if (!block->getConnector(DIR_P0P) && include_T_Face && include_E_Face)
+            if (!block->getConnector(dP0P) && include_T_Face && include_E_Face)
                 include_TE_Edge = true;
         }
 
@@ -844,132 +844,132 @@ vector<pair<GbPoint3D, GbPoint3D>> D3Q27Interactor::getQsLineSet()
                         if (bc->hasBoundaryConditionFlag(D3Q27System::INVDIR[dir])) {
                             real x1b, x2b, x3b, q = bc->getQ(dir);
                             switch (dir) {
-                                case DIR_P00:
+                                case dP00:
                                     x1b = x1a + q * dx;
                                     x2b = x2a;
                                     x3b = x3a;
                                     break;
-                                case DIR_0P0:
+                                case d0P0:
                                     x1b = x1a;
                                     x2b = x2a + q * dx;
                                     x3b = x3a;
                                     break;
-                                case DIR_M00:
+                                case dM00:
                                     x1b = x1a - q * dx;
                                     x2b = x2a;
                                     x3b = x3a;
                                     break;
-                                case DIR_0M0:
+                                case d0M0:
                                     x1b = x1a;
                                     x2b = x2a - q * dx;
                                     x3b = x3a;
                                     break;
-                                case DIR_PP0:
+                                case dPP0:
                                     x1b = x1a + q * dx;
                                     x2b = x2a + q * dx;
                                     x3b = x3a;
                                     break;
-                                case DIR_MP0:
+                                case dMP0:
                                     x1b = x1a - q * dx;
                                     x2b = x2a + q * dx;
                                     x3b = x3a;
                                     break;
-                                case DIR_MM0:
+                                case dMM0:
                                     x1b = x1a - q * dx;
                                     x2b = x2a - q * dx;
                                     x3b = x3a;
                                     break;
-                                case DIR_PM0:
+                                case dPM0:
                                     x1b = x1a + q * dx;
                                     x2b = x2a - q * dx;
                                     x3b = x3a;
                                     break;
-                                case DIR_00P:
+                                case d00P:
                                     x1b = x1a;
                                     x2b = x2a;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_P0P:
+                                case dP0P:
                                     x1b = x1a + q * dx;
                                     x2b = x2a;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_0PP:
+                                case d0PP:
                                     x1b = x1a;
                                     x2b = x2a + q * dx;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_M0P:
+                                case dM0P:
                                     x1b = x1a - q * dx;
                                     x2b = x2a;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_0MP:
+                                case d0MP:
                                     x1b = x1a;
                                     x2b = x2a - q * dx;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_00M:
+                                case d00M:
                                     x1b = x1a;
                                     x2b = x2a;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_P0M:
+                                case dP0M:
                                     x1b = x1a + q * dx;
                                     x2b = x2a;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_0PM:
+                                case d0PM:
                                     x1b = x1a;
                                     x2b = x2a + q * dx;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_M0M:
+                                case dM0M:
                                     x1b = x1a - q * dx;
                                     x2b = x2a;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_0MM:
+                                case d0MM:
                                     x1b = x1a;
                                     x2b = x2a - q * dx;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_PPP:
+                                case dPPP:
                                     x1b = x1a + q * dx;
                                     x2b = x2a + q * dx;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_MMM:
+                                case dMMM:
                                     x1b = x1a - q * dx;
                                     x2b = x2a - q * dx;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_PPM:
+                                case dPPM:
                                     x1b = x1a + q * dx;
                                     x2b = x2a + q * dx;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_MMP:
+                                case dMMP:
                                     x1b = x1a - q * dx;
                                     x2b = x2a - q * dx;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_PMP:
+                                case dPMP:
                                     x1b = x1a + q * dx;
                                     x2b = x2a - q * dx;
                                     x3b = x3a + q * dx;
                                     break;
-                                case DIR_MPM:
+                                case dMPM:
                                     x1b = x1a - q * dx;
                                     x2b = x2a + q * dx;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_PMM:
+                                case dPMM:
                                     x1b = x1a + q * dx;
                                     x2b = x2a - q * dx;
                                     x3b = x3a - q * dx;
                                     break;
-                                case DIR_MPP:
+                                case dMPP:
                                     x1b = x1a - q * dx;
                                     x2b = x2a + q * dx;
                                     x3b = x3a + q * dx;
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h b/src/cpu/core/Interactors/D3Q27Interactor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
rename to src/cpu/core/Interactors/D3Q27Interactor.h
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.cpp b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.cpp
rename to src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp
index 98906576c44b5abf3895eb429d37ee0a065ae9ec..f655ac84d1c12b9206dad27d53250f1ff9702f02 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.cpp
+++ b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp
@@ -365,9 +365,9 @@ void D3Q27TriFaceMeshInteractor::setQs(const real &timeStep)
                 //            tmpSolidNodesFromOtherInteractors[block];
                 double q, distance;
 
-                double &nodeDx1 = nodeDeltaToNeigh[level][DIR_P00];
-                double &nodeDx2 = nodeDeltaToNeigh[level][DIR_0P0];
-                double &nodeDx3 = nodeDeltaToNeigh[level][DIR_00P];
+                double &nodeDx1 = nodeDeltaToNeigh[level][dP00];
+                double &nodeDx2 = nodeDeltaToNeigh[level][d0P0];
+                double &nodeDx3 = nodeDeltaToNeigh[level][d00P];
 
                 // fuer OBB-Test
                 double qEinflussDelta = 1.1 * sqrt(nodeDx1 * nodeDx1 + nodeDx2 * nodeDx2 + nodeDx3 * nodeDx3);
@@ -775,10 +775,10 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
         //   FeTriFaceMesh3D::VertexAttributes& vAttribut2 = (*attributes)[triangle.v2];
         //   FeTriFaceMesh3D::VertexAttributes& vAttribut3 = (*attributes)[triangle.v3];
         //   vx1 =
-        //   (float)(UbMath::c1o3*(vAttribut1.getVelocityX()+vAttribut2.getVelocityX()+vAttribut3.getVelocityX())); vx2
-        //   = (float)(UbMath::c1o3*(vAttribut1.getVelocityY()+vAttribut2.getVelocityY()+vAttribut3.getVelocityY()));
+        //   (float)(vf::basics::constant::c1o3*(vAttribut1.getVelocityX()+vAttribut2.getVelocityX()+vAttribut3.getVelocityX())); vx2
+        //   = (float)(vf::basics::constant::c1o3*(vAttribut1.getVelocityY()+vAttribut2.getVelocityY()+vAttribut3.getVelocityY()));
         //   vx3 =
-        //   (float)(UbMath::c1o3*(vAttribut1.getVelocityZ()+vAttribut2.getVelocityZ()+vAttribut3.getVelocityZ()));
+        //   (float)(vf::basics::constant::c1o3*(vAttribut1.getVelocityZ()+vAttribut2.getVelocityZ()+vAttribut3.getVelocityZ()));
         //}
 
         //////////////////////////////////////////////////////////////////////////
@@ -881,9 +881,9 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
                 std::set<std::vector<int>> &solidsFromOtherInteractors = tmpSolidNodesFromOtherInteractors[block];
                 double q, internX1, internX2, internX3, distance;
 
-                double &nodeDx1 = nodeDeltaToNeigh[level][DIR_P00];
-                double &nodeDx2 = nodeDeltaToNeigh[level][DIR_0P0];
-                double &nodeDx3 = nodeDeltaToNeigh[level][DIR_00P];
+                double &nodeDx1 = nodeDeltaToNeigh[level][dP00];
+                double &nodeDx2 = nodeDeltaToNeigh[level][d0P0];
+                double &nodeDx3 = nodeDeltaToNeigh[level][d00P];
 
                 // fuer OBB-Test
                 double qEinflussDelta = 1.1 * sqrt(nodeDx1 * nodeDx1 + nodeDx2 * nodeDx2 + nodeDx3 * nodeDx3);
@@ -1181,9 +1181,9 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
 
                 std::set<UbTupleInt3> &solidNodeIndices = this->solidNodeIndicesMap[block];
 
-                float nodeDeltaX1 = (float)nodeDeltaToNeigh[level][DIR_P00];
-                float nodeDeltaX2 = (float)nodeDeltaToNeigh[level][DIR_0P0];
-                float nodeDeltaX3 = (float)nodeDeltaToNeigh[level][DIR_00P];
+                float nodeDeltaX1 = (float)nodeDeltaToNeigh[level][dP00];
+                float nodeDeltaX2 = (float)nodeDeltaToNeigh[level][d0P0];
+                float nodeDeltaX3 = (float)nodeDeltaToNeigh[level][d00P];
 
                 // flagfield matrix initialisieren
                 CbArray3D<FLAGS> flagField(blocknx1, blocknx2, blocknx3, UNDEF_FLAG);
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.h b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.h
rename to src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.h
diff --git a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp b/src/cpu/core/Interactors/Interactor3D.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp
rename to src/cpu/core/Interactors/Interactor3D.cpp
diff --git a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h b/src/cpu/core/Interactors/Interactor3D.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h
rename to src/cpu/core/Interactors/Interactor3D.h
diff --git a/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp b/src/cpu/core/Interactors/InteractorsHelper.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp
rename to src/cpu/core/Interactors/InteractorsHelper.cpp
diff --git a/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.h b/src/cpu/core/Interactors/InteractorsHelper.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.h
rename to src/cpu/core/Interactors/InteractorsHelper.h
diff --git a/src/cpu/core/LBM/BGKLBMKernel.cpp b/src/cpu/core/LBM/BGKLBMKernel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d5cae00398a4156db28feea98a616363cef0671d
--- /dev/null
+++ b/src/cpu/core/LBM/BGKLBMKernel.cpp
@@ -0,0 +1,305 @@
+#include "BGKLBMKernel.h"
+#include "BCArray3D.h"
+#include "BCSet.h"
+#include "D3Q27EsoTwist3DSoA.h"
+#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "D3Q27System.h"
+#include "DataSet3D.h"
+#include "Block3D.h"
+#include "basics/constants/NumericConstants.h"
+
+#define PROOF_CORRECTNESS
+
+//////////////////////////////////////////////////////////////////////////
+BGKLBMKernel::BGKLBMKernel() { this->compressible = false; }
+//////////////////////////////////////////////////////////////////////////
+BGKLBMKernel::~BGKLBMKernel(void) = default;
+//////////////////////////////////////////////////////////////////////////
+void BGKLBMKernel::initDataSet()
+{
+    SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
+    dataSet->setFdistributions(d);
+}
+//////////////////////////////////////////////////////////////////////////
+SPtr<LBMKernel> BGKLBMKernel::clone()
+{
+    SPtr<LBMKernel> kernel(new BGKLBMKernel());
+    kernel->setNX(nx);
+    std::dynamic_pointer_cast<BGKLBMKernel>(kernel)->initDataSet();
+    kernel->setCollisionFactor(this->collFactor);
+    kernel->setBCSet(bcSet->clone(kernel));
+    kernel->setWithForcing(withForcing);
+    kernel->setForcingX1(muForcingX1);
+    kernel->setForcingX2(muForcingX2);
+    kernel->setForcingX3(muForcingX3);
+    kernel->setIndex(ix1, ix2, ix3);
+    kernel->setDeltaT(deltaT);
+    kernel->setBlock(block.lock());
+    return kernel;
+}
+//////////////////////////////////////////////////////////////////////////
+void BGKLBMKernel::calculate(int step)
+{
+    using namespace D3Q27System;
+ //   using namespace UbMath;
+   using namespace vf::basics::constant;
+   using namespace vf::lbm::dir;
+
+    // initializing of forcing stuff
+    if (withForcing) {
+        muForcingX1.DefineVar("x1", &muX1);
+        muForcingX1.DefineVar("x2", &muX2);
+        muForcingX1.DefineVar("x3", &muX3);
+        muForcingX2.DefineVar("x1", &muX1);
+        muForcingX2.DefineVar("x2", &muX2);
+        muForcingX2.DefineVar("x3", &muX3);
+        muForcingX3.DefineVar("x1", &muX1);
+        muForcingX3.DefineVar("x2", &muX2);
+        muForcingX3.DefineVar("x3", &muX3);
+        forcingX1 = 0;
+        forcingX2 = 0;
+        forcingX3 = 0;
+    }
+    /////////////////////////////////////
+
+    localDistributions =
+        std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
+    nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())
+                                ->getNonLocalDistributions();
+    zeroDistributions =
+        std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+
+    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
+    real f[D3Q27System::ENDF + 1];
+    real feq[D3Q27System::ENDF + 1];
+    real drho, vx1, vx2, vx3;
+    const int bcArrayMaxX1 = (int)bcArray->getNX1();
+    const int bcArrayMaxX2 = (int)bcArray->getNX2();
+    const int bcArrayMaxX3 = (int)bcArray->getNX3();
+
+    int minX1 = ghostLayerWidth;
+    int minX2 = ghostLayerWidth;
+    int minX3 = ghostLayerWidth;
+    int maxX1 = bcArrayMaxX1 - ghostLayerWidth;
+    int maxX2 = bcArrayMaxX2 - ghostLayerWidth;
+    int maxX3 = bcArrayMaxX3 - ghostLayerWidth;
+
+    for (int x3 = minX3; x3 < maxX3; x3++) {
+        for (int x2 = minX2; x2 < maxX2; x2++) {
+            for (int x1 = minX1; x1 < maxX1; x1++) {
+                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
+                    int x1p = x1 + 1;
+                    int x2p = x2 + 1;
+                    int x3p = x3 + 1;
+                    //////////////////////////////////////////////////////////////////////////
+                    // read distribution
+                    ////////////////////////////////////////////////////////////////////////////
+                    f[d000] = (*this->zeroDistributions)(x1, x2, x3);
+
+                    f[dP00]   = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
+                    f[d0P0]   = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
+                    f[d00P]   = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
+                    f[dPP0]  = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
+                    f[dMP0]  = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
+                    f[dP0P]  = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
+                    f[dM0P]  = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
+                    f[d0PP]  = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
+                    f[d0MP]  = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
+                    f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
+                    f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    f[dM00]   = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
+                    f[d0M0]   = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
+                    f[d00M]   = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
+                    f[dMM0]  = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    f[dPM0]  = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
+                    f[dM0M]  = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    f[dP0M]  = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
+                    f[d0MM]  = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    f[d0PM]  = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
+                    f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
+                    //////////////////////////////////////////////////////////////////////////
+
+                    drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] +
+                           f[dM0M] + f[dP0M] + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] +
+                           f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM];
+
+                    vx1 = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M] + f[dP0M] - f[dM0P] + f[dPPP] -
+                          f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM] + f[dPMM] - f[dMPM];
+
+                    vx2 = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM] - f[d0MP] + f[dPPP] -
+                          f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] + f[dMPM];
+
+                    vx3 = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM] + f[d0MP] + f[dPPP] +
+                          f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] - f[dMPM];
+
+                    real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
+
+                    feq[d000] = c8o27 * (drho - cu_sq);
+                    feq[dP00]    = c2o27 * (drho + c3o1 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq);
+                    feq[dM00]    = c2o27 * (drho + c3o1 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq);
+                    feq[d0P0]    = c2o27 * (drho + c3o1 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq);
+                    feq[d0M0]    = c2o27 * (drho + c3o1 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq);
+                    feq[d00P]    = c2o27 * (drho + c3o1 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq);
+                    feq[d00M]    = c2o27 * (drho + c3o1 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq);
+                    feq[dPP0]   = c1o54 * (drho + c3o1 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
+                    feq[dMM0]   = c1o54 * (drho + c3o1 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
+                    feq[dPM0]   = c1o54 * (drho + c3o1 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
+                    feq[dMP0]   = c1o54 * (drho + c3o1 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
+                    feq[dP0P]   = c1o54 * (drho + c3o1 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
+                    feq[dM0M]   = c1o54 * (drho + c3o1 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
+                    feq[dP0M]   = c1o54 * (drho + c3o1 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
+                    feq[dM0P]   = c1o54 * (drho + c3o1 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
+                    feq[d0PP]   = c1o54 * (drho + c3o1 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
+                    feq[d0MM]   = c1o54 * (drho + c3o1 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
+                    feq[d0PM]   = c1o54 * (drho + c3o1 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
+                    feq[d0MP]   = c1o54 * (drho + c3o1 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
+                    feq[dPPP]  = c1o216 *
+                               (drho + c3o1 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
+                    feq[dMMM] = c1o216 * (drho + c3o1 * (-vx1 - vx2 - vx3) +
+                                         c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
+                    feq[dPPM] = c1o216 *
+                               (drho + c3o1 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
+                    feq[dMMP] = c1o216 * (drho + c3o1 * (-vx1 - vx2 + vx3) +
+                                         c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
+                    feq[dPMP] = c1o216 *
+                               (drho + c3o1 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
+                    feq[dMPM] = c1o216 * (drho + c3o1 * (-vx1 + vx2 - vx3) +
+                                         c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
+                    feq[dPMM] = c1o216 *
+                               (drho + c3o1 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
+                    feq[dMPP] = c1o216 * (drho + c3o1 * (-vx1 + vx2 + vx3) +
+                                         c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
+
+                    // Relaxation
+                    f[d000] += (feq[d000] - f[d000]) * collFactor;
+                    f[dP00] += (feq[dP00] - f[dP00]) * collFactor;
+                    f[dM00] += (feq[dM00] - f[dM00]) * collFactor;
+                    f[d0P0] += (feq[d0P0] - f[d0P0]) * collFactor;
+                    f[d0M0] += (feq[d0M0] - f[d0M0]) * collFactor;
+                    f[d00P] += (feq[d00P] - f[d00P]) * collFactor;
+                    f[d00M] += (feq[d00M] - f[d00M]) * collFactor;
+                    f[dPP0] += (feq[dPP0] - f[dPP0]) * collFactor;
+                    f[dMM0] += (feq[dMM0] - f[dMM0]) * collFactor;
+                    f[dPM0] += (feq[dPM0] - f[dPM0]) * collFactor;
+                    f[dMP0] += (feq[dMP0] - f[dMP0]) * collFactor;
+                    f[dP0P] += (feq[dP0P] - f[dP0P]) * collFactor;
+                    f[dM0M] += (feq[dM0M] - f[dM0M]) * collFactor;
+                    f[dP0M] += (feq[dP0M] - f[dP0M]) * collFactor;
+                    f[dM0P] += (feq[dM0P] - f[dM0P]) * collFactor;
+                    f[d0PP] += (feq[d0PP] - f[d0PP]) * collFactor;
+                    f[d0MM] += (feq[d0MM] - f[d0MM]) * collFactor;
+                    f[d0PM] += (feq[d0PM] - f[d0PM]) * collFactor;
+                    f[d0MP] += (feq[d0MP] - f[d0MP]) * collFactor;
+
+                    f[dPPP] += (feq[dPPP] - f[dPPP]) * collFactor;
+                    f[dMMM] += (feq[dMMM] - f[dMMM]) * collFactor;
+                    f[dPPM] += (feq[dPPM] - f[dPPM]) * collFactor;
+                    f[dMMP] += (feq[dMMP] - f[dMMP]) * collFactor;
+                    f[dPMP] += (feq[dPMP] - f[dPMP]) * collFactor;
+                    f[dMPM] += (feq[dMPM] - f[dMPM]) * collFactor;
+                    f[dPMM] += (feq[dPMM] - f[dPMM]) * collFactor;
+                    f[dMPP] += (feq[dMPP] - f[dMPP]) * collFactor;
+
+                    //////////////////////////////////////////////////////////////////////////
+                    // forcing
+                    if (withForcing) {
+                        muX1 = x1 + ix1 * bcArrayMaxX1;
+                        muX2 = x2 + ix2 * bcArrayMaxX2;
+                        muX3 = x3 + ix3 * bcArrayMaxX3;
+
+                        forcingX1 = muForcingX1.Eval();
+                        forcingX2 = muForcingX2.Eval();
+                        forcingX3 = muForcingX3.Eval();
+
+                        f[d000] += c0o1;
+                        f[dP00] += c3o1 * c2o27 * (forcingX1);
+                        f[dM00] += c3o1 * c2o27 * (-forcingX1);
+                        f[d0P0] += c3o1 * c2o27 * (forcingX2);
+                        f[d0M0] += c3o1 * c2o27 * (-forcingX2);
+                        f[d00P] += c3o1 * c2o27 * (forcingX3);
+                        f[d00M] += c3o1 * c2o27 * (-forcingX3);
+                        f[dPP0] += c3o1 * c1o54 * (forcingX1 + forcingX2);
+                        f[dMM0] += c3o1 * c1o54 * (-forcingX1 - forcingX2);
+                        f[dPM0] += c3o1 * c1o54 * (forcingX1 - forcingX2);
+                        f[dMP0] += c3o1 * c1o54 * (-forcingX1 + forcingX2);
+                        f[dP0P] += c3o1 * c1o54 * (forcingX1 + forcingX3);
+                        f[dM0M] += c3o1 * c1o54 * (-forcingX1 - forcingX3);
+                        f[dP0M] += c3o1 * c1o54 * (forcingX1 - forcingX3);
+                        f[dM0P] += c3o1 * c1o54 * (-forcingX1 + forcingX3);
+                        f[d0PP] += c3o1 * c1o54 * (forcingX2 + forcingX3);
+                        f[d0MM] += c3o1 * c1o54 * (-forcingX2 - forcingX3);
+                        f[d0PM] += c3o1 * c1o54 * (forcingX2 - forcingX3);
+                        f[d0MP] += c3o1 * c1o54 * (-forcingX2 + forcingX3);
+                        f[dPPP] += c3o1 * c1o216 * (forcingX1 + forcingX2 + forcingX3);
+                        f[dMMM] += c3o1 * c1o216 * (-forcingX1 - forcingX2 - forcingX3);
+                        f[dPPM] += c3o1 * c1o216 * (forcingX1 + forcingX2 - forcingX3);
+                        f[dMMP] += c3o1 * c1o216 * (-forcingX1 - forcingX2 + forcingX3);
+                        f[dPMP] += c3o1 * c1o216 * (forcingX1 - forcingX2 + forcingX3);
+                        f[dMPM] += c3o1 * c1o216 * (-forcingX1 + forcingX2 - forcingX3);
+                        f[dPMM] += c3o1 * c1o216 * (forcingX1 - forcingX2 - forcingX3);
+                        f[dMPP] += c3o1 * c1o216 * (-forcingX1 + forcingX2 + forcingX3);
+                    }
+                    //////////////////////////////////////////////////////////////////////////
+#ifdef PROOF_CORRECTNESS
+                    real rho_post = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + f[dPP0] + f[dMM0] + f[dPM0] +
+                                       f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M] + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] +
+                                       f[dMMP] + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM];
+                    real dif = drho - rho_post;
+#ifdef SINGLEPRECISION
+                    if (dif > 10.0E-7 || dif < -10.0E-7)
+#else
+                    if (dif > 10.0E-15 || dif < -10.0E-15)
+#endif
+                    {
+                      UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(rho_post)
+                         +" dif="+UbSystem::toString(dif)
+                         +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)
+                         +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step)));
+                    }
+#endif
+                    //////////////////////////////////////////////////////////////////////////
+                    // write distribution
+                    //////////////////////////////////////////////////////////////////////////
+                    (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3)     = f[iP00];
+                    (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3)     = f[i0P0];
+                    (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3)     = f[i00P];
+                    (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3)    = f[iPP0];
+                    (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3)   = f[iMP0];
+                    (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3)    = f[iP0P];
+                    (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3)   = f[iM0P];
+                    (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3)    = f[i0PP];
+                    (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3)   = f[i0MP];
+                    (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3)   = f[iPPP];
+                    (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3)  = f[iMPP];
+                    (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3)  = f[iPMP];
+                    (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP];
+
+                    (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3)     = f[iM00];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3)     = f[i0M0];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p)     = f[i00M];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3)   = f[iMM0];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3)    = f[iPM0];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p)   = f[iM0M];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p)    = f[iP0M];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p)   = f[i0MM];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p)    = f[i0PM];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p)  = f[iPMM];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p)  = f[iMPM];
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p)   = f[iPPM];
+
+                    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
+                    //////////////////////////////////////////////////////////////////////////
+                }
+            }
+        }
+    }
+}
+//////////////////////////////////////////////////////////////////////////
+real BGKLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; }
diff --git a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.h b/src/cpu/core/LBM/BGKLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.h
rename to src/cpu/core/LBM/BGKLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.cpp b/src/cpu/core/LBM/BasicLBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.cpp
rename to src/cpu/core/LBM/BasicLBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.h b/src/cpu/core/LBM/BasicLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.h
rename to src/cpu/core/LBM/BasicLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
rename to src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
index c6349de8f1d281d31d0be4e684c54da457d3029f..e4d0017015b71a465c317b1bd8ce105e24c938bb 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
+++ b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
@@ -118,7 +118,7 @@ void CompressibleCumulant4thOrderViscosityLBMKernel::calculate(int step)
    //LBMReal B = (four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega);
 
    real A = (c4o1*omega*omega+c2o1*omega*OxxPyyPzz*(omega-c6o1)+OxxPyyPzz*OxxPyyPzz*(omega*(c10o1-c3o1*omega)-c4o1))/((omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega));
-   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' )
+   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
    real B = (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));
 
    for (int x3 = minX3; x3 < maxX3; x3++)
diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h
rename to src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.cpp
rename to src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/CompressibleCumulantLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.h
rename to src/cpu/core/LBM/CompressibleCumulantLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp b/src/cpu/core/LBM/CumulantK17LBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
rename to src/cpu/core/LBM/CumulantK17LBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h b/src/cpu/core/LBM/CumulantK17LBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
rename to src/cpu/core/LBM/CumulantK17LBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.cpp b/src/cpu/core/LBM/CumulantLBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.cpp
rename to src/cpu/core/LBM/CumulantLBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.h b/src/cpu/core/LBM/CumulantLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.h
rename to src/cpu/core/LBM/CumulantLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp b/src/cpu/core/LBM/D3Q27System.cpp
similarity index 89%
rename from src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp
rename to src/cpu/core/LBM/D3Q27System.cpp
index a35465e8cfde1f84a5446e4bbfcb02fc5478b8f1..174c7d8e30b5604da6a5dc71acbcd7b51bf0197a 100644
--- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp
+++ b/src/cpu/core/LBM/D3Q27System.cpp
@@ -25,9 +25,9 @@ const real WEIGTH[] = { c8o27,
                           c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,  c1o54,
                           c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216 };
 
-const int INVDIR[] = { DIR_000, INV_P00, INV_M00, INV_0P0, INV_0M0, INV_00P, INV_00M, 
-                                INV_PP0, INV_MM0, INV_PM0, INV_MP0, INV_P0P, INV_M0M, INV_P0M, INV_M0P, INV_0PP, INV_0MM, INV_0PM, INV_0MP,
-                                INV_PPP, INV_MPP, INV_PMP, INV_MMP, INV_PPM, INV_MPM, INV_PMM, INV_MMM };
+const int INVDIR[] = { d000, iP00, iM00, i0P0, i0M0, i00P, i00M, 
+                                iPP0, iMM0, iPM0, iMP0, iP0P, iM0M, iP0M, iM0P, i0PP, i0MM, i0PM, i0MP,
+                                iPPP, iMPP, iPMP, iMMP, iPPM, iMPM, iPMM, iMMM };
 
 // index             0   1   2   3   4   5  6   7   8    9  10  11  12  13  14  15  16  17  18
 // direction:        E,  W,  N,  S,  T,  B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE
diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/core/LBM/D3Q27System.h
similarity index 72%
rename from src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
rename to src/cpu/core/LBM/D3Q27System.h
index c63e9f554367808d95c87fd630922333cf17790b..0f284a2cbe30e8c181c6de8ea7ed589c3c35bf75 100644
--- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
+++ b/src/cpu/core/LBM/D3Q27System.h
@@ -131,60 +131,60 @@ extern const int EX3[ENDDIR + 1];
 //static constexpr int BSE = 25;
 //static constexpr int BSW = 26;
 
-//static constexpr int DIR_000 = 0;
-//static constexpr int DIR_P00 = 1;
-//static constexpr int DIR_M00 = 2;
-//static constexpr int DIR_0P0 = 3;
-//static constexpr int DIR_0M0 = 4;
-//static constexpr int DIR_00P = 5;
-//static constexpr int DIR_00M = 6;
-//static constexpr int DIR_PP0 = 7;
-//static constexpr int DIR_MM0 = 8;
-//static constexpr int DIR_PM0 = 9;
-//static constexpr int DIR_MP0 = 10;
-//static constexpr int DIR_P0P = 11;
-//static constexpr int DIR_M0M = 12;
-//static constexpr int DIR_P0M = 13;
-//static constexpr int DIR_M0P = 14;
-//static constexpr int DIR_0PP = 15;
-//static constexpr int DIR_0MM = 16;
-//static constexpr int DIR_0PM = 17;
-//static constexpr int DIR_0MP = 18;
-//static constexpr int DIR_PPP = 19;
-//static constexpr int DIR_MPP = 20;
-//static constexpr int DIR_PMP = 21;
-//static constexpr int DIR_MMP = 22;
-//static constexpr int DIR_PPM = 23;
-//static constexpr int DIR_MPM = 24;
-//static constexpr int DIR_PMM = 25;
-//static constexpr int DIR_MMM = 26;
-
-//static constexpr int INV_P00 = DIR_M00;
-//static constexpr int INV_M00 = DIR_P00;
-//static constexpr int INV_0P0 = DIR_0M0;
-//static constexpr int INV_0M0 = DIR_0P0;
-//static constexpr int INV_00P = DIR_00M;
-//static constexpr int INV_00M = DIR_00P;
-//static constexpr int INV_PP0 = DIR_MM0;
-//static constexpr int INV_MM0 = DIR_PP0;
-//static constexpr int INV_PM0 = DIR_MP0;
-//static constexpr int INV_MP0 = DIR_PM0;
-//static constexpr int INV_P0P = DIR_M0M;
-//static constexpr int INV_M0M = DIR_P0P;
-//static constexpr int INV_P0M = DIR_M0P;
-//static constexpr int INV_M0P = DIR_P0M;
-//static constexpr int INV_0PP = DIR_0MM;
-//static constexpr int INV_0MM = DIR_0PP;
-//static constexpr int INV_0PM = DIR_0MP;
-//static constexpr int INV_0MP = DIR_0PM;
-//static constexpr int INV_PPP = DIR_MMM;
-//static constexpr int INV_MPP = DIR_PMM;
-//static constexpr int INV_PMP = DIR_MPM;
-//static constexpr int INV_MMP = DIR_PPM;
-//static constexpr int INV_PPM = DIR_MMP;
-//static constexpr int INV_MPM = DIR_PMP;
-//static constexpr int INV_PMM = DIR_MPP;
-//static constexpr int INV_MMM = DIR_PPP;
+//static constexpr int d000 = 0;
+//static constexpr int dP00 = 1;
+//static constexpr int dM00 = 2;
+//static constexpr int d0P0 = 3;
+//static constexpr int d0M0 = 4;
+//static constexpr int d00P = 5;
+//static constexpr int d00M = 6;
+//static constexpr int dPP0 = 7;
+//static constexpr int dMM0 = 8;
+//static constexpr int dPM0 = 9;
+//static constexpr int dMP0 = 10;
+//static constexpr int dP0P = 11;
+//static constexpr int dM0M = 12;
+//static constexpr int dP0M = 13;
+//static constexpr int dM0P = 14;
+//static constexpr int d0PP = 15;
+//static constexpr int d0MM = 16;
+//static constexpr int d0PM = 17;
+//static constexpr int d0MP = 18;
+//static constexpr int dPPP = 19;
+//static constexpr int dMPP = 20;
+//static constexpr int dPMP = 21;
+//static constexpr int dMMP = 22;
+//static constexpr int dPPM = 23;
+//static constexpr int dMPM = 24;
+//static constexpr int dPMM = 25;
+//static constexpr int dMMM = 26;
+
+//static constexpr int iP00 = dM00;
+//static constexpr int iM00 = dP00;
+//static constexpr int i0P0 = d0M0;
+//static constexpr int i0M0 = d0P0;
+//static constexpr int i00P = d00M;
+//static constexpr int i00M = d00P;
+//static constexpr int iPP0 = dMM0;
+//static constexpr int iMM0 = dPP0;
+//static constexpr int iPM0 = dMP0;
+//static constexpr int iMP0 = dPM0;
+//static constexpr int iP0P = dM0M;
+//static constexpr int iM0M = dP0P;
+//static constexpr int iP0M = dM0P;
+//static constexpr int iM0P = dP0M;
+//static constexpr int i0PP = d0MM;
+//static constexpr int i0MM = d0PP;
+//static constexpr int i0PM = d0MP;
+//static constexpr int i0MP = d0PM;
+//static constexpr int iPPP = dMMM;
+//static constexpr int iMPP = dPMM;
+//static constexpr int iPMP = dMPM;
+//static constexpr int iMMP = dPPM;
+//static constexpr int iPPM = dMMP;
+//static constexpr int iMPM = dPMP;
+//static constexpr int iPMM = dMPP;
+//static constexpr int iMMM = dPPP;
 
 extern const int INVDIR[ENDDIR + 1];
 
@@ -248,57 +248,57 @@ inline std::string getDirectionString(int direction)
     using namespace vf::lbm::dir;
 
     switch (direction) {
-        case DIR_P00:
+        case dP00:
             return "E";
-        case DIR_M00:
+        case dM00:
             return "W";
-        case DIR_0P0:
+        case d0P0:
             return "N";
-        case DIR_0M0:
+        case d0M0:
             return "S";
-        case DIR_00P:
+        case d00P:
             return "T";
-        case DIR_00M:
+        case d00M:
             return "B";
-        case DIR_PP0:
+        case dPP0:
             return "NE";
-        case DIR_MP0:
+        case dMP0:
             return "NW";
-        case DIR_PM0:
+        case dPM0:
             return "SE";
-        case DIR_MM0:
+        case dMM0:
             return "SW";
-        case DIR_P0P:
+        case dP0P:
             return "TE";
-        case DIR_M0P:
+        case dM0P:
             return "TW";
-        case DIR_P0M:
+        case dP0M:
             return "BE";
-        case DIR_M0M:
+        case dM0M:
             return "BW";
-        case DIR_0PP:
+        case d0PP:
             return "TN";
-        case DIR_0MP:
+        case d0MP:
             return "TS";
-        case DIR_0PM:
+        case d0PM:
             return "BN";
-        case DIR_0MM:
+        case d0MM:
             return "BS";
-        case DIR_PPP:
+        case dPPP:
             return "TNE";
-        case DIR_MPP:
+        case dMPP:
             return "TNW";
-        case DIR_PMP:
+        case dPMP:
             return "TSE";
-        case DIR_MMP:
+        case dMMP:
             return "TSW";
-        case DIR_PPM:
+        case dPPM:
             return "BNE";
-        case DIR_MPM:
+        case dMPM:
             return "BNW";
-        case DIR_PMM:
+        case dPMM:
             return "BSE";
-        case DIR_MMM:
+        case dMMM:
             return "BSW";
         default:
             return "Cell3DSystem::getDrectionString(...) - unknown dir";
@@ -310,108 +310,108 @@ static inline void setNeighborCoordinatesForDirection(int &x1, int &x2, int &x3,
     using namespace vf::lbm::dir;
 
     switch (direction) {
-        case DIR_P00:
+        case dP00:
             x1++;
             break;
-        case DIR_0P0:
+        case d0P0:
             x2++;
             break;
-        case DIR_00P:
+        case d00P:
             x3++;
             break;
-        case DIR_M00:
+        case dM00:
             x1--;
             break;
-        case DIR_0M0:
+        case d0M0:
             x2--;
             break;
-        case DIR_00M:
+        case d00M:
             x3--;
             break;
-        case DIR_PP0:
+        case dPP0:
             x1++;
             x2++;
             break;
-        case DIR_MP0:
+        case dMP0:
             x1--;
             x2++;
             break;
-        case DIR_MM0:
+        case dMM0:
             x1--;
             x2--;
             break;
-        case DIR_PM0:
+        case dPM0:
             x1++;
             x2--;
             break;
-        case DIR_P0P:
+        case dP0P:
             x1++;
             x3++;
             break;
-        case DIR_M0M:
+        case dM0M:
             x1--;
             x3--;
             break;
-        case DIR_P0M:
+        case dP0M:
             x1++;
             x3--;
             break;
-        case DIR_M0P:
+        case dM0P:
             x1--;
             x3++;
             break;
-        case DIR_0PP:
+        case d0PP:
             x2++;
             x3++;
             break;
-        case DIR_0MM:
+        case d0MM:
             x2--;
             x3--;
             break;
-        case DIR_0PM:
+        case d0PM:
             x2++;
             x3--;
             break;
-        case DIR_0MP:
+        case d0MP:
             x2--;
             x3++;
             break;
-        case DIR_PPP:
+        case dPPP:
             x1++;
             x2++;
             x3++;
             break;
-        case DIR_MPP:
+        case dMPP:
             x1--;
             x2++;
             x3++;
             break;
-        case DIR_PMP:
+        case dPMP:
             x1++;
             x2--;
             x3++;
             break;
-        case DIR_MMP:
+        case dMMP:
             x1--;
             x2--;
             x3++;
             break;
-        case DIR_PPM:
+        case dPPM:
             x1++;
             x2++;
             x3--;
             break;
-        case DIR_MPM:
+        case dMPM:
             x1--;
             x2++;
             x3--;
             break;
-        case DIR_PMM:
+        case dPMM:
             x1++;
             x2--;
             x3--;
             break;
-        case DIR_MMM:
+        case dMMM:
             x1--;
             x2--;
             x3--;
@@ -440,42 +440,42 @@ static void calcDensity(const real *const &f /*[27]*/, real &rho)
 {
     using namespace vf::lbm::dir;
 
-    rho = ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-          (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) +
-           ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-          ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000];
+    rho = ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+          (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
+           ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+          ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
 }
 /*=====================================================================*/
 static void calcIncompVelocityX1(const real *const &f /*[27]*/, real &vx1)
 {
     using namespace vf::lbm::dir;
 
-    vx1 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-           (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00]));
+    vx1 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+           (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00]));
 }
 /*=====================================================================*/
 static void calcIncompVelocityX2(const real *const &f /*[27]*/, real &vx2)
 {
     using namespace vf::lbm::dir;
 
-    vx2 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-           (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0]));
+    vx2 = ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+           (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0]));
 }
 /*=====================================================================*/
 static void calcIncompVelocityX3(const real *const &f /*[27]*/, real &vx3)
 {
     using namespace vf::lbm::dir;
 
-    vx3 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-           (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M]));
+    vx3 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+           (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M]));
 }
 /*=====================================================================*/
 static real getCompVelocityX1(const real *const &f /*[27]*/)
 {
     using namespace vf::lbm::dir;
 
-    return ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-            (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) /
+    return ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) /
            getDensity(f);
 }
 /*=====================================================================*/
@@ -483,8 +483,8 @@ static real getCompVelocityX2(const real *const &f /*[27]*/)
 {
     using namespace vf::lbm::dir;
 
-    return ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-            (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) /
+    return ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) /
            getDensity(f);
 }
 /*=====================================================================*/
@@ -492,8 +492,8 @@ static real getCompVelocityX3(const real *const &f /*[27]*/)
 {
     using namespace vf::lbm::dir;
 
-    return ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-            (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])) /
+    return ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) /
            getDensity(f);
 }
 /*=====================================================================*/
@@ -501,8 +501,8 @@ static void calcCompVelocityX1(const real *const &f /*[27]*/, real &vx1)
 {
     using namespace vf::lbm::dir;
 
-    vx1 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-           (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) /
+    vx1 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+           (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) /
           getDensity(f);
 }
 /*=====================================================================*/
@@ -510,8 +510,8 @@ static void calcCompVelocityX2(const real *const &f /*[27]*/, real &vx2)
 {
     using namespace vf::lbm::dir;
 
-    vx2 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-           (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) /
+    vx2 = ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+           (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) /
           getDensity(f);
 }
 /*=====================================================================*/
@@ -519,8 +519,8 @@ static void calcCompVelocityX3(const real *const &f /*[27]*/, real &vx3)
 {
     using namespace vf::lbm::dir;
 
-    vx3 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-           (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])) /
+    vx3 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+           (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) /
           getDensity(f);
 }
 /*=====================================================================*/
@@ -556,85 +556,85 @@ static real getCompFeqForDirection(const int &direction, const real &drho, const
     real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
     real rho   = drho + vf::basics::constant::c1o1;
     switch (direction) {
-        case DIR_000:
+        case d000:
             return REAL_CAST(vf::basics::constant::c8o27 * (drho + rho * (-cu_sq)));
-        case DIR_P00:
+        case dP00:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx1) +vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq)));
-        case DIR_M00:
+        case dM00:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq)));
-        case DIR_0P0:
+        case d0P0:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx2) +vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq)));
-        case DIR_0M0:
+        case d0M0:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq)));
-        case DIR_00P:
+        case d00P:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq)));
-        case DIR_00M:
+        case d00M:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq)));
-        case DIR_PP0:
+        case dPP0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)));
-        case DIR_MM0:
+        case dMM0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)));
-        case DIR_PM0:
+        case dPM0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)));
-        case DIR_MP0:
+        case dMP0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)));
-        case DIR_P0P:
+        case dP0P:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)));
-        case DIR_M0M:
+        case dM0M:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)));
-        case DIR_P0M:
+        case dP0M:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)));
-        case DIR_M0P:
+        case dM0P:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)));
-        case DIR_0PP:
+        case d0PP:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)));
-        case DIR_0MM:
+        case d0MM:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)));
-        case DIR_0PM:
+        case d0PM:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)));
-        case DIR_0MP:
+        case d0MP:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + rho * (3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)));
-        case DIR_PPP:
+        case dPPP:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (vx1 + vx2 + vx3) +
                                  vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)));
-        case DIR_MMM:
+        case dMMM:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (-vx1 - vx2 - vx3) +
                                  vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)));
-        case DIR_PPM:
+        case dPPM:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (vx1 + vx2 - vx3) +
                                  vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)));
-        case DIR_MMP:
+        case dMMP:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (-vx1 - vx2 + vx3) +
                                             vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)));
-        case DIR_PMP:
+        case dPMP:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (vx1 - vx2 + vx3) +
                                  vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)));
-        case DIR_MPM:
+        case dMPM:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (-vx1 + vx2 - vx3) +
                                  vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)));
-        case DIR_PMM:
+        case dPMM:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (vx1 - vx2 - vx3) +
                                  vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)));
-        case DIR_MPP:
+        case dMPP:
             return REAL_CAST(vf::basics::constant::c1o216 *
                              (drho + rho * (3.0 * (-vx1 + vx2 + vx3) +
                                  vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)));
@@ -651,43 +651,43 @@ static void calcCompFeq(real *const &feq /*[27]*/, const real &drho, const real
     real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
     real rho   = drho + vf::basics::constant::c1o1;
 
-    feq[DIR_000] = vf::basics::constant::c8o27 * (drho + rho * (-cu_sq));
-    feq[DIR_P00]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq));
-    feq[DIR_M00]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq));
-    feq[DIR_0P0]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq));
-    feq[DIR_0M0]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq));
-    feq[DIR_00P]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq));
-    feq[DIR_00M]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq));
-    feq[DIR_PP0]   = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
-    feq[DIR_MM0]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
-    feq[DIR_PM0]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
-    feq[DIR_MP0]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
-    feq[DIR_P0P]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
-    feq[DIR_M0M]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
-    feq[DIR_P0M]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
-    feq[DIR_M0P]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
-    feq[DIR_0PP]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
-    feq[DIR_0MM]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
-    feq[DIR_0PM]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
-    feq[DIR_0MP]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
-    feq[DIR_PPP] = vf::basics::constant::c1o216 *
+    feq[d000] = vf::basics::constant::c8o27 * (drho + rho * (-cu_sq));
+    feq[dP00]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq));
+    feq[dM00]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq));
+    feq[d0P0]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq));
+    feq[d0M0]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq));
+    feq[d00P]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq));
+    feq[d00M]    = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq));
+    feq[dPP0]   = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
+    feq[dMM0]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
+    feq[dPM0]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
+    feq[dMP0]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
+    feq[dP0P]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
+    feq[dM0M]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
+    feq[dP0M]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
+    feq[dM0P]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
+    feq[d0PP]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
+    feq[d0MM]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
+    feq[d0PM]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
+    feq[d0MP]  = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
+    feq[dPPP] = vf::basics::constant::c1o216 *
                (drho + rho * (3.0 * (vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
-    feq[DIR_MMM] =
+    feq[dMMM] =
         vf::basics::constant::c1o216 *
         (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
-    feq[DIR_PPM] = vf::basics::constant::c1o216 *
+    feq[dPPM] = vf::basics::constant::c1o216 *
                (drho + rho * (3.0 * (vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
-    feq[DIR_MMP] =
+    feq[dMMP] =
         vf::basics::constant::c1o216 *
         (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
-    feq[DIR_PMP] = vf::basics::constant::c1o216 *
+    feq[dPMP] = vf::basics::constant::c1o216 *
                (drho + rho * (3.0 * (vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
-    feq[DIR_MPM] =
+    feq[dMPM] =
         vf::basics::constant::c1o216 *
         (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
-    feq[DIR_PMM] = vf::basics::constant::c1o216 *
+    feq[dPMM] = vf::basics::constant::c1o216 *
                (drho + rho * (3.0 * (vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
-    feq[DIR_MPP] =
+    feq[dMPP] =
         vf::basics::constant::c1o216 *
         (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
 }
@@ -700,78 +700,78 @@ static real getIncompFeqForDirection(const int &direction, const real &drho, con
     real cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
     switch (direction) {
-        case DIR_000:
+        case d000:
             return REAL_CAST(vf::basics::constant::c8o27 * (drho - cu_sq));
-        case DIR_P00:
+        case dP00:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq));
-        case DIR_M00:
+        case dM00:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq));
-        case DIR_0P0:
+        case d0P0:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq));
-        case DIR_0M0:
+        case d0M0:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq));
-        case DIR_00P:
+        case d00P:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq));
-        case DIR_00M:
+        case d00M:
             return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq));
-        case DIR_PP0:
+        case dPP0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
-        case DIR_MM0:
+        case dMM0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
-        case DIR_PM0:
+        case dPM0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
-        case DIR_MP0:
+        case dMP0:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
-        case DIR_P0P:
+        case dP0P:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
-        case DIR_M0M:
+        case dM0M:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
-        case DIR_P0M:
+        case dP0M:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
-        case DIR_M0P:
+        case dM0P:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
-        case DIR_0PP:
+        case d0PP:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
-        case DIR_0MM:
+        case d0MM:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
-        case DIR_0PM:
+        case d0PM:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
-        case DIR_0MP:
+        case d0MP:
             return REAL_CAST(vf::basics::constant::c1o54 *
                              (drho + 3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
-        case DIR_PPP:
+        case dPPP:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) +
                                                vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
-        case DIR_MMM:
+        case dMMM:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) +
                                                vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
-        case DIR_PPM:
+        case dPPM:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) +
                                                vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
-        case DIR_MMP:
+        case dMMP:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) +
                                                vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
-        case DIR_PMP:
+        case dPMP:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) +
                                                vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
-        case DIR_MPM:
+        case dMPM:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) +
                                                vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
-        case DIR_PMM:
+        case dPMM:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) +
                                                vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
-        case DIR_MPP:
+        case dMPP:
             return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) +
                                                vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
         default:
@@ -786,40 +786,40 @@ static void calcIncompFeq(real *const &feq /*[27]*/, const real &drho, const rea
 
     real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-    feq[DIR_000] = vf::basics::constant::c8o27 * (drho - cu_sq);
-    feq[DIR_P00]    = vf::basics::constant::c2o27 * (drho + 3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq);
-    feq[DIR_M00]    = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq);
-    feq[DIR_0P0]    = vf::basics::constant::c2o27 * (drho + 3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq);
-    feq[DIR_0M0]    = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq);
-    feq[DIR_00P]    = vf::basics::constant::c2o27 * (drho + 3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq);
-    feq[DIR_00M]    = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq);
-    feq[DIR_PP0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
-    feq[DIR_MM0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
-    feq[DIR_PM0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
-    feq[DIR_MP0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
-    feq[DIR_P0P]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
-    feq[DIR_M0M]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
-    feq[DIR_P0M]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
-    feq[DIR_M0P]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
-    feq[DIR_0PP]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
-    feq[DIR_0MM]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
-    feq[DIR_0PM]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
-    feq[DIR_0MP]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
-    feq[DIR_PPP]  = vf::basics::constant::c1o216 *
+    feq[d000] = vf::basics::constant::c8o27 * (drho - cu_sq);
+    feq[dP00]    = vf::basics::constant::c2o27 * (drho + 3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq);
+    feq[dM00]    = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq);
+    feq[d0P0]    = vf::basics::constant::c2o27 * (drho + 3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq);
+    feq[d0M0]    = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq);
+    feq[d00P]    = vf::basics::constant::c2o27 * (drho + 3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq);
+    feq[d00M]    = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq);
+    feq[dPP0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
+    feq[dMM0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
+    feq[dPM0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
+    feq[dMP0]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
+    feq[dP0P]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
+    feq[dM0M]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
+    feq[dP0M]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
+    feq[dM0P]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
+    feq[d0PP]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
+    feq[d0MM]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
+    feq[d0PM]   = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
+    feq[d0MP]   = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
+    feq[dPPP]  = vf::basics::constant::c1o216 *
                (drho + 3.0 * (vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
-    feq[DIR_MMM] = vf::basics::constant::c1o216 *
+    feq[dMMM] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (-vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
-    feq[DIR_PPM] = vf::basics::constant::c1o216 *
+    feq[dPPM] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
-    feq[DIR_MMP] = vf::basics::constant::c1o216 *
+    feq[dMMP] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (-vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
-    feq[DIR_PMP] = vf::basics::constant::c1o216 *
+    feq[dPMP] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
-    feq[DIR_MPM] = vf::basics::constant::c1o216 *
+    feq[dMPM] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (-vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
-    feq[DIR_PMM] = vf::basics::constant::c1o216 *
+    feq[dPMM] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
-    feq[DIR_MPP] = vf::basics::constant::c1o216 *
+    feq[dMPP] = vf::basics::constant::c1o216 *
                (drho + 3.0 * (-vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
 }
 //////////////////////////////////////////////////////////////////////////
@@ -829,57 +829,57 @@ static inline real getBoundaryVelocityForDirection(const int &direction, const r
     using namespace vf::lbm::dir;
  
     switch (direction) {
-        case DIR_P00:
+        case dP00:
             return (real)(vf::basics::constant::c4o9 * (+bcVelocityX1));
-        case DIR_M00:
+        case dM00:
             return (real)(vf::basics::constant::c4o9 * (-bcVelocityX1));
-        case DIR_0P0:
+        case d0P0:
             return (real)(vf::basics::constant::c4o9 * (+bcVelocityX2));
-        case DIR_0M0:
+        case d0M0:
             return (real)(vf::basics::constant::c4o9 * (-bcVelocityX2));
-        case DIR_00P:
+        case d00P:
             return (real)(vf::basics::constant::c4o9 * (+bcVelocityX3));
-        case DIR_00M:
+        case d00M:
             return (real)(vf::basics::constant::c4o9 * (-bcVelocityX3));
-        case DIR_PP0:
+        case dPP0:
             return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX2));
-        case DIR_MM0:
+        case dMM0:
             return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX2));
-        case DIR_PM0:
+        case dPM0:
             return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX2));
-        case DIR_MP0:
+        case dMP0:
             return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX2));
-        case DIR_P0P:
+        case dP0P:
             return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX3));
-        case DIR_M0M:
+        case dM0M:
             return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX3));
-        case DIR_P0M:
+        case dP0M:
             return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX3));
-        case DIR_M0P:
+        case dM0P:
             return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX3));
-        case DIR_0PP:
+        case d0PP:
             return (real)(vf::basics::constant::c1o9 * (+bcVelocityX2 + bcVelocityX3));
-        case DIR_0MM:
+        case d0MM:
             return (real)(vf::basics::constant::c1o9 * (-bcVelocityX2 - bcVelocityX3));
-        case DIR_0PM:
+        case d0PM:
             return (real)(vf::basics::constant::c1o9 * (+bcVelocityX2 - bcVelocityX3));
-        case DIR_0MP:
+        case d0MP:
             return (real)(vf::basics::constant::c1o9 * (-bcVelocityX2 + bcVelocityX3));
-        case DIR_PPP:
+        case dPPP:
             return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
-        case DIR_MMM:
+        case dMMM:
             return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
-        case DIR_PPM:
+        case dPPM:
             return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
-        case DIR_MMP:
+        case dMMP:
             return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
-        case DIR_PMP:
+        case dPMP:
             return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
-        case DIR_MPM:
+        case dMPM:
             return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
-        case DIR_PMM:
+        case dPMM:
             return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
-        case DIR_MPP:
+        case dMPP:
             return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
         default:
             throw UbException(UB_EXARGS, "unknown direction");
@@ -937,15 +937,15 @@ static inline void calcDistanceToNeighbors(std::vector<real> &distNeigh, const r
 {
     using namespace vf::lbm::dir;
 
-    // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1);
+    // distNeigh.resize(FENDDIR+1, UbMath::cSqrt2*deltaX1);
 
-    distNeigh[DIR_P00] = distNeigh[DIR_M00] = distNeigh[DIR_0P0] = deltaX1;
-    distNeigh[DIR_0M0] = distNeigh[DIR_00P] = distNeigh[DIR_00M] = deltaX1;
-    distNeigh[DIR_PP0] = distNeigh[DIR_MP0] = distNeigh[DIR_MM0] = distNeigh[DIR_PM0] = vf::basics::constant::sqrt2 * deltaX1;
-    distNeigh[DIR_P0P] = distNeigh[DIR_0PP] = distNeigh[DIR_M0P] = distNeigh[DIR_0MP] = vf::basics::constant::sqrt2 * deltaX1;
-    distNeigh[DIR_P0M] = distNeigh[DIR_0PM] = distNeigh[DIR_M0M] = distNeigh[DIR_0MM] = vf::basics::constant::sqrt2 * deltaX1;
-    distNeigh[DIR_PPP] = distNeigh[DIR_MPP] = distNeigh[DIR_PMP] = distNeigh[DIR_MMP] = vf::basics::constant::sqrt3 * deltaX1;
-    distNeigh[DIR_PPM] = distNeigh[DIR_MPM] = distNeigh[DIR_PMM] = distNeigh[DIR_MMM] = vf::basics::constant::sqrt3 * deltaX1;
+    distNeigh[dP00] = distNeigh[dM00] = distNeigh[d0P0] = deltaX1;
+    distNeigh[d0M0] = distNeigh[d00P] = distNeigh[d00M] = deltaX1;
+    distNeigh[dPP0] = distNeigh[dMP0] = distNeigh[dMM0] = distNeigh[dPM0] = vf::basics::constant::cSqrt2 * deltaX1;
+    distNeigh[dP0P] = distNeigh[d0PP] = distNeigh[dM0P] = distNeigh[d0MP] = vf::basics::constant::cSqrt2 * deltaX1;
+    distNeigh[dP0M] = distNeigh[d0PM] = distNeigh[dM0M] = distNeigh[d0MM] = vf::basics::constant::cSqrt2 * deltaX1;
+    distNeigh[dPPP] = distNeigh[dMPP] = distNeigh[dPMP] = distNeigh[dMMP] = vf::basics::constant::cSqrt3 * deltaX1;
+    distNeigh[dPPM] = distNeigh[dMPM] = distNeigh[dPMM] = distNeigh[dMMM] = vf::basics::constant::cSqrt3 * deltaX1;
 }
 //////////////////////////////////////////////////////////////////////////
 static inline void calcDistanceToNeighbors(std::vector<real> &distNeigh, const real &deltaX1, const real &deltaX2,
@@ -953,16 +953,16 @@ static inline void calcDistanceToNeighbors(std::vector<real> &distNeigh, const r
 {
     using namespace vf::lbm::dir;
 
-    // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1);
-    distNeigh[DIR_P00] = distNeigh[DIR_M00] = deltaX1;
-    distNeigh[DIR_0P0] = distNeigh[DIR_0M0] = deltaX2;
-    distNeigh[DIR_00P] = distNeigh[DIR_00M] = deltaX3;
-    distNeigh[DIR_PP0] = distNeigh[DIR_MP0] = distNeigh[DIR_MM0] = distNeigh[DIR_PM0] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2);
-    distNeigh[DIR_P0P] = distNeigh[DIR_0PP] = distNeigh[DIR_M0P] = distNeigh[DIR_0MP] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3);
-    distNeigh[DIR_P0M] = distNeigh[DIR_0PM] = distNeigh[DIR_M0M] = distNeigh[DIR_0MM] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3);
-    distNeigh[DIR_PPP] = distNeigh[DIR_MPP] = distNeigh[DIR_PMP] = distNeigh[DIR_MMP] =
+    // distNeigh.resize(FENDDIR+1, UbMath::cSqrt2*deltaX1);
+    distNeigh[dP00] = distNeigh[dM00] = deltaX1;
+    distNeigh[d0P0] = distNeigh[d0M0] = deltaX2;
+    distNeigh[d00P] = distNeigh[d00M] = deltaX3;
+    distNeigh[dPP0] = distNeigh[dMP0] = distNeigh[dMM0] = distNeigh[dPM0] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2);
+    distNeigh[dP0P] = distNeigh[d0PP] = distNeigh[dM0P] = distNeigh[d0MP] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3);
+    distNeigh[dP0M] = distNeigh[d0PM] = distNeigh[dM0M] = distNeigh[d0MM] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3);
+    distNeigh[dPPP] = distNeigh[dMPP] = distNeigh[dPMP] = distNeigh[dMMP] =
         sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3);
-    distNeigh[DIR_PPM] = distNeigh[DIR_MPM] = distNeigh[DIR_PMM] = distNeigh[DIR_MMM] =
+    distNeigh[dPPM] = distNeigh[dMPM] = distNeigh[dPMM] = distNeigh[dMMM] =
         sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3);
 }
 //////////////////////////////////////////////////////////////////////////
@@ -971,109 +971,109 @@ static inline void initRayVectors(real *const &rayX1, real *const &rayX2, real *
     using namespace vf::lbm::dir;
 
     int fdir;
-    real c1oS2 = vf::basics::constant::one_over_sqrt2;
-    real c1oS3 = vf::basics::constant::one_over_sqrt3;
-    fdir         = DIR_P00;
+    real c1oS2 = vf::basics::constant::c1oSqrt2;
+    real c1oS3 = vf::basics::constant::c1oSqrt3;
+    fdir         = dP00;
     rayX1[fdir]  = 1.0;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_M00;
+    fdir         = dM00;
     rayX1[fdir]  = -1.0;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_0P0;
+    fdir         = d0P0;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = 1.0;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_0M0;
+    fdir         = d0M0;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = -1.0;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_00P;
+    fdir         = d00P;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = 1.0;
-    fdir         = DIR_00M;
+    fdir         = d00M;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = -1.0;
-    fdir         = DIR_PP0;
+    fdir         = dPP0;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_MM0;
+    fdir         = dMM0;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_PM0;
+    fdir         = dPM0;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_MP0;
+    fdir         = dMP0;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = 0.0;
-    fdir         = DIR_P0P;
+    fdir         = dP0P;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_M0M;
+    fdir         = dM0M;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_P0M;
+    fdir         = dP0M;
     rayX1[fdir]  = c1oS2;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_M0P;
+    fdir         = dM0P;
     rayX1[fdir]  = -c1oS2;
     rayX2[fdir]  = 0.0;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_0PP;
+    fdir         = d0PP;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_0MM;
+    fdir         = d0MM;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_0PM;
+    fdir         = d0PM;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = c1oS2;
     rayX3[fdir]  = -c1oS2;
-    fdir         = DIR_0MP;
+    fdir         = d0MP;
     rayX1[fdir]  = 0.0;
     rayX2[fdir]  = -c1oS2;
     rayX3[fdir]  = c1oS2;
-    fdir         = DIR_PPP;
+    fdir         = dPPP;
     rayX1[fdir]  = c1oS3;
     rayX2[fdir]  = c1oS3;
     rayX3[fdir]  = c1oS3;
-    fdir         = DIR_MPP;
+    fdir         = dMPP;
     rayX1[fdir]  = -c1oS3;
     rayX2[fdir]  = c1oS3;
     rayX3[fdir]  = c1oS3;
-    fdir         = DIR_PMP;
+    fdir         = dPMP;
     rayX1[fdir]  = c1oS3;
     rayX2[fdir]  = -c1oS3;
     rayX3[fdir]  = c1oS3;
-    fdir         = DIR_MMP;
+    fdir         = dMMP;
     rayX1[fdir]  = -c1oS3;
     rayX2[fdir]  = -c1oS3;
     rayX3[fdir]  = c1oS3;
-    fdir         = DIR_PPM;
+    fdir         = dPPM;
     rayX1[fdir]  = c1oS3;
     rayX2[fdir]  = c1oS3;
     rayX3[fdir]  = -c1oS3;
-    fdir         = DIR_MPM;
+    fdir         = dMPM;
     rayX1[fdir]  = -c1oS3;
     rayX2[fdir]  = c1oS3;
     rayX3[fdir]  = -c1oS3;
-    fdir         = DIR_PMM;
+    fdir         = dPMM;
     rayX1[fdir]  = c1oS3;
     rayX2[fdir]  = -c1oS3;
     rayX3[fdir]  = -c1oS3;
-    fdir         = DIR_MMM;
+    fdir         = dMMM;
     rayX1[fdir]  = -c1oS3;
     rayX2[fdir]  = -c1oS3;
     rayX3[fdir]  = -c1oS3;
@@ -1084,9 +1084,9 @@ static inline real calcPress(const real *const f, real rho, real vx1, real vx2,
     using namespace vf::lbm::dir;
 
     real op = 1.0;
-    return ((f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] +
-             2. * (f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + f[DIR_MP0] + f[DIR_P0P] + f[DIR_M0M] + f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP]) +
-             3. * (f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM]) -
+    return ((f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] +
+             2. * (f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M] + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP]) +
+             3. * (f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM]) -
              (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) *
                 (1 - 0.5 * op) +
             op * 0.5 * (rho)) *
@@ -1097,35 +1097,35 @@ static inline real getShearRate(const real *const f, real collFactorF)
 {
     using namespace vf::lbm::dir;
 
-    real mfcbb = f[DIR_P00];
-    real mfbcb = f[DIR_0P0];
-    real mfbbc = f[DIR_00P];
-    real mfccb = f[DIR_PP0];
-    real mfacb = f[DIR_MP0];
-    real mfcbc = f[DIR_P0P];
-    real mfabc = f[DIR_M0P];
-    real mfbcc = f[DIR_0PP];
-    real mfbac = f[DIR_0MP];
-    real mfccc = f[DIR_PPP];
-    real mfacc = f[DIR_MPP];
-    real mfcac = f[DIR_PMP];
-    real mfaac = f[DIR_MMP];
-
-    real mfabb = f[DIR_M00];
-    real mfbab = f[DIR_0M0];
-    real mfbba = f[DIR_00M];
-    real mfaab = f[DIR_MM0];
-    real mfcab = f[DIR_PM0];
-    real mfaba = f[DIR_M0M];
-    real mfcba = f[DIR_P0M];
-    real mfbaa = f[DIR_0MM];
-    real mfbca = f[DIR_0PM];
-    real mfaaa = f[DIR_MMM];
-    real mfcaa = f[DIR_PMM];
-    real mfaca = f[DIR_MPM];
-    real mfcca = f[DIR_PPM];
-
-    real mfbbb = f[DIR_000];
+    real mfcbb = f[dP00];
+    real mfbcb = f[d0P0];
+    real mfbbc = f[d00P];
+    real mfccb = f[dPP0];
+    real mfacb = f[dMP0];
+    real mfcbc = f[dP0P];
+    real mfabc = f[dM0P];
+    real mfbcc = f[d0PP];
+    real mfbac = f[d0MP];
+    real mfccc = f[dPPP];
+    real mfacc = f[dMPP];
+    real mfcac = f[dPMP];
+    real mfaac = f[dMMP];
+
+    real mfabb = f[dM00];
+    real mfbab = f[d0M0];
+    real mfbba = f[d00M];
+    real mfaab = f[dMM0];
+    real mfcab = f[dPM0];
+    real mfaba = f[dM0M];
+    real mfcba = f[dP0M];
+    real mfbaa = f[d0MM];
+    real mfbca = f[d0PM];
+    real mfaaa = f[dMMM];
+    real mfcaa = f[dPMM];
+    real mfaca = f[dMPM];
+    real mfcca = f[dPPM];
+
+    real mfbbb = f[d000];
 
     real m0, m1, m2;
 
@@ -1427,35 +1427,35 @@ static inline std::array<real,6> getSecondMoments(const real *const f, real coll
     using namespace vf::lbm::dir;
     using namespace vf::basics::constant;
 
-    real mfcbb = f[DIR_P00];
-    real mfbcb = f[DIR_0P0];
-    real mfbbc = f[DIR_00P];
-    real mfccb = f[DIR_PP0];
-    real mfacb = f[DIR_MP0];
-    real mfcbc = f[DIR_P0P];
-    real mfabc = f[DIR_M0P];
-    real mfbcc = f[DIR_0PP];
-    real mfbac = f[DIR_0MP];
-    real mfccc = f[DIR_PPP];
-    real mfacc = f[DIR_MPP];
-    real mfcac = f[DIR_PMP];
-    real mfaac = f[DIR_MMP];
-
-    real mfabb = f[DIR_M00];
-    real mfbab = f[DIR_0M0];
-    real mfbba = f[DIR_00M];
-    real mfaab = f[DIR_MM0];
-    real mfcab = f[DIR_PM0];
-    real mfaba = f[DIR_M0M];
-    real mfcba = f[DIR_P0M];
-    real mfbaa = f[DIR_0MM];
-    real mfbca = f[DIR_0PM];
-    real mfaaa = f[DIR_MMM];
-    real mfcaa = f[DIR_PMM];
-    real mfaca = f[DIR_MPM];
-    real mfcca = f[DIR_PPM];
-
-    real mfbbb = f[DIR_000];
+    real mfcbb = f[dP00];
+    real mfbcb = f[d0P0];
+    real mfbbc = f[d00P];
+    real mfccb = f[dPP0];
+    real mfacb = f[dMP0];
+    real mfcbc = f[dP0P];
+    real mfabc = f[dM0P];
+    real mfbcc = f[d0PP];
+    real mfbac = f[d0MP];
+    real mfccc = f[dPPP];
+    real mfacc = f[dMPP];
+    real mfcac = f[dPMP];
+    real mfaac = f[dMMP];
+
+    real mfabb = f[dM00];
+    real mfbab = f[d0M0];
+    real mfbba = f[d00M];
+    real mfaab = f[dMM0];
+    real mfcab = f[dPM0];
+    real mfaba = f[dM0M];
+    real mfcba = f[dP0M];
+    real mfbaa = f[d0MM];
+    real mfbca = f[d0PM];
+    real mfaaa = f[dMMM];
+    real mfcaa = f[dPMM];
+    real mfaca = f[dMPM];
+    real mfcca = f[dPPM];
+
+    real mfbbb = f[d000];
 
     real m0, m1, m2;
 
@@ -1752,35 +1752,35 @@ static inline std::array<real, 6> getStressTensor(const real *const f, real coll
     using namespace vf::lbm::dir;
     using namespace vf::basics::constant;
 
-    real mfcbb = f[DIR_P00];
-    real mfbcb = f[DIR_0P0];
-    real mfbbc = f[DIR_00P];
-    real mfccb = f[DIR_PP0];
-    real mfacb = f[DIR_MP0];
-    real mfcbc = f[DIR_P0P];
-    real mfabc = f[DIR_M0P];
-    real mfbcc = f[DIR_0PP];
-    real mfbac = f[DIR_0MP];
-    real mfccc = f[DIR_PPP];
-    real mfacc = f[DIR_MPP];
-    real mfcac = f[DIR_PMP];
-    real mfaac = f[DIR_MMP];
-
-    real mfabb = f[DIR_M00];
-    real mfbab = f[DIR_0M0];
-    real mfbba = f[DIR_00M];
-    real mfaab = f[DIR_MM0];
-    real mfcab = f[DIR_PM0];
-    real mfaba = f[DIR_M0M];
-    real mfcba = f[DIR_P0M];
-    real mfbaa = f[DIR_0MM];
-    real mfbca = f[DIR_0PM];
-    real mfaaa = f[DIR_MMM];
-    real mfcaa = f[DIR_PMM];
-    real mfaca = f[DIR_MPM];
-    real mfcca = f[DIR_PPM];
-
-    real mfbbb = f[DIR_000];
+    real mfcbb = f[dP00];
+    real mfbcb = f[d0P0];
+    real mfbbc = f[d00P];
+    real mfccb = f[dPP0];
+    real mfacb = f[dMP0];
+    real mfcbc = f[dP0P];
+    real mfabc = f[dM0P];
+    real mfbcc = f[d0PP];
+    real mfbac = f[d0MP];
+    real mfccc = f[dPPP];
+    real mfacc = f[dMPP];
+    real mfcac = f[dPMP];
+    real mfaac = f[dMMP];
+
+    real mfabb = f[dM00];
+    real mfbab = f[d0M0];
+    real mfbba = f[d00M];
+    real mfaab = f[dMM0];
+    real mfcab = f[dPM0];
+    real mfaba = f[dM0M];
+    real mfcba = f[dP0M];
+    real mfbaa = f[d0MM];
+    real mfbca = f[d0PM];
+    real mfaaa = f[dMMM];
+    real mfcaa = f[dPMM];
+    real mfaca = f[dMPM];
+    real mfcca = f[dPPM];
+
+    real mfbbb = f[d000];
 
     real m0, m1, m2;
 
@@ -2087,40 +2087,40 @@ static void calcMultiphaseFeq(real *const &feq /*[27]*/, const real &rho, const
     using namespace vf::basics::constant;
     real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-    feq[DIR_000] = c8o27 * (p1 + rho * c1o3 * (-cu_sq));
-    feq[DIR_P00]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq));
-    feq[DIR_M00]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq));
-    feq[DIR_0P0]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq));
-    feq[DIR_0M0]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq));
-    feq[DIR_00P]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq));
-    feq[DIR_00M]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq));
-    feq[DIR_PP0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
-    feq[DIR_MM0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
-    feq[DIR_PM0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
-    feq[DIR_MP0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
-    feq[DIR_P0P]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
-    feq[DIR_M0M]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
-    feq[DIR_P0M]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
-    feq[DIR_M0P]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
-    feq[DIR_0PP]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
-    feq[DIR_0MM]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
-    feq[DIR_0PM]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
-    feq[DIR_0MP]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
-    feq[DIR_PPP] =
+    feq[d000] = c8o27 * (p1 + rho * c1o3 * (-cu_sq));
+    feq[dP00]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq));
+    feq[dM00]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq));
+    feq[d0P0]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq));
+    feq[d0M0]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq));
+    feq[d00P]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq));
+    feq[d00M]    = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq));
+    feq[dPP0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
+    feq[dMM0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
+    feq[dPM0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
+    feq[dMP0]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
+    feq[dP0P]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
+    feq[dM0M]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
+    feq[dP0M]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
+    feq[dM0P]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
+    feq[d0PP]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
+    feq[d0MM]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
+    feq[d0PM]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
+    feq[d0MP]   = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
+    feq[dPPP] =
         c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
-    feq[DIR_MMM] = c1o216 *
+    feq[dMMM] = c1o216 *
                (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
-    feq[DIR_PPM] =
+    feq[dPPM] =
         c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
-    feq[DIR_MMP] = c1o216 *
+    feq[dMMP] = c1o216 *
                (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
-    feq[DIR_PMP] =
+    feq[dPMP] =
         c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
-    feq[DIR_MPM] = c1o216 *
+    feq[dMPM] = c1o216 *
                (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
-    feq[DIR_PMM] =
+    feq[dPMM] =
         c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
-    feq[DIR_MPP] = c1o216 *
+    feq[dMPP] = c1o216 *
                (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
 }
 //////////////////////////////////////////////////////////////////////////
@@ -2132,33 +2132,33 @@ static void calcMultiphaseFeqVB(real *const &feq /*[27]*/, const real &p1, const
     using namespace vf::basics::constant;
     real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-    feq[DIR_000] = p1 + c8o27 * (-cu_sq);
-    feq[DIR_P00]    = c2o27 * ((3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq));
-    feq[DIR_M00]    = c2o27 * ((3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq));
-    feq[DIR_0P0]    = c2o27 * ((3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq));
-    feq[DIR_0M0]    = c2o27 * ((3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq));
-    feq[DIR_00P]    = c2o27 * ((3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq));
-    feq[DIR_00M]    = c2o27 * ((3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq));
-    feq[DIR_PP0]   = c1o54 * ((3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
-    feq[DIR_MM0]   = c1o54 * ((3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
-    feq[DIR_PM0]   = c1o54 * ((3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
-    feq[DIR_MP0]   = c1o54 * ((3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
-    feq[DIR_P0P]   = c1o54 * ((3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
-    feq[DIR_M0M]   = c1o54 * ((3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
-    feq[DIR_P0M]   = c1o54 * ((3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
-    feq[DIR_M0P]   = c1o54 * ((3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
-    feq[DIR_0PP]   = c1o54 * ((3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
-    feq[DIR_0MM]   = c1o54 * ((3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
-    feq[DIR_0PM]   = c1o54 * ((3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
-    feq[DIR_0MP]   = c1o54 * ((3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
-    feq[DIR_PPP]  = c1o216 * ((3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
-    feq[DIR_MMM]  = c1o216 * ((3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
-    feq[DIR_PPM]  = c1o216 * ((3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
-    feq[DIR_MMP]  = c1o216 * ((3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
-    feq[DIR_PMP]  = c1o216 * ((3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
-    feq[DIR_MPM]  = c1o216 * ((3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
-    feq[DIR_PMM]  = c1o216 * ((3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
-    feq[DIR_MPP]  = c1o216 * ((3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
+    feq[d000] = p1 + c8o27 * (-cu_sq);
+    feq[dP00]    = c2o27 * ((3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq));
+    feq[dM00]    = c2o27 * ((3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq));
+    feq[d0P0]    = c2o27 * ((3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq));
+    feq[d0M0]    = c2o27 * ((3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq));
+    feq[d00P]    = c2o27 * ((3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq));
+    feq[d00M]    = c2o27 * ((3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq));
+    feq[dPP0]   = c1o54 * ((3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
+    feq[dMM0]   = c1o54 * ((3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
+    feq[dPM0]   = c1o54 * ((3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
+    feq[dMP0]   = c1o54 * ((3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
+    feq[dP0P]   = c1o54 * ((3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
+    feq[dM0M]   = c1o54 * ((3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
+    feq[dP0M]   = c1o54 * ((3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
+    feq[dM0P]   = c1o54 * ((3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
+    feq[d0PP]   = c1o54 * ((3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
+    feq[d0MM]   = c1o54 * ((3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
+    feq[d0PM]   = c1o54 * ((3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
+    feq[d0MP]   = c1o54 * ((3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
+    feq[dPPP]  = c1o216 * ((3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
+    feq[dMMM]  = c1o216 * ((3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
+    feq[dPPM]  = c1o216 * ((3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
+    feq[dMMP]  = c1o216 * ((3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
+    feq[dPMP]  = c1o216 * ((3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
+    feq[dMPM]  = c1o216 * ((3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
+    feq[dPMM]  = c1o216 * ((3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
+    feq[dMPP]  = c1o216 * ((3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
 }
 //////////////////////////////////////////////////////////////////////////
 static void calcMultiphaseHeq(real *const &heq /*[27]*/, const real &phi, const real &vx1, const real &vx2,
@@ -2169,33 +2169,33 @@ static void calcMultiphaseHeq(real *const &heq /*[27]*/, const real &phi, const
 
     real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-    heq[DIR_000] = c8o27 * phi * (1.0 - cu_sq);
-    heq[DIR_P00]    = c2o27 * phi * (1.0 + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq);
-    heq[DIR_M00]    = c2o27 * phi * (1.0 + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq);
-    heq[DIR_0P0]    = c2o27 * phi * (1.0 + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq);
-    heq[DIR_0M0]    = c2o27 * phi * (1.0 + 3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq);
-    heq[DIR_00P]    = c2o27 * phi * (1.0 + 3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq);
-    heq[DIR_00M]    = c2o27 * phi * (1.0 + 3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq);
-    heq[DIR_PP0]   = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
-    heq[DIR_MM0]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
-    heq[DIR_PM0]   = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
-    heq[DIR_MP0]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
-    heq[DIR_P0P]   = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
-    heq[DIR_M0M]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
-    heq[DIR_P0M]   = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
-    heq[DIR_M0P]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
-    heq[DIR_0PP]   = c1o54 * phi * (1.0 + 3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
-    heq[DIR_0MM]   = c1o54 * phi * (1.0 + 3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
-    heq[DIR_0PM]   = c1o54 * phi * (1.0 + 3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
-    heq[DIR_0MP]   = c1o54 * phi * (1.0 + 3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
-    heq[DIR_PPP]  = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
-    heq[DIR_MMM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
-    heq[DIR_PPM] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
-    heq[DIR_MMP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
-    heq[DIR_PMP] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
-    heq[DIR_MPM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
-    heq[DIR_PMM] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
-    heq[DIR_MPP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
+    heq[d000] = c8o27 * phi * (1.0 - cu_sq);
+    heq[dP00]    = c2o27 * phi * (1.0 + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq);
+    heq[dM00]    = c2o27 * phi * (1.0 + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq);
+    heq[d0P0]    = c2o27 * phi * (1.0 + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq);
+    heq[d0M0]    = c2o27 * phi * (1.0 + 3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq);
+    heq[d00P]    = c2o27 * phi * (1.0 + 3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq);
+    heq[d00M]    = c2o27 * phi * (1.0 + 3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq);
+    heq[dPP0]   = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
+    heq[dMM0]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
+    heq[dPM0]   = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
+    heq[dMP0]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
+    heq[dP0P]   = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
+    heq[dM0M]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
+    heq[dP0M]   = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
+    heq[dM0P]   = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
+    heq[d0PP]   = c1o54 * phi * (1.0 + 3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
+    heq[d0MM]   = c1o54 * phi * (1.0 + 3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
+    heq[d0PM]   = c1o54 * phi * (1.0 + 3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
+    heq[d0MP]   = c1o54 * phi * (1.0 + 3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
+    heq[dPPP]  = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
+    heq[dMMM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
+    heq[dPPM] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
+    heq[dMMP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
+    heq[dPMP] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
+    heq[dMPM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
+    heq[dPMM] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
+    heq[dMPP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
 }
 
 } // namespace D3Q27System
diff --git a/src/cpu/VirtualFluidsCore/LBM/ICell.h b/src/cpu/core/LBM/ICell.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/ICell.h
rename to src/cpu/core/LBM/ICell.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/ILBMKernel.h b/src/cpu/core/LBM/ILBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/ILBMKernel.h
rename to src/cpu/core/LBM/ILBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.cpp
rename to src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.h
rename to src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
rename to src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
index 0ac578d90615b0ab0ba4989b6b70d680eb0e8c44..d052f4f71a4e03ad64c4bf26e9372e0b23423f00 100644
--- a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
+++ b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
@@ -71,37 +71,37 @@ void IncompressibleCumulantWithSpongeLayerLBMKernel::initRelaxFactor(int vdir, r
          {
             switch (direction)
             {
-            case DIR_P00:
+            case dP00:
                muX1 = (real)(x1 + ix1 * maxX1);
                if (muX1 >= (sizeX - sizeSP) / deltaT)
                   spongeFactor = (sizeX - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
                else spongeFactor = c1o1;
                break;
-            case DIR_M00:
+            case dM00:
                muX1 = (real)(x1 + ix1 * maxX1);
                if (muX1 <= sizeSP / deltaT)
                   spongeFactor = (sizeSP - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
                else spongeFactor = c1o1;
                break;
-            case DIR_0P0:
+            case d0P0:
                muX2 = (real)(x2 + ix2 * maxX2);
                if (muX2 >= (sizeX - sizeSP) / deltaT)
                   spongeFactor = (sizeX - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
                else spongeFactor = c1o1;
                break;
-            case DIR_0M0:
+            case d0M0:
                muX2 = (real)(x2 + ix2 * maxX2);
                if (muX2 <= sizeSP / deltaT)
                   spongeFactor = (sizeSP - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
                else spongeFactor = c1o1;
                break;
-            case DIR_00P:
+            case d00P:
                muX3 = (real)(x3 + ix3 * maxX3);
                if (muX3 >= (sizeX - sizeSP) / deltaT)
                   spongeFactor = (sizeX - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
                else spongeFactor = c1o1;
                break;
-            case DIR_00M:
+            case d00M:
                muX3 = (real)(x3 + ix3 * maxX3);
                if (muX3 <= sizeSP / deltaT)
                   spongeFactor = (sizeSP - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h
rename to src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp b/src/cpu/core/LBM/InitDensityLBMKernel.cpp
similarity index 86%
rename from src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp
rename to src/cpu/core/LBM/InitDensityLBMKernel.cpp
index 574014992fe58993aa5720d482b0931293be5d6d..734e2e33fd478e86151309d78c24b48fc9e0a401 100644
--- a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp
+++ b/src/cpu/core/LBM/InitDensityLBMKernel.cpp
@@ -897,45 +897,45 @@ void InitDensityLBMKernel::calculate(int  /*step*/)
                //////////////////////////////////////////////////////////////////////////
                //read distribution
                ////////////////////////////////////////////////////////////////////////////
-               f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3);
+               f[d000] = (*this->zeroDistributions)(x1, x2, x3);
 
-               f[DIR_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-               f[DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-               f[DIR_00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-               f[DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-               f[DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-               f[DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-               f[DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-               f[DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-               f[DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-               f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-               f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-               f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-               f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
+               f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
+               f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
+               f[d00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
+               f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
+               f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
+               f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
+               f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
+               f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
+               f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
+               f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
+               f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
+               f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
+               f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
 
-               f[DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-               f[DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-               f[DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-               f[DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-               f[DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-               f[DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-               f[DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-               f[DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-               f[DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-               f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-               f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-               f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-               f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
+               f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
+               f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
+               f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
+               f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
+               f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
+               f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
+               f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
+               f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
+               f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
+               f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+               f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
+               f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
+               f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
                //////////////////////////////////////////////////////////////////////////
 
-               drho = ((f[DIR_PPP]+f[DIR_MMM])+(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])+(f[DIR_MMP]+f[DIR_PPM]))
-                  +(((f[DIR_PP0]+f[DIR_MM0])+(f[DIR_PM0]+f[DIR_MP0]))+((f[DIR_P0P]+f[DIR_M0M])+(f[DIR_P0M]+f[DIR_M0P]))
-                     +((f[DIR_0PM]+f[DIR_0MP])+(f[DIR_0PP]+f[DIR_0MM])))+((f[DIR_P00]+f[DIR_M00])+(f[DIR_0P0]+f[DIR_0M0])
-                        +(f[DIR_00P]+f[DIR_00M]))+f[DIR_000];
+               drho = ((f[dPPP]+f[dMMM])+(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])+(f[dMMP]+f[dPPM]))
+                  +(((f[dPP0]+f[dMM0])+(f[dPM0]+f[dMP0]))+((f[dP0P]+f[dM0M])+(f[dP0M]+f[dM0P]))
+                     +((f[d0PM]+f[d0MP])+(f[d0PP]+f[d0MM])))+((f[dP00]+f[dM00])+(f[d0P0]+f[d0M0])
+                        +(f[d00P]+f[d00M]))+f[d000];
 
                //vx1 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[BSE]-f[TNW])+(f[BNE]-f[TSW])))+
                //   (((f[BE]-f[TW])+(f[TE]-f[BW]))+((f[SE]-f[NW])+(f[NE]-f[SW])))+
-               //   (f[DIR_P00]-f[W]));
+               //   (f[dP00]-f[W]));
 
                //vx2 = ((((f[TNE]-f[BSW])+(f[BNW]-f[TSE]))+((f[TNW]-f[BSE])+(f[BNE]-f[TSW])))+
                //   (((f[BN]-f[TS])+(f[TN]-f[BS]))+((f[NW]-f[SE])+(f[NE]-f[SW])))+
@@ -959,67 +959,67 @@ void InitDensityLBMKernel::calculate(int  /*step*/)
 
                real cu_sq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-               feq[DIR_000] = c8o27*(drho-cu_sq);
-               feq[DIR_P00] = c2o27*(drho+c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
-               feq[DIR_M00] = c2o27*(drho+c3o1*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq);
-               feq[DIR_0P0] = c2o27*(drho+c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
-               feq[DIR_0M0] = c2o27*(drho+c3o1*(-vx2)+c9o2*(-vx2)*(-vx2)-cu_sq);
-               feq[DIR_00P] = c2o27*(drho+c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
-               feq[DIR_00M] = c2o27*(drho+c3o1*(-vx3)+c9o2*(-vx3)*(-vx3)-cu_sq);
-               feq[DIR_PP0] = c1o54*(drho+c3o1*(vx1+vx2)+c9o2*(vx1+vx2)*(vx1+vx2)-cu_sq);
-               feq[DIR_MM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
-               feq[DIR_PM0] = c1o54*(drho+c3o1*(vx1-vx2)+c9o2*(vx1-vx2)*(vx1-vx2)-cu_sq);
-               feq[DIR_MP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
-               feq[DIR_P0P] = c1o54*(drho+c3o1*(vx1+vx3)+c9o2*(vx1+vx3)*(vx1+vx3)-cu_sq);
-               feq[DIR_M0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
-               feq[DIR_P0M] = c1o54*(drho+c3o1*(vx1-vx3)+c9o2*(vx1-vx3)*(vx1-vx3)-cu_sq);
-               feq[DIR_M0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
-               feq[DIR_0PP] = c1o54*(drho+c3o1*(vx2+vx3)+c9o2*(vx2+vx3)*(vx2+vx3)-cu_sq);
-               feq[DIR_0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
-               feq[DIR_0PM] = c1o54*(drho+c3o1*(vx2-vx3)+c9o2*(vx2-vx3)*(vx2-vx3)-cu_sq);
-               feq[DIR_0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
-               feq[DIR_PPP] = c1o216*(drho+c3o1*(vx1+vx2+vx3)+c9o2*(vx1+vx2+vx3)*(vx1+vx2+vx3)-cu_sq);
-               feq[DIR_MMM] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-               feq[DIR_PPM] = c1o216*(drho+c3o1*(vx1+vx2-vx3)+c9o2*(vx1+vx2-vx3)*(vx1+vx2-vx3)-cu_sq);
-               feq[DIR_MMP] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-               feq[DIR_PMP] = c1o216*(drho+c3o1*(vx1-vx2+vx3)+c9o2*(vx1-vx2+vx3)*(vx1-vx2+vx3)-cu_sq);
-               feq[DIR_MPM] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-               feq[DIR_PMM] = c1o216*(drho+c3o1*(vx1-vx2-vx3)+c9o2*(vx1-vx2-vx3)*(vx1-vx2-vx3)-cu_sq);
-               feq[DIR_MPP] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+               feq[d000] = c8o27*(drho-cu_sq);
+               feq[dP00] = c2o27*(drho+c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
+               feq[dM00] = c2o27*(drho+c3o1*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq);
+               feq[d0P0] = c2o27*(drho+c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
+               feq[d0M0] = c2o27*(drho+c3o1*(-vx2)+c9o2*(-vx2)*(-vx2)-cu_sq);
+               feq[d00P] = c2o27*(drho+c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
+               feq[d00M] = c2o27*(drho+c3o1*(-vx3)+c9o2*(-vx3)*(-vx3)-cu_sq);
+               feq[dPP0] = c1o54*(drho+c3o1*(vx1+vx2)+c9o2*(vx1+vx2)*(vx1+vx2)-cu_sq);
+               feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
+               feq[dPM0] = c1o54*(drho+c3o1*(vx1-vx2)+c9o2*(vx1-vx2)*(vx1-vx2)-cu_sq);
+               feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
+               feq[dP0P] = c1o54*(drho+c3o1*(vx1+vx3)+c9o2*(vx1+vx3)*(vx1+vx3)-cu_sq);
+               feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
+               feq[dP0M] = c1o54*(drho+c3o1*(vx1-vx3)+c9o2*(vx1-vx3)*(vx1-vx3)-cu_sq);
+               feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
+               feq[d0PP] = c1o54*(drho+c3o1*(vx2+vx3)+c9o2*(vx2+vx3)*(vx2+vx3)-cu_sq);
+               feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
+               feq[d0PM] = c1o54*(drho+c3o1*(vx2-vx3)+c9o2*(vx2-vx3)*(vx2-vx3)-cu_sq);
+               feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
+               feq[dPPP] = c1o216*(drho+c3o1*(vx1+vx2+vx3)+c9o2*(vx1+vx2+vx3)*(vx1+vx2+vx3)-cu_sq);
+               feq[dMMM] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+               feq[dPPM] = c1o216*(drho+c3o1*(vx1+vx2-vx3)+c9o2*(vx1+vx2-vx3)*(vx1+vx2-vx3)-cu_sq);
+               feq[dMMP] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+               feq[dPMP] = c1o216*(drho+c3o1*(vx1-vx2+vx3)+c9o2*(vx1-vx2+vx3)*(vx1-vx2+vx3)-cu_sq);
+               feq[dMPM] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+               feq[dPMM] = c1o216*(drho+c3o1*(vx1-vx2-vx3)+c9o2*(vx1-vx2-vx3)*(vx1-vx2-vx3)-cu_sq);
+               feq[dMPP] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 
                //Relaxation
-               f[DIR_000] += (feq[DIR_000]-f[DIR_000])*collFactor;
-               f[DIR_P00] += (feq[DIR_P00]-f[DIR_P00])*collFactor;
-               f[DIR_M00] += (feq[DIR_M00]-f[DIR_M00])*collFactor;
-               f[DIR_0P0] += (feq[DIR_0P0]-f[DIR_0P0])*collFactor;
-               f[DIR_0M0] += (feq[DIR_0M0]-f[DIR_0M0])*collFactor;
-               f[DIR_00P] += (feq[DIR_00P]-f[DIR_00P])*collFactor;
-               f[DIR_00M] += (feq[DIR_00M]-f[DIR_00M])*collFactor;
-               f[DIR_PP0] += (feq[DIR_PP0]-f[DIR_PP0])*collFactor;
-               f[DIR_MM0] += (feq[DIR_MM0]-f[DIR_MM0])*collFactor;
-               f[DIR_PM0] += (feq[DIR_PM0]-f[DIR_PM0])*collFactor;
-               f[DIR_MP0] += (feq[DIR_MP0]-f[DIR_MP0])*collFactor;
-               f[DIR_P0P] += (feq[DIR_P0P]-f[DIR_P0P])*collFactor;
-               f[DIR_M0M] += (feq[DIR_M0M]-f[DIR_M0M])*collFactor;
-               f[DIR_P0M] += (feq[DIR_P0M]-f[DIR_P0M])*collFactor;
-               f[DIR_M0P] += (feq[DIR_M0P]-f[DIR_M0P])*collFactor;
-               f[DIR_0PP] += (feq[DIR_0PP]-f[DIR_0PP])*collFactor;
-               f[DIR_0MM] += (feq[DIR_0MM]-f[DIR_0MM])*collFactor;
-               f[DIR_0PM] += (feq[DIR_0PM]-f[DIR_0PM])*collFactor;
-               f[DIR_0MP] += (feq[DIR_0MP]-f[DIR_0MP])*collFactor;
+               f[d000] += (feq[d000]-f[d000])*collFactor;
+               f[dP00] += (feq[dP00]-f[dP00])*collFactor;
+               f[dM00] += (feq[dM00]-f[dM00])*collFactor;
+               f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor;
+               f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor;
+               f[d00P] += (feq[d00P]-f[d00P])*collFactor;
+               f[d00M] += (feq[d00M]-f[d00M])*collFactor;
+               f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor;
+               f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor;
+               f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor;
+               f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor;
+               f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor;
+               f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor;
+               f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor;
+               f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor;
+               f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor;
+               f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor;
+               f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor;
+               f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor;
 
-               f[DIR_PPP] += (feq[DIR_PPP]-f[DIR_PPP])*collFactor;
-               f[DIR_MMM] += (feq[DIR_MMM]-f[DIR_MMM])*collFactor;
-               f[DIR_PPM] += (feq[DIR_PPM]-f[DIR_PPM])*collFactor;
-               f[DIR_MMP] += (feq[DIR_MMP]-f[DIR_MMP])*collFactor;
-               f[DIR_PMP] += (feq[DIR_PMP]-f[DIR_PMP])*collFactor;
-               f[DIR_MPM] += (feq[DIR_MPM]-f[DIR_MPM])*collFactor;
-               f[DIR_PMM] += (feq[DIR_PMM]-f[DIR_PMM])*collFactor;
-               f[DIR_MPP] += (feq[DIR_MPP]-f[DIR_MPP])*collFactor;
+               f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor;
+               f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor;
+               f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor;
+               f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor;
+               f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor;
+               f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor;
+               f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor;
+               f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor;
 
                //////////////////////////////////////////////////////////////////////////
 #ifdef  PROOF_CORRECTNESS
-               real rho_post = f[REST]+f[DIR_P00]+f[W]+f[N]+f[S]+f[T]+f[B]
+               real rho_post = f[REST]+f[dP00]+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];
@@ -1036,35 +1036,35 @@ void InitDensityLBMKernel::calculate(int  /*step*/)
                //////////////////////////////////////////////////////////////////////////
                //write distribution
                //////////////////////////////////////////////////////////////////////////
-               (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[INV_P00];
-               (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[INV_0P0];
-               (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[INV_00P];
-               (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[INV_PP0];
-               (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[INV_MP0];
-               (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[INV_P0P];
-               (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[INV_M0P];
-               (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[INV_0PP];
-               (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[INV_0MP];
-               (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[INV_PPP];
-               (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[INV_MPP];
-               (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[INV_PMP];
-               (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[INV_MMP];
+               (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[iP00];
+               (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[i0P0];
+               (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[i00P];
+               (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[iPP0];
+               (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[iMP0];
+               (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[iP0P];
+               (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[iM0P];
+               (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[i0PP];
+               (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[i0MP];
+               (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[iPPP];
+               (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[iMPP];
+               (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[iPMP];
+               (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP];
 
-               (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[INV_M00];
-               (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[INV_0M0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[INV_00M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[INV_MM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[INV_PM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[INV_M0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[INV_P0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[INV_0MM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[INV_0PM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[INV_MMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[INV_PMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[INV_MPM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[INV_PPM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[iM00];
+               (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[i0M0];
+               (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[i00M];
+               (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[iMM0];
+               (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[iPM0];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[iM0M];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[iP0M];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[i0MM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[i0PM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[iPMM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[iMPM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[iPPM];
 
-               (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000];
+               (*this->zeroDistributions)(x1, x2, x3) = f[d000];
                //////////////////////////////////////////////////////////////////////////
 
 
diff --git a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.h b/src/cpu/core/LBM/InitDensityLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.h
rename to src/cpu/core/LBM/InitDensityLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
similarity index 88%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
index a5450b3b4b467143e0286ef7f7757a75c2e8457f..de2e4a01fe7c272900d40a8daa58ba4d6c0fb8b4 100644
--- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
+++ b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
@@ -69,11 +69,11 @@ void CompressibleOffsetInterpolator::calcMoments(const real* const f, real omega
    
    press = drho; //interpolate rho!
 
-   kxy   = -c3o1*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -c3o1*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))/(c1o1 + drho)-(vx2*vx3));
-   kxz   = -c3o1*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))/(c1o1 + drho)-(vx1*vx3));
-   kxxMyy = -c3o1/c2o1*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2));
-   kxxMzz = -c3o1/c2o1*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3));
+   kxy   = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13
+   kyz   = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))/(c1o1 + drho)-(vx2*vx3));
+   kxz   = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))/(c1o1 + drho)-(vx1*vx3));
+   kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2));
+   kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3));
 }
 //////////////////////////////////////////////////////////////////////////
 void CompressibleOffsetInterpolator::calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new)
@@ -475,33 +475,33 @@ void CompressibleOffsetInterpolator::calcInterpolatedNodeCF(real* f, real  /*ome
    real feq[ENDF+1];
    D3Q27System::calcCompFeq(feq,rho,vx1,vx2,vx3);
 
-   f[DIR_P00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[DIR_P00];
-   f[DIR_M00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[DIR_M00];
-   f[DIR_0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[DIR_0P0];
-   f[DIR_0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[DIR_0M0];
-   f[DIR_00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[DIR_00P];
-   f[DIR_00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[DIR_00M];
-   f[DIR_PP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[DIR_PP0];
-   f[DIR_MM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[DIR_MM0];
-   f[DIR_PM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[DIR_PM0];
-   f[DIR_MP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[DIR_MP0];
-   f[DIR_P0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[DIR_P0P];
-   f[DIR_M0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[DIR_M0M];
-   f[DIR_P0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[DIR_P0M];
-   f[DIR_M0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[DIR_M0P];
-   f[DIR_0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[DIR_0PP];
-   f[DIR_0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[DIR_0MM];
-   f[DIR_0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[DIR_0PM];
-   f[DIR_0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[DIR_0MP];
-   f[DIR_PPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[DIR_PPP];
-   f[DIR_MMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[DIR_MMP];
-   f[DIR_PMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[DIR_PMP];
-   f[DIR_MPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[DIR_MPP];
-   f[DIR_PPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[DIR_PPM];
-   f[DIR_MMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[DIR_MMM];
-   f[DIR_PMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[DIR_PMM];
-   f[DIR_MPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[DIR_MPM];
-   f[DIR_000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[DIR_000];
+   f[dP00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dP00];
+   f[dM00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dM00];
+   f[d0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0P0];
+   f[d0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0M0];
+   f[d00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00P];
+   f[d00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00M];
+   f[dPP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dPP0];
+   f[dMM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dMM0];
+   f[dPM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dPM0];
+   f[dMP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dMP0];
+   f[dP0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dP0P];
+   f[dM0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dM0M];
+   f[dP0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dP0M];
+   f[dM0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dM0P];
+   f[d0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0PP];
+   f[d0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0MM];
+   f[d0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0PM];
+   f[d0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0MP];
+   f[dPPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dPPP];
+   f[dMMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dMMP];
+   f[dPMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dPMP];
+   f[dMPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dMPP];
+   f[dPPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dPPM];
+   f[dMMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dMMM];
+   f[dPMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dPMM];
+   f[dMPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dMPM];
+   f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[d000];
 }
 //////////////////////////////////////////////////////////////////////////
 //Position SWB -0.25, -0.25, -0.25
@@ -670,33 +670,33 @@ void CompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omega)
    f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o));
    f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o));
 
-   f[DIR_P00]    = f_E    + feq[DIR_P00];
-   f[DIR_M00]    = f_E    + feq[DIR_M00];
-   f[DIR_0P0]    = f_N    + feq[DIR_0P0];
-   f[DIR_0M0]    = f_N    + feq[DIR_0M0];
-   f[DIR_00P]    = f_T    + feq[DIR_00P];
-   f[DIR_00M]    = f_T    + feq[DIR_00M];
-   f[DIR_PP0]   = f_NE   + feq[DIR_PP0];
-   f[DIR_MM0]   = f_NE   + feq[DIR_MM0];
-   f[DIR_PM0]   = f_SE   + feq[DIR_PM0];
-   f[DIR_MP0]   = f_SE   + feq[DIR_MP0];
-   f[DIR_P0P]   = f_TE   + feq[DIR_P0P];
-   f[DIR_M0M]   = f_TE   + feq[DIR_M0M];
-   f[DIR_P0M]   = f_BE   + feq[DIR_P0M];
-   f[DIR_M0P]   = f_BE   + feq[DIR_M0P];
-   f[DIR_0PP]   = f_TN   + feq[DIR_0PP];
-   f[DIR_0MM]   = f_TN   + feq[DIR_0MM];
-   f[DIR_0PM]   = f_BN   + feq[DIR_0PM];
-   f[DIR_0MP]   = f_BN   + feq[DIR_0MP];
-   f[DIR_PPP]  = f_TNE  + feq[DIR_PPP];
-   f[DIR_MPP]  = f_TNW  + feq[DIR_MPP];
-   f[DIR_PMP]  = f_TSE  + feq[DIR_PMP];
-   f[DIR_MMP]  = f_TSW  + feq[DIR_MMP];
-   f[DIR_PPM]  = f_TSW  + feq[DIR_PPM];
-   f[DIR_MPM]  = f_TSE  + feq[DIR_MPM];
-   f[DIR_PMM]  = f_TNW  + feq[DIR_PMM];
-   f[DIR_MMM]  = f_TNE  + feq[DIR_MMM];
-   f[DIR_000] = f_ZERO + feq[DIR_000];
+   f[dP00]    = f_E    + feq[dP00];
+   f[dM00]    = f_E    + feq[dM00];
+   f[d0P0]    = f_N    + feq[d0P0];
+   f[d0M0]    = f_N    + feq[d0M0];
+   f[d00P]    = f_T    + feq[d00P];
+   f[d00M]    = f_T    + feq[d00M];
+   f[dPP0]   = f_NE   + feq[dPP0];
+   f[dMM0]   = f_NE   + feq[dMM0];
+   f[dPM0]   = f_SE   + feq[dPM0];
+   f[dMP0]   = f_SE   + feq[dMP0];
+   f[dP0P]   = f_TE   + feq[dP0P];
+   f[dM0M]   = f_TE   + feq[dM0M];
+   f[dP0M]   = f_BE   + feq[dP0M];
+   f[dM0P]   = f_BE   + feq[dM0P];
+   f[d0PP]   = f_TN   + feq[d0PP];
+   f[d0MM]   = f_TN   + feq[d0MM];
+   f[d0PM]   = f_BN   + feq[d0PM];
+   f[d0MP]   = f_BN   + feq[d0MP];
+   f[dPPP]  = f_TNE  + feq[dPPP];
+   f[dMPP]  = f_TNW  + feq[dMPP];
+   f[dPMP]  = f_TSE  + feq[dPMP];
+   f[dMMP]  = f_TSW  + feq[dMMP];
+   f[dPPM]  = f_TSW  + feq[dPPM];
+   f[dMPM]  = f_TSE  + feq[dMPM];
+   f[dPMM]  = f_TNW  + feq[dPMM];
+   f[dMMM]  = f_TNE  + feq[dMMM];
+   f[d000] = f_ZERO + feq[d000];
 }
 //////////////////////////////////////////////////////////////////////////
 void CompressibleOffsetInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.h
rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp
rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h
rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
similarity index 96%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
index 3b5d7386ae4e615a6f89d6ed07eb78d02b295799..c7fba8407e71e423c5e5231cc4ae220b438fefc9 100644
--- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
+++ b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
@@ -87,11 +87,11 @@ void CompressibleOffsetSquarePressureInterpolator::calcMoments(const real* const
    
    press = drho; //interpolate rho!
 
-   kxy   = -c3o1*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -c3o1*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))/(c1o1 + drho)-(vx2*vx3));
-   kxz   = -c3o1*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))/(c1o1 + drho)-(vx1*vx3));
-   kxxMyy = -c3o1/c2o1*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2));
-   kxxMzz = -c3o1/c2o1*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3));
+   kxy   = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13
+   kyz   = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))/(c1o1 + drho)-(vx2*vx3));
+   kxz   = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))/(c1o1 + drho)-(vx1*vx3));
+   kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2));
+   kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3));
 }
 //////////////////////////////////////////////////////////////////////////
 void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new)
@@ -783,33 +783,33 @@ void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedNodeCF(real*
    mfccc = m2;
    ////////////////////////////////////////////////////////////////////////////////////
 
-   f[DIR_P00]    = mfcbb;
-   f[DIR_M00]    = mfabb;
-   f[DIR_0P0]    = mfbcb;
-   f[DIR_0M0]    = mfbab;
-   f[DIR_00P]    = mfbbc;
-   f[DIR_00M]    = mfbba;
-   f[DIR_PP0]   = mfccb;
-   f[DIR_MM0]   = mfaab;
-   f[DIR_PM0]   = mfcab;
-   f[DIR_MP0]   = mfacb;
-   f[DIR_P0P]   = mfcbc;
-   f[DIR_M0M]   = mfaba;
-   f[DIR_P0M]   = mfcba;
-   f[DIR_M0P]   = mfabc;
-   f[DIR_0PP]   = mfbcc;
-   f[DIR_0MM]   = mfbaa;
-   f[DIR_0PM]   = mfbca;
-   f[DIR_0MP]   = mfbac;
-   f[DIR_000] = mfbbb;
-   f[DIR_PPP]  = mfccc;
-   f[DIR_PMP]  = mfcac;
-   f[DIR_PPM]  = mfcca;
-   f[DIR_PMM]  = mfcaa;
-   f[DIR_MPP]  = mfacc;
-   f[DIR_MMP]  = mfaac;
-   f[DIR_MPM]  = mfaca;
-   f[DIR_MMM]  = mfaaa;
+   f[dP00]    = mfcbb;
+   f[dM00]    = mfabb;
+   f[d0P0]    = mfbcb;
+   f[d0M0]    = mfbab;
+   f[d00P]    = mfbbc;
+   f[d00M]    = mfbba;
+   f[dPP0]   = mfccb;
+   f[dMM0]   = mfaab;
+   f[dPM0]   = mfcab;
+   f[dMP0]   = mfacb;
+   f[dP0P]   = mfcbc;
+   f[dM0M]   = mfaba;
+   f[dP0M]   = mfcba;
+   f[dM0P]   = mfabc;
+   f[d0PP]   = mfbcc;
+   f[d0MM]   = mfbaa;
+   f[d0PM]   = mfbca;
+   f[d0MP]   = mfbac;
+   f[d000] = mfbbb;
+   f[dPPP]  = mfccc;
+   f[dPMP]  = mfcac;
+   f[dPPM]  = mfcca;
+   f[dPMM]  = mfcaa;
+   f[dMPP]  = mfacc;
+   f[dMMP]  = mfaac;
+   f[dMPM]  = mfaca;
+   f[dMMM]  = mfaaa;
 }
 //////////////////////////////////////////////////////////////////////////
 //Position SWB -0.25, -0.25, -0.25
@@ -1237,33 +1237,33 @@ void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedNodeFC(real*
    mfccc = m2;
    ////////////////////////////////////////////////////////////////////////////////////
 
-   f[DIR_P00]    = mfcbb;
-   f[DIR_M00]    = mfabb;
-   f[DIR_0P0]    = mfbcb;
-   f[DIR_0M0]    = mfbab;
-   f[DIR_00P]    = mfbbc;
-   f[DIR_00M]    = mfbba;
-   f[DIR_PP0]   = mfccb;
-   f[DIR_MM0]   = mfaab;
-   f[DIR_PM0]   = mfcab;
-   f[DIR_MP0]   = mfacb;
-   f[DIR_P0P]   = mfcbc;
-   f[DIR_M0M]   = mfaba;
-   f[DIR_P0M]   = mfcba;
-   f[DIR_M0P]   = mfabc;
-   f[DIR_0PP]   = mfbcc;
-   f[DIR_0MM]   = mfbaa;
-   f[DIR_0PM]   = mfbca;
-   f[DIR_0MP]   = mfbac;
-   f[DIR_000] = mfbbb;
-   f[DIR_PPP]  = mfccc;
-   f[DIR_PMP]  = mfcac;
-   f[DIR_PPM]  = mfcca;
-   f[DIR_PMM]  = mfcaa;
-   f[DIR_MPP]  = mfacc;
-   f[DIR_MMP]  = mfaac;
-   f[DIR_MPM]  = mfaca;
-   f[DIR_MMM]  = mfaaa;
+   f[dP00]    = mfcbb;
+   f[dM00]    = mfabb;
+   f[d0P0]    = mfbcb;
+   f[d0M0]    = mfbab;
+   f[d00P]    = mfbbc;
+   f[d00M]    = mfbba;
+   f[dPP0]   = mfccb;
+   f[dMM0]   = mfaab;
+   f[dPM0]   = mfcab;
+   f[dMP0]   = mfacb;
+   f[dP0P]   = mfcbc;
+   f[dM0M]   = mfaba;
+   f[dP0M]   = mfcba;
+   f[dM0P]   = mfabc;
+   f[d0PP]   = mfbcc;
+   f[d0MM]   = mfbaa;
+   f[d0PM]   = mfbca;
+   f[d0MP]   = mfbac;
+   f[d000] = mfbbb;
+   f[dPPP]  = mfccc;
+   f[dPMP]  = mfcac;
+   f[dPPM]  = mfcca;
+   f[dPMM]  = mfcaa;
+   f[dMPP]  = mfacc;
+   f[dMMP]  = mfaac;
+   f[dMPM]  = mfaca;
+   f[dMMM]  = mfaaa;
 }
 //////////////////////////////////////////////////////////////////////////
 void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h
rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
similarity index 88%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
rename to src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
index a00c266191353e2124d1999b370d5ec6e51ec697..d8f7efac4cfab144e163bb0263993dc8ba997d17 100644
--- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
+++ b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
@@ -65,7 +65,7 @@ void IncompressibleOffsetInterpolator::calcMoments(const real* const f, real ome
    using namespace vf::lbm::dir;
    using namespace vf::basics::constant;
 
-   //UBLOG(logINFO,"D3Q27System::DIR_M0M  = " << D3Q27System::DIR_M0M);
+   //UBLOG(logINFO,"D3Q27System::dM0M  = " << D3Q27System::dM0M);
    //UBLOG(logINFO,"BW  = " << BW);;
 
    real rho = c0o1;
@@ -86,14 +86,14 @@ void IncompressibleOffsetInterpolator::calcMoments(const real* const f, real ome
    //press = D3Q27System::calcPress(f,rho,vx1,vx2,vx3);
    press = rho; //interpolate rho!
 
-   kxy   = -c3o1*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -c3o1*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))-(vx2*vx3));
-   kxz   = -c3o1*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))-(vx1*vx3));
-   kxxMyy = -c3o1/c2o1*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))-(vx1*vx1-vx2*vx2));
-   kxxMzz = -c3o1/c2o1*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))-(vx1*vx1-vx3*vx3));
-   //kxxMzz = -c3o1/c2o1*omega*(((((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[DIR_P00])-(f[B]+f[T])))-(vx1*vx1-vx3*vx3));
+   kxy   = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))-(vx1*vx2));// might not be optimal MG 25.2.13
+   kyz   = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))-(vx2*vx3));
+   kxz   = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))-(vx1*vx3));
+   kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))-(vx1*vx1-vx2*vx2));
+   kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))-(vx1*vx1-vx3*vx3));
+   //kxxMzz = -c3o1/c2o1*omega*(((((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[dP00])-(f[B]+f[T])))-(vx1*vx1-vx3*vx3));
 
-   //UBLOG(logINFO, "t1 = "<<(((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[DIR_P00])-(f[B]+f[T])));
+   //UBLOG(logINFO, "t1 = "<<(((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[dP00])-(f[B]+f[T])));
    //UBLOG(logINFO, "kxxMzz = "<<kxxMzz);
 
    //UBLOG(logINFO,"f[BW]  = " << f[BW] << " BW  = " << BW);
@@ -551,33 +551,33 @@ void IncompressibleOffsetInterpolator::calcInterpolatedNode(real* f, real  /*ome
    real feq[ENDF+1];
    D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3);
 
-   f[DIR_P00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[DIR_P00];
-   f[DIR_M00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[DIR_M00];
-   f[DIR_0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[DIR_0P0];
-   f[DIR_0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[DIR_0M0];
-   f[DIR_00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[DIR_00P];
-   f[DIR_00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[DIR_00M];
-   f[DIR_PP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[DIR_PP0];
-   f[DIR_MM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[DIR_MM0];
-   f[DIR_PM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[DIR_PM0];
-   f[DIR_MP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[DIR_MP0];
-   f[DIR_P0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[DIR_P0P];
-   f[DIR_M0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[DIR_M0M];
-   f[DIR_P0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[DIR_P0M];
-   f[DIR_M0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[DIR_M0P];
-   f[DIR_0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[DIR_0PP];
-   f[DIR_0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[DIR_0MM];
-   f[DIR_0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[DIR_0PM];
-   f[DIR_0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[DIR_0MP];
-   f[DIR_PPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[DIR_PPP];
-   f[DIR_MMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[DIR_MMP];
-   f[DIR_PMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[DIR_PMP];
-   f[DIR_MPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[DIR_MPP];
-   f[DIR_PPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[DIR_PPM];
-   f[DIR_MMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[DIR_MMM];
-   f[DIR_PMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[DIR_PMM];
-   f[DIR_MPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[DIR_MPM];
-   f[DIR_000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[DIR_000];
+   f[dP00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dP00];
+   f[dM00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dM00];
+   f[d0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0P0];
+   f[d0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0M0];
+   f[d00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00P];
+   f[d00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00M];
+   f[dPP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dPP0];
+   f[dMM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dMM0];
+   f[dPM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dPM0];
+   f[dMP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dMP0];
+   f[dP0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dP0P];
+   f[dM0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dM0M];
+   f[dP0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dP0M];
+   f[dM0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dM0P];
+   f[d0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0PP];
+   f[d0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0MM];
+   f[d0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0PM];
+   f[d0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0MP];
+   f[dPPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dPPP];
+   f[dMMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dMMP];
+   f[dPMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dPMP];
+   f[dMPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dMPP];
+   f[dPPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dPPM];
+   f[dMMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dMMM];
+   f[dPMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dPMM];
+   f[dMPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dMPM];
+   f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[d000];
 }
 //////////////////////////////////////////////////////////////////////////
 //Position SWB -0.25, -0.25, -0.25
@@ -763,33 +763,33 @@ void IncompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omeg
    f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o));
    f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o));
 
-   f[DIR_P00]    = f_E    + feq[DIR_P00];
-   f[DIR_M00]    = f_E    + feq[DIR_M00];
-   f[DIR_0P0]    = f_N    + feq[DIR_0P0];
-   f[DIR_0M0]    = f_N    + feq[DIR_0M0];
-   f[DIR_00P]    = f_T    + feq[DIR_00P];
-   f[DIR_00M]    = f_T    + feq[DIR_00M];
-   f[DIR_PP0]   = f_NE   + feq[DIR_PP0];
-   f[DIR_MM0]   = f_NE   + feq[DIR_MM0];
-   f[DIR_PM0]   = f_SE   + feq[DIR_PM0];
-   f[DIR_MP0]   = f_SE   + feq[DIR_MP0];
-   f[DIR_P0P]   = f_TE   + feq[DIR_P0P];
-   f[DIR_M0M]   = f_TE   + feq[DIR_M0M];
-   f[DIR_P0M]   = f_BE   + feq[DIR_P0M];
-   f[DIR_M0P]   = f_BE   + feq[DIR_M0P];
-   f[DIR_0PP]   = f_TN   + feq[DIR_0PP];
-   f[DIR_0MM]   = f_TN   + feq[DIR_0MM];
-   f[DIR_0PM]   = f_BN   + feq[DIR_0PM];
-   f[DIR_0MP]   = f_BN   + feq[DIR_0MP];
-   f[DIR_PPP]  = f_TNE  + feq[DIR_PPP];
-   f[DIR_MPP]  = f_TNW  + feq[DIR_MPP];
-   f[DIR_PMP]  = f_TSE  + feq[DIR_PMP];
-   f[DIR_MMP]  = f_TSW  + feq[DIR_MMP];
-   f[DIR_PPM]  = f_TSW  + feq[DIR_PPM];
-   f[DIR_MPM]  = f_TSE  + feq[DIR_MPM];
-   f[DIR_PMM]  = f_TNW  + feq[DIR_PMM];
-   f[DIR_MMM]  = f_TNE  + feq[DIR_MMM];
-   f[DIR_000] = f_ZERO + feq[DIR_000];
+   f[dP00]    = f_E    + feq[dP00];
+   f[dM00]    = f_E    + feq[dM00];
+   f[d0P0]    = f_N    + feq[d0P0];
+   f[d0M0]    = f_N    + feq[d0M0];
+   f[d00P]    = f_T    + feq[d00P];
+   f[d00M]    = f_T    + feq[d00M];
+   f[dPP0]   = f_NE   + feq[dPP0];
+   f[dMM0]   = f_NE   + feq[dMM0];
+   f[dPM0]   = f_SE   + feq[dPM0];
+   f[dMP0]   = f_SE   + feq[dMP0];
+   f[dP0P]   = f_TE   + feq[dP0P];
+   f[dM0M]   = f_TE   + feq[dM0M];
+   f[dP0M]   = f_BE   + feq[dP0M];
+   f[dM0P]   = f_BE   + feq[dM0P];
+   f[d0PP]   = f_TN   + feq[d0PP];
+   f[d0MM]   = f_TN   + feq[d0MM];
+   f[d0PM]   = f_BN   + feq[d0PM];
+   f[d0MP]   = f_BN   + feq[d0MP];
+   f[dPPP]  = f_TNE  + feq[dPPP];
+   f[dMPP]  = f_TNW  + feq[dMPP];
+   f[dPMP]  = f_TSE  + feq[dPMP];
+   f[dMMP]  = f_TSW  + feq[dMMP];
+   f[dPPM]  = f_TSW  + feq[dPPM];
+   f[dMPM]  = f_TSE  + feq[dMPM];
+   f[dPMM]  = f_TNW  + feq[dPMM];
+   f[dMMM]  = f_TNE  + feq[dMMM];
+   f[d000] = f_ZERO + feq[d000];
 }
 //////////////////////////////////////////////////////////////////////////
 void IncompressibleOffsetInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.h b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.h
rename to src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.cpp b/src/cpu/core/LBM/Interpolation/Interpolator.cpp
similarity index 86%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.cpp
rename to src/cpu/core/LBM/Interpolation/Interpolator.cpp
index f28b1efed4836ca71b09a390078dd2aaf5463710..8bbd38b51b8351a93c4a544c50abc6194aed6648 100644
--- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.cpp
+++ b/src/cpu/core/LBM/Interpolation/Interpolator.cpp
@@ -18,49 +18,49 @@ struct Range
 //////////////////////////////////////////////////////////////////////////
 void Interpolator::readICell(SPtr<DistributionArray3D> f, D3Q27ICell &icell, int x1, int x2, int x3)
 {
-    f->getDistribution(icell.BSW, x1, x2, x3);
-    f->getDistribution(icell.BSE, x1 + 1, x2, x3);
-    f->getDistribution(icell.BNW, x1, x2 + 1, x3);
-    f->getDistribution(icell.BNE, x1 + 1, x2 + 1, x3);
-    f->getDistribution(icell.TSW, x1, x2, x3 + 1);
-    f->getDistribution(icell.TSE, x1 + 1, x2, x3 + 1);
-    f->getDistribution(icell.TNW, x1, x2 + 1, x3 + 1);
-    f->getDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1);
+    f->getPreCollisionDistribution(icell.BSW, x1, x2, x3);
+    f->getPreCollisionDistribution(icell.BSE, x1 + 1, x2, x3);
+    f->getPreCollisionDistribution(icell.BNW, x1, x2 + 1, x3);
+    f->getPreCollisionDistribution(icell.BNE, x1 + 1, x2 + 1, x3);
+    f->getPreCollisionDistribution(icell.TSW, x1, x2, x3 + 1);
+    f->getPreCollisionDistribution(icell.TSE, x1 + 1, x2, x3 + 1);
+    f->getPreCollisionDistribution(icell.TNW, x1, x2 + 1, x3 + 1);
+    f->getPreCollisionDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1);
 }
 //////////////////////////////////////////////////////////////////////////
 void Interpolator::writeICell(SPtr<DistributionArray3D> f, const D3Q27ICell &icell, int x1, int x2, int x3)
 {
-    f->setDistribution(icell.BSW, x1, x2, x3);
-    f->setDistribution(icell.BSE, x1 + 1, x2, x3);
-    f->setDistribution(icell.BNW, x1, x2 + 1, x3);
-    f->setDistribution(icell.BNE, x1 + 1, x2 + 1, x3);
-    f->setDistribution(icell.TSW, x1, x2, x3 + 1);
-    f->setDistribution(icell.TSE, x1 + 1, x2, x3 + 1);
-    f->setDistribution(icell.TNW, x1, x2 + 1, x3 + 1);
-    f->setDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1);
+    f->setPostCollisionDistribution(icell.BSW, x1, x2, x3);
+    f->setPostCollisionDistribution(icell.BSE, x1 + 1, x2, x3);
+    f->setPostCollisionDistribution(icell.BNW, x1, x2 + 1, x3);
+    f->setPostCollisionDistribution(icell.BNE, x1 + 1, x2 + 1, x3);
+    f->setPostCollisionDistribution(icell.TSW, x1, x2, x3 + 1);
+    f->setPostCollisionDistribution(icell.TSE, x1 + 1, x2, x3 + 1);
+    f->setPostCollisionDistribution(icell.TNW, x1, x2 + 1, x3 + 1);
+    f->setPostCollisionDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1);
 }
 //////////////////////////////////////////////////////////////////////////
 void Interpolator::writeICellInv(SPtr<DistributionArray3D> f, const D3Q27ICell &icell, int x1, int x2, int x3)
 {
-    f->setDistributionInv(icell.BSW, x1, x2, x3);
-    f->setDistributionInv(icell.BSE, x1 + 1, x2, x3);
-    f->setDistributionInv(icell.BNW, x1, x2 + 1, x3);
-    f->setDistributionInv(icell.BNE, x1 + 1, x2 + 1, x3);
-    f->setDistributionInv(icell.TSW, x1, x2, x3 + 1);
-    f->setDistributionInv(icell.TSE, x1 + 1, x2, x3 + 1);
-    f->setDistributionInv(icell.TNW, x1, x2 + 1, x3 + 1);
-    f->setDistributionInv(icell.TNE, x1 + 1, x2 + 1, x3 + 1);
+    f->setPreCollisionDistribution(icell.BSW, x1, x2, x3);
+    f->setPreCollisionDistribution(icell.BSE, x1 + 1, x2, x3);
+    f->setPreCollisionDistribution(icell.BNW, x1, x2 + 1, x3);
+    f->setPreCollisionDistribution(icell.BNE, x1 + 1, x2 + 1, x3);
+    f->setPreCollisionDistribution(icell.TSW, x1, x2, x3 + 1);
+    f->setPreCollisionDistribution(icell.TSE, x1 + 1, x2, x3 + 1);
+    f->setPreCollisionDistribution(icell.TNW, x1, x2 + 1, x3 + 1);
+    f->setPreCollisionDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1);
 }
 //////////////////////////////////////////////////////////////////////////
 void Interpolator::writeINode(SPtr<DistributionArray3D> f, const real *const inode, int x1, int x2, int x3)
 {
-    f->setDistribution(inode, x1, x2, x3);
+    f->setPostCollisionDistribution(inode, x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
 void Interpolator::writeINodeInv(SPtr<DistributionArray3D> f, const real *const inode, int x1, int x2,
                                            int x3)
 {
-    f->setDistributionInv(inode, x1, x2, x3);
+    f->setPreCollisionDistribution(inode, x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
 bool Interpolator::iCellHasSolid(const SPtr<BCArray3D> bcArray, int x1, int x2, int x3)
diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.h b/src/cpu/core/LBM/Interpolation/Interpolator.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.h
rename to src/cpu/core/LBM/Interpolation/Interpolator.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/K17CompressibleNavierStokes.cpp b/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp
similarity index 96%
rename from src/cpu/VirtualFluidsCore/LBM/K17CompressibleNavierStokes.cpp
rename to src/cpu/core/LBM/K17CompressibleNavierStokes.cpp
index 6fdc2b96ca744906a26266e0101a0145cc3928dd..4287254015ad9ee8c6d1250636c15989cd81242b 100644
--- a/src/cpu/VirtualFluidsCore/LBM/K17CompressibleNavierStokes.cpp
+++ b/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp
@@ -127,7 +127,7 @@ void K17CompressibleNavierStokes::calculate(int step)
                 }
 
                 vf::lbm::CollisionParameter parameter;
-                dataSet->getFdistributions()->getDistribution(parameter.distribution, x1, x2, x3);
+                dataSet->getFdistributions()->getPreCollisionDistribution(parameter.distribution, x1, x2, x3);
 
                 real forces[3] = { c0o1, c0o1, c0o1 };
                 if (withForcing) // TODO: add level factor?
@@ -156,7 +156,7 @@ void K17CompressibleNavierStokes::calculate(int step)
                 vf::lbm::MacroscopicValues mv;  // not used
                 vf::lbm::TurbulentViscosity tv; // not used
                 vf::lbm::runK17CompressibleNavierStokes<vf::lbm::TurbulenceModel::None>(parameter, mv, tv);
-                dataSet->getFdistributions()->setDistribution(parameter.distribution, x1, x2, x3);
+                dataSet->getFdistributions()->setPostCollisionDistribution(parameter.distribution, x1, x2, x3);
             }
         }
     }
diff --git a/src/cpu/VirtualFluidsCore/LBM/K17CompressibleNavierStokes.h b/src/cpu/core/LBM/K17CompressibleNavierStokes.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/K17CompressibleNavierStokes.h
rename to src/cpu/core/LBM/K17CompressibleNavierStokes.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp b/src/cpu/core/LBM/LBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp
rename to src/cpu/core/LBM/LBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h b/src/cpu/core/LBM/LBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/LBMKernel.h
rename to src/cpu/core/LBM/LBMKernel.h
diff --git a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a154ee477b83d13c1d65a4acd53f9e8fe75e63a8
--- /dev/null
+++ b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp
@@ -0,0 +1,303 @@
+#include "LBMKernelETD3Q27BGK.h"
+#include "D3Q27System.h"
+#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "D3Q27EsoTwist3DSoA.h"
+#include "DataSet3D.h"
+#include "BCSet.h"
+#include "BCArray3D.h"
+#include "basics/constants/NumericConstants.h"
+
+using namespace vf::basics::constant;
+//using namespace UbMath;
+
+//#define PROOF_CORRECTNESS
+
+
+//////////////////////////////////////////////////////////////////////////
+LBMKernelETD3Q27BGK::LBMKernelETD3Q27BGK() 
+{
+   this->compressible = false;
+}
+//////////////////////////////////////////////////////////////////////////
+LBMKernelETD3Q27BGK::~LBMKernelETD3Q27BGK(void)
+= default;
+//////////////////////////////////////////////////////////////////////////
+void LBMKernelETD3Q27BGK::initDataSet()
+{
+   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
+   dataSet->setFdistributions(d);
+}
+//////////////////////////////////////////////////////////////////////////
+SPtr<LBMKernel> LBMKernelETD3Q27BGK::clone()
+{
+   SPtr<LBMKernel> kernel(new LBMKernelETD3Q27BGK());
+   std::dynamic_pointer_cast<LBMKernelETD3Q27BGK>(kernel)->initDataSet();
+   kernel->setCollisionFactor(this->collFactor);
+   kernel->setBCSet(bcSet->clone(kernel));
+   kernel->setWithForcing(withForcing);
+   kernel->setForcingX1(muForcingX1);
+   kernel->setForcingX2(muForcingX2);
+   kernel->setForcingX3(muForcingX3);
+   kernel->setIndex(ix1, ix2, ix3);
+   return kernel;
+}
+//////////////////////////////////////////////////////////////////////////
+void LBMKernelETD3Q27BGK::calculate(int  /*step*/)
+{
+   using namespace D3Q27System;
+   using namespace vf::lbm::dir;
+
+   //initializing of forcing stuff 
+   if (withForcing)
+   {
+      muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3);
+      muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3);
+      muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3);
+      forcingX1 = c0o1;
+      forcingX2 = c0o1;
+      forcingX3 = c0o1;
+   }
+   /////////////////////////////////////
+
+   localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
+   nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
+   zeroDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+
+   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
+   real f[D3Q27System::ENDF+1];
+   real feq[D3Q27System::ENDF+1];
+   real drho,vx1,vx2,vx3;
+   const int bcArrayMaxX1 = (int)bcArray->getNX1();
+   const int bcArrayMaxX2 = (int)bcArray->getNX2();
+   const int bcArrayMaxX3 = (int)bcArray->getNX3();
+
+   int minX1 = ghostLayerWidth;
+   int minX2 = ghostLayerWidth;
+   int minX3 = ghostLayerWidth;
+   int maxX1 = bcArrayMaxX1-ghostLayerWidth;
+   int maxX2 = bcArrayMaxX2-ghostLayerWidth;
+   int maxX3 = bcArrayMaxX3-ghostLayerWidth;
+
+   for(int x3 = minX3; x3 < maxX3; x3++)
+   {
+      for(int x2 = minX2; x2 < maxX2; x2++)
+      {
+         for(int x1 = minX1; x1 < maxX1; x1++)
+         {
+            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
+            {
+               int x1p = x1 + 1;
+               int x2p = x2 + 1;
+               int x3p = x3 + 1;
+               //////////////////////////////////////////////////////////////////////////
+               //read distribution
+               ////////////////////////////////////////////////////////////////////////////
+               f[d000] = (*this->zeroDistributions)(x1,x2,x3);
+
+               f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3);
+               f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3);
+               f[d00P] = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3);
+               f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3);
+               f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3);
+               f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3);
+               f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3);
+               f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3);
+               f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3);
+               f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3);
+               f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3);
+               f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3);
+               f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3);
+
+               f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3  );
+               f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3  );
+               f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p  );
+               f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 );
+               f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 );
+               f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p );
+               f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p );
+               f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p );
+               f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p );
+               f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p);
+               f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p);
+               f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p);
+               f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p);
+               //////////////////////////////////////////////////////////////////////////
+
+               drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M]
+               + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M]
+               + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + f[dMMP]
+               + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM];
+
+               vx1 = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M]
+               + f[dP0M] - f[dM0P] + f[dPPP] - f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM]
+               + f[dPMM] - f[dMPM]; 
+
+               vx2 = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM]
+               - f[d0MP] + f[dPPP] - f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] 
+               + f[dMPM]; 
+
+               vx3 = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM]
+               + f[d0MP] + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] 
+               - f[dMPM];
+
+               real cu_sq= c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+               feq[d000] =  c8o27*(drho-cu_sq);
+               feq[dP00] =  c2o27*(drho+c3o1*( vx1   )+c9o2*( vx1   )*( vx1   )-cu_sq);
+               feq[dM00] =  c2o27*(drho+c3o1*(-vx1   )+c9o2*(-vx1   )*(-vx1   )-cu_sq);
+               feq[d0P0] =  c2o27*(drho+c3o1*(    vx2)+c9o2*(    vx2)*(    vx2)-cu_sq);
+               feq[d0M0] =  c2o27*(drho+c3o1*(   -vx2)+c9o2*(   -vx2)*(   -vx2)-cu_sq);
+               feq[d00P] =  c2o27*(drho+c3o1*( vx3   )+c9o2*(    vx3)*(    vx3)-cu_sq);
+               feq[d00M] =  c2o27*(drho+c3o1*(   -vx3)+c9o2*(   -vx3)*(   -vx3)-cu_sq);
+               feq[dPP0] = c1o54*(drho+c3o1*( vx1+vx2)+c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq);
+               feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
+               feq[dPM0] = c1o54*(drho+c3o1*( vx1-vx2)+c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq);
+               feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
+               feq[dP0P] = c1o54*(drho+c3o1*( vx1+vx3)+c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq);
+               feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
+               feq[dP0M] = c1o54*(drho+c3o1*( vx1-vx3)+c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq);
+               feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
+               feq[d0PP] = c1o54*(drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq);
+               feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
+               feq[d0PM] = c1o54*(drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq);
+               feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
+               feq[dPPP]= c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+               feq[dMMM]= c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+               feq[dPPM]= c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+               feq[dMMP]= c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+               feq[dPMP]= c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+               feq[dMPM]= c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+               feq[dPMM]= c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+               feq[dMPP]= c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+
+               //Relaxation
+               f[d000] += (feq[d000]-f[d000])*collFactor;
+               f[dP00] += (feq[dP00]-f[dP00])*collFactor;
+               f[dM00] += (feq[dM00]-f[dM00])*collFactor;
+               f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor;
+               f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor;
+               f[d00P] += (feq[d00P]-f[d00P])*collFactor;
+               f[d00M] += (feq[d00M]-f[d00M])*collFactor;
+               f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor;
+               f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor;
+               f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor;
+               f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor;
+               f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor;
+               f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor;
+               f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor;
+               f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor;
+               f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor;
+               f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor;
+               f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor;
+               f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor;
+
+               f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor;
+               f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor;
+               f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor;
+               f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor;
+               f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor;
+               f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor;
+               f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor;
+               f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor;
+
+               //////////////////////////////////////////////////////////////////////////
+               //forcing
+               if (withForcing)
+               {
+                  muX1 = x1+ix1*bcArrayMaxX1;
+                  muX2 = x2+ix2*bcArrayMaxX2;
+                  muX3 = x3+ix3*bcArrayMaxX3;
+
+                  forcingX1 = muForcingX1.Eval();
+                  forcingX2 = muForcingX2.Eval();
+                  forcingX3 = muForcingX3.Eval();
+
+                  f[d000] += c0o1;
+                  f[dP00] +=  c3o1*c2o27  *  (forcingX1)                    ;
+                  f[dM00] +=  c3o1*c2o27  *  (-forcingX1)                   ;
+                  f[d0P0] +=  c3o1*c2o27  *             (forcingX2)         ;
+                  f[d0M0] +=  c3o1*c2o27  *             (-forcingX2)        ;
+                  f[d00P] +=  c3o1*c2o27  *                     (forcingX3) ;
+                  f[d00M] +=  c3o1*c2o27  *                     (-forcingX3);
+                  f[dPP0] +=  c3o1*c1o54 * ( forcingX1+forcingX2          ) ;
+                  f[dMM0 ] +=  c3o1*c1o54 * (-forcingX1-forcingX2          ) ;
+                  f[dPM0 ] +=  c3o1*c1o54 * ( forcingX1-forcingX2          ) ;
+                  f[dMP0 ] +=  c3o1*c1o54 * (-forcingX1+forcingX2          ) ;
+                  f[dP0P ] +=  c3o1*c1o54 * ( forcingX1          +forcingX3) ;
+                  f[dM0M ] +=  c3o1*c1o54 * (-forcingX1          -forcingX3) ;
+                  f[dP0M ] +=  c3o1*c1o54 * ( forcingX1          -forcingX3) ;
+                  f[dM0P ] +=  c3o1*c1o54 * (-forcingX1          +forcingX3) ;
+                  f[d0PP ] +=  c3o1*c1o54 * (           forcingX2+forcingX3) ;
+                  f[d0MM ] +=  c3o1*c1o54 * (          -forcingX2-forcingX3) ;
+                  f[d0PM ] +=  c3o1*c1o54 * (           forcingX2-forcingX3) ;
+                  f[d0MP ] +=  c3o1*c1o54 * (          -forcingX2+forcingX3) ;
+                  f[dPPP] +=  c3o1*c1o216* ( forcingX1+forcingX2+forcingX3) ;
+                  f[dMMM] +=  c3o1*c1o216* (-forcingX1-forcingX2-forcingX3) ;
+                  f[dPPM] +=  c3o1*c1o216* ( forcingX1+forcingX2-forcingX3) ;
+                  f[dMMP] +=  c3o1*c1o216* (-forcingX1-forcingX2+forcingX3) ;
+                  f[dPMP] +=  c3o1*c1o216* ( forcingX1-forcingX2+forcingX3) ;
+                  f[dMPM] +=  c3o1*c1o216* (-forcingX1+forcingX2-forcingX3) ;
+                  f[dPMM] +=  c3o1*c1o216* ( forcingX1-forcingX2-forcingX3) ;
+                  f[dMPP] +=  c3o1*c1o216* (-forcingX1+forcingX2+forcingX3) ;
+               }
+               //////////////////////////////////////////////////////////////////////////
+#ifdef  PROOF_CORRECTNESS
+               real rho_post = f[REST] + f[dP00] + 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];
+               real dif = drho - rho_post;
+#ifdef SINGLEPRECISION
+               if(dif > 10.0E-7 || dif < -10.0E-7)
+#else
+               if(dif > 10.0E-15 || dif < -10.0E-15)
+#endif
+               {
+                  UB_THROW(UbException(UB_EXARGS,"rho is not correct"));
+               }
+#endif
+               //////////////////////////////////////////////////////////////////////////
+               //write distribution
+               //////////////////////////////////////////////////////////////////////////
+               (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[iP00];
+               (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[i0P0];
+               (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[i00P];
+               (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[iPP0];
+               (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,  x3) = f[iMP0];
+               (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[iP0P];
+               (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2,  x3) = f[iM0P];
+               (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[i0PP];
+               (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2p,x3) = f[i0MP];
+               (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[iPPP];
+               (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,  x3) = f[iMPP];
+               (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2p,x3) = f[iPMP];
+               (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = f[iMMP];
+
+               (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,  x3    ) = f[iM00 ];
+               (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2p,x3    ) = f[i0M0 ];
+               (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3p  ) = f[i00M ];
+               (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3   ) = f[iMM0];
+               (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2p,x3   ) = f[iPM0];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,  x3p ) = f[iM0M];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3p ) = f[iP0M];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2p,x3p ) = f[i0MM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3p ) = f[i0PM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = f[iMMM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2p,x3p) = f[iPMM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,  x3p) = f[iMPM];
+               (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3p) = f[iPPM];
+
+               (*this->zeroDistributions)(x1,x2,x3) = f[d000];
+               //////////////////////////////////////////////////////////////////////////
+
+
+            }
+         }
+      }
+   }
+}
+//////////////////////////////////////////////////////////////////////////
+real LBMKernelETD3Q27BGK::getCalculationTime()
+{
+   return c0o1;
+}
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.h b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.h
rename to src/cpu/core/LBM/LBMKernelETD3Q27BGK.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMSystem.cpp b/src/cpu/core/LBM/LBMSystem.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/LBMSystem.cpp
rename to src/cpu/core/LBM/LBMSystem.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMSystem.h b/src/cpu/core/LBM/LBMSystem.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/LBMSystem.h
rename to src/cpu/core/LBM/LBMSystem.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h b/src/cpu/core/LBM/LBMUnitConverter.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
rename to src/cpu/core/LBM/LBMUnitConverter.h
diff --git a/src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.cpp b/src/cpu/core/LBM/VoidLBMKernel.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.cpp
rename to src/cpu/core/LBM/VoidLBMKernel.cpp
diff --git a/src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.h b/src/cpu/core/LBM/VoidLBMKernel.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.h
rename to src/cpu/core/LBM/VoidLBMKernel.h
diff --git a/src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.cpp b/src/cpu/core/Parallel/BlocksDistributor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.cpp
rename to src/cpu/core/Parallel/BlocksDistributor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.h b/src/cpu/core/Parallel/BlocksDistributor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.h
rename to src/cpu/core/Parallel/BlocksDistributor.h
diff --git a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h b/src/cpu/core/Parallel/MPIIODataStructures.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h
rename to src/cpu/core/Parallel/MPIIODataStructures.h
diff --git a/src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.cpp b/src/cpu/core/Parallel/MetisPartitioner.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.cpp
rename to src/cpu/core/Parallel/MetisPartitioner.cpp
diff --git a/src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.h b/src/cpu/core/Parallel/MetisPartitioner.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.h
rename to src/cpu/core/Parallel/MetisPartitioner.h
diff --git a/src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.cpp b/src/cpu/core/Parallel/PriorityQueueDecompositor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.cpp
rename to src/cpu/core/Parallel/PriorityQueueDecompositor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.h b/src/cpu/core/Parallel/PriorityQueueDecompositor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.h
rename to src/cpu/core/Parallel/PriorityQueueDecompositor.h
diff --git a/src/cpu/VirtualFluidsCore/Parallel/SimpleGeometricPartitioner.h b/src/cpu/core/Parallel/SimpleGeometricPartitioner.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/SimpleGeometricPartitioner.h
rename to src/cpu/core/Parallel/SimpleGeometricPartitioner.h
diff --git a/src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.cpp b/src/cpu/core/Parallel/ZoltanPartitioner.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.cpp
rename to src/cpu/core/Parallel/ZoltanPartitioner.cpp
diff --git a/src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.h b/src/cpu/core/Parallel/ZoltanPartitioner.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.h
rename to src/cpu/core/Parallel/ZoltanPartitioner.h
diff --git a/src/cpu/VirtualFluidsCore/Simulation/Block3D.cpp b/src/cpu/core/Simulation/Block3D.cpp
similarity index 98%
rename from src/cpu/VirtualFluidsCore/Simulation/Block3D.cpp
rename to src/cpu/core/Simulation/Block3D.cpp
index a6b7127bc4ecd2049790cb2bef98c1d506f7f513..856924874f853b60c617c33a5d0f3c7084da762f 100644
--- a/src/cpu/VirtualFluidsCore/Simulation/Block3D.cpp
+++ b/src/cpu/core/Simulation/Block3D.cpp
@@ -266,7 +266,7 @@ int Block3D::getNumberOfLocalConnectorsForSurfaces()
 
     for (SPtr<Block3DConnector> c : connectors) {
         if (c) {
-            if (c->getSendDir() >= (int)DIR_P00 && c->getSendDir() <= (int)DIR_00M && c->isLocalConnector())
+            if (c->getSendDir() >= (int)dP00 && c->getSendDir() <= (int)d00M && c->isLocalConnector())
                 count++;
         }
     }
@@ -282,7 +282,7 @@ int Block3D::getNumberOfRemoteConnectorsForSurfaces()
 
     for (SPtr<Block3DConnector> c : connectors) {
         if (c) {
-            if (c->getSendDir() >= (int)DIR_P00 && c->getSendDir() <= (int)DIR_00M && c->isRemoteConnector())
+            if (c->getSendDir() >= (int)dP00 && c->getSendDir() <= (int)d00M && c->isRemoteConnector())
                 count++;
         }
     }
diff --git a/src/cpu/VirtualFluidsCore/Simulation/Block3D.h b/src/cpu/core/Simulation/Block3D.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Simulation/Block3D.h
rename to src/cpu/core/Simulation/Block3D.h
diff --git a/src/cpu/VirtualFluidsCore/Simulation/Grid3D.cpp b/src/cpu/core/Simulation/Grid3D.cpp
similarity index 98%
rename from src/cpu/VirtualFluidsCore/Simulation/Grid3D.cpp
rename to src/cpu/core/Simulation/Grid3D.cpp
index 2cf8a4824c6d7f30bb2b1593ba96da3d952924ad..faa3d793b72f4e1c51c7c6d87d060c68dfbed7d9 100644
--- a/src/cpu/VirtualFluidsCore/Simulation/Grid3D.cpp
+++ b/src/cpu/core/Simulation/Grid3D.cpp
@@ -1106,82 +1106,82 @@ void Grid3D::getNeighborBlocksForDirection(int dir, int ix1, int ix2, int ix3, i
     using namespace vf::lbm::dir;
 
     switch (dir) {
-        case DIR_P00:
+        case dP00:
             this->getNeighborsEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_M00:
+        case dM00:
             this->getNeighborsWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0P0:
+        case d0P0:
             this->getNeighborsNorth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0M0:
+        case d0M0:
             this->getNeighborsSouth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_00P:
+        case d00P:
             this->getNeighborsTop(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_00M:
+        case d00M:
             this->getNeighborsBottom(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PP0:
+        case dPP0:
             this->getNeighborsNorthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MM0:
+        case dMM0:
             this->getNeighborsSouthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PM0:
+        case dPM0:
             this->getNeighborsSouthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MP0:
+        case dMP0:
             this->getNeighborsNorthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_P0P:
+        case dP0P:
             this->getNeighborsTopEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_M0M:
+        case dM0M:
             this->getNeighborsBottomWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_P0M:
+        case dP0M:
             this->getNeighborsBottomEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_M0P:
+        case dM0P:
             this->getNeighborsTopWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0PP:
+        case d0PP:
             this->getNeighborsTopNorth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0MM:
+        case d0MM:
             this->getNeighborsBottomSouth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0PM:
+        case d0PM:
             this->getNeighborsBottomNorth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0MP:
+        case d0MP:
             this->getNeighborsTopSouth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PPP:
+        case dPPP:
             this->getNeighborsTopNorthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MPP:
+        case dMPP:
             this->getNeighborsTopNorthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PMP:
+        case dPMP:
             this->getNeighborsTopSouthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MMP:
+        case dMMP:
             this->getNeighborsTopSouthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PPM:
+        case dPPM:
             this->getNeighborsBottomNorthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MPM:
+        case dMPM:
             this->getNeighborsBottomNorthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PMM:
+        case dPMM:
             this->getNeighborsBottomSouthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MMM:
+        case dMMM:
             this->getNeighborsBottomSouthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
         default:
@@ -1271,85 +1271,85 @@ void Grid3D::getNeighborBlocksForDirectionWithREST(int dir, int ix1, int ix2, in
     using namespace vf::lbm::dir;
 
     switch (dir) {
-        case DIR_P00:
+        case dP00:
             this->getNeighborsEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_M00:
+        case dM00:
             this->getNeighborsWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0P0:
+        case d0P0:
             this->getNeighborsNorth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0M0:
+        case d0M0:
             this->getNeighborsSouth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_00P:
+        case d00P:
             this->getNeighborsTop(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_00M:
+        case d00M:
             this->getNeighborsBottom(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PP0:
+        case dPP0:
             this->getNeighborsNorthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MM0:
+        case dMM0:
             this->getNeighborsSouthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PM0:
+        case dPM0:
             this->getNeighborsSouthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MP0:
+        case dMP0:
             this->getNeighborsNorthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_P0P:
+        case dP0P:
             this->getNeighborsTopEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_M0M:
+        case dM0M:
             this->getNeighborsBottomWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_P0M:
+        case dP0M:
             this->getNeighborsBottomEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_M0P:
+        case dM0P:
             this->getNeighborsTopWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0PP:
+        case d0PP:
             this->getNeighborsTopNorth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0MM:
+        case d0MM:
             this->getNeighborsBottomSouth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0PM:
+        case d0PM:
             this->getNeighborsBottomNorth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_0MP:
+        case d0MP:
             this->getNeighborsTopSouth(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PPP:
+        case dPPP:
             this->getNeighborsTopNorthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MPP:
+        case dMPP:
             this->getNeighborsTopNorthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PMP:
+        case dPMP:
             this->getNeighborsTopSouthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MMP:
+        case dMMP:
             this->getNeighborsTopSouthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PPM:
+        case dPPM:
             this->getNeighborsBottomNorthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MPM:
+        case dMPM:
             this->getNeighborsBottomNorthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_PMM:
+        case dPMM:
             this->getNeighborsBottomSouthEast(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_MMM:
+        case dMMM:
             this->getNeighborsBottomSouthWest(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
-        case DIR_000:
+        case d000:
             this->getNeighborsZero(ix1, ix2, ix3, level, levelDepth, blocks);
             break;
         default:
diff --git a/src/cpu/VirtualFluidsCore/Simulation/Grid3D.h b/src/cpu/core/Simulation/Grid3D.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Simulation/Grid3D.h
rename to src/cpu/core/Simulation/Grid3D.h
diff --git a/src/cpu/VirtualFluidsCore/Simulation/Simulation.cpp b/src/cpu/core/Simulation/Simulation.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Simulation/Simulation.cpp
rename to src/cpu/core/Simulation/Simulation.cpp
diff --git a/src/cpu/VirtualFluidsCore/Simulation/Simulation.h b/src/cpu/core/Simulation/Simulation.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Simulation/Simulation.h
rename to src/cpu/core/Simulation/Simulation.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.cpp b/src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.h b/src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.h
rename to src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp
index 3724569eb1acd4a96076205a07a7ae393e4924dc..4542a2837b7c08653e138e73df18493a67b96bde 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp
@@ -376,7 +376,7 @@ void AverageValuesSimulationObserver::calculateAverageValues(real timeStep)
                                 //////////////////////////////////////////////////////////////////////////
                                 // read distribution
                                 ////////////////////////////////////////////////////////////////////////////
-                                distributions->getDistribution(f, ix1, ix2, ix3);
+                                distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                                 //////////////////////////////////////////////////////////////////////////
                                 // compute velocity
                                 //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.h b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.h
rename to src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.h b/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.h
rename to src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp
similarity index 98%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/CalculateTorqueSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp
index 01521d043986c3223b87096bcb4898cba1809438..7d9d22bd7dcac7b7216a7cf8d6fe7b54bc0fba50 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateTorqueSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp
@@ -226,7 +226,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, i
 
    if (bc) {
       real f[D3Q27System::ENDF + 1];
-      distributions->getDistribution(f, x1, x2, x3);
+      distributions->getPreCollisionDistribution(f, x1, x2, x3);
       real collFactor = kernel->getCollisionFactor();
       real shearRate = D3Q27System::getShearRate(f, collFactor);
       real rho = D3Q27System::getDensity(f);
@@ -260,7 +260,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int
 
    if (bc) {
       real f[D3Q27System::ENDF + 1];
-      distributions->getDistribution(f, x1, x2, x3);
+      distributions->getPreCollisionDistribution(f, x1, x2, x3);
       real collFactor = kernel->getCollisionFactor();
       real shearRate = D3Q27System::getShearRate(f, collFactor);
       real rho = D3Q27System::getDensity(f);
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.cpp b/src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.h b/src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.h
rename to src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.cpp b/src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.h b/src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.h
rename to src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.cpp b/src/cpu/core/SimulationObservers/ForceCalculator.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.cpp
rename to src/cpu/core/SimulationObservers/ForceCalculator.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.h b/src/cpu/core/SimulationObservers/ForceCalculator.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.h
rename to src/cpu/core/SimulationObservers/ForceCalculator.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.cpp b/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.h b/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.h
rename to src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.cpp b/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.h b/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.h
rename to src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.cpp b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.cpp
rename to src/cpu/core/SimulationObservers/IntegrateValuesHelper.cpp
index a2d35b6b2883f54b799cc2e5b6aacd1ece5c08bc..76c4a5aa570b0badd4e050e4938d728521f14f71 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.cpp
+++ b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.cpp
@@ -200,7 +200,7 @@ void IntegrateValuesHelper::calculateMQ()
         SPtr<BCArray3D> bcArray                 = kernel->getBCSet()->getBCArray();
         SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions();
         for (UbTupleInt3 node : cn.nodes) {
-            distributions->getDistribution(f, val<1>(node), val<2>(node), val<3>(node));
+            distributions->getPreCollisionDistribution(f, val<1>(node), val<2>(node), val<3>(node));
             calcMacros(f, rho, vx1, vx2, vx3);
             sRho += rho * cellVolume;
             sVx1 += vx1 * cellVolume;
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.h b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.h
rename to src/cpu/core/SimulationObservers/IntegrateValuesHelper.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
similarity index 98%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
index e312bf2b27aa15b51146aab9559c201ed88bbd7e..68ec072e59f5ba3739637db6b529e1d26d7fb78b 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
@@ -124,7 +124,7 @@ void LineTimeSeriesSimulationObserver::collectData()
                     } else if (dir == X3) {
                         ix3 = ix;
                     }
-                    distributions->getDistribution(f, ix1, ix2, ix3);
+                    distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     calcMacros(f, rho, vx1, vx2, vx3);
                     v1[x + (ix - 1)] = vx1;
                     v2[x + (ix - 1)] = vx2;
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.h b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.h
rename to src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.h
rename to src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.h
rename to src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.h
rename to src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.h
rename to src/cpu/core/SimulationObservers/MPIIOSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.cpp b/src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.cpp
similarity index 97%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.cpp
index 10749b5130e387205f01e57f4c71c90c90f46e02..5575cc53e8d40f9a322d3912a8346403b04e75f3 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.cpp
@@ -93,7 +93,7 @@ void MicrophoneArraySimulationObserver::collectData(real step)
 {
     for (std::size_t i = 0; i < microphones.size(); i++) {
         real f[D3Q27System::ENDF + 1];
-        microphones[i]->distridution->getDistribution(f, val<1>(microphones[i]->nodeIndexes),
+        microphones[i]->distridution->getPreCollisionDistribution(f, val<1>(microphones[i]->nodeIndexes),
                                                       val<2>(microphones[i]->nodeIndexes),
                                                       val<3>(microphones[i]->nodeIndexes));
         real vx1, vx2, vx3, rho;
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.h b/src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.h
rename to src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.cpp b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.h b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.h
rename to src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.cpp b/src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp
index f36997c05dc92970b743a57d1fc9b79f92a2df51..d82a51e175075ad211ac6d6c187b707e605cb7fe 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp
@@ -93,7 +93,7 @@ void PressureCoefficientSimulationObserver::calculateRho()
                     real cx2 = val<2>(org) - val<2>(nodeOffset) + x2 * dx;
                     real cx3 = val<3>(org) - val<3>(nodeOffset) + x3 * dx;
                     if (plane->isPointInGbObject3D(cx1, cx2, cx3)) {
-                        distributions->getDistribution(f, x1, x2, x3);
+                        distributions->getPreCollisionDistribution(f, x1, x2, x3);
                         calcMacros(f, rho, vx1, vx2, vx3);
                         values.push_back(cx1);
                         values.push_back(cx2);
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.h b/src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.h
rename to src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.cpp b/src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.h b/src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.h
rename to src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.cpp b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp
similarity index 94%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp
index ccd4025235dd636b0654ea14ad307f3a256c58a9..397f576f63b99a4107d55bfce4e884dc987830b0 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp
@@ -297,12 +297,12 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int
             // std::max(ix3+offz,1)); distributionsW->getDistribution(f0, std::max(ix1    ,1), std::max(ix2    ,1),
             // std::max(ix3    ,1)); distributions->getDistribution(fE, std::max(ix1+offx    ,1), std::max(ix2+offy ,1),
             // std::max(ix3+offz    ,1)); //E:= plus 1
-            distributionsW->getDistribution(fW2, std::max(ix1 + 2 * offx, 0), std::max(ix2 + 2 * offy, 0),
+            distributionsW->getPreCollisionDistribution(fW2, std::max(ix1 + 2 * offx, 0), std::max(ix2 + 2 * offy, 0),
                                             std::max(ix3 + 2 * offz, 0));
-            distributionsW->getDistribution(fW, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0),
+            distributionsW->getPreCollisionDistribution(fW, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0),
                                             std::max(ix3 + offz, 0));
-            distributionsW->getDistribution(f0, std::max(ix1, 0), std::max(ix2, 0), std::max(ix3, 0));
-            distributions->getDistribution(fE, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0),
+            distributionsW->getPreCollisionDistribution(f0, std::max(ix1, 0), std::max(ix2, 0), std::max(ix3, 0));
+            distributions->getPreCollisionDistribution(fE, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0),
                                            std::max(ix3 + offz, 0)); // E:= plus 1
 
             computeVelocity(fE, vE, compressible);
@@ -321,13 +321,13 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int
             real fW[27];
 
             if (offx == 1) {
-                distributionsW->getDistribution(fW, (distributions->getNX1()) - 1, ix2,
+                distributionsW->getPreCollisionDistribution(fW, (distributions->getNX1()) - 1, ix2,
                                                 ix3); // moved one block backward, now get last entry
             } else if (offy == 1) {
-                distributionsW->getDistribution(fW, ix1, (distributions->getNX2()) - 1, ix3);
+                distributionsW->getPreCollisionDistribution(fW, ix1, (distributions->getNX2()) - 1, ix3);
 
             } else if (offz == 1) {
-                distributionsW->getDistribution(fW, ix1, ix2, distributions->getNX3() - 1);
+                distributionsW->getPreCollisionDistribution(fW, ix1, ix2, distributions->getNX3() - 1);
             }
             computeVelocity(fW, vW, compressible);
         }
@@ -335,13 +335,13 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int
     } else {
         // data available in current block:
         real fW[27];
-        distributions->getDistribution(fW, ix1 - offx, ix2 - offy, ix3 - offz);
+        distributions->getPreCollisionDistribution(fW, ix1 - offx, ix2 - offy, ix3 - offz);
         computeVelocity(fW, vW, compressible);
     }
     if (checkInterpolation) {
         // in plus-direction data is available in current block because of ghost layers
         real fE[27];
-        distributions->getDistribution(fE, ix1 + offx, ix2 + offy, ix3 + offz); // E:= plus 1
+        distributions->getPreCollisionDistribution(fE, ix1 + offx, ix2 + offy, ix3 + offz); // E:= plus 1
         computeVelocity(fE, vE, compressible);
     }
 }
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.h b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.h
rename to src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.cpp b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp
similarity index 91%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp
index 8a2b90698ee7f48dce5eea8f738bd69651d8b059..7bc7923f3c26dcf496e7111ce9383bc7907dcf57 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp
@@ -170,38 +170,38 @@ void ShearStressSimulationObserver::calculateShearStress(real timeStep)
                     //////////////////////////////////////////////////////////////////////////
                     // read distribution
                     ////////////////////////////////////////////////////////////////////////////
-                    distributions->getDistribution(f, ix1, ix2, ix3);
+                    distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     //////////////////////////////////////////////////////////////////////////
                     // compute velocity
                     //////////////////////////////////////////////////////////////////////////
-                    vx = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                          (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00]));
+                    vx = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
+                          (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00]));
 
-                    vy = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) +
-                          (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0]));
+                    vy = ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
+                          (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0]));
 
-                    vz = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) +
-                          (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M]));
+                    vz = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
+                          (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M]));
 
                     sxy = c3o1 * collFactor / (collFactor - c1o1) *
-                          (((f[DIR_PPP] + f[DIR_MMM]) - (f[DIR_PMP] + f[DIR_MPM])) + (-(f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) +
-                           (((f[DIR_PP0] + f[DIR_MM0]) - (f[DIR_PM0] + f[DIR_MP0]))) - vx * vy);
+                          (((f[dPPP] + f[dMMM]) - (f[dPMP] + f[dMPM])) + (-(f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
+                           (((f[dPP0] + f[dMM0]) - (f[dPM0] + f[dMP0]))) - vx * vy);
 
                     sxz = c3o1 * collFactor / (collFactor - c1o1) *
-                          (((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + (-(f[DIR_PMM] + f[DIR_MPP]) - (f[DIR_MMP] + f[DIR_PPM])) +
-                           ((f[DIR_P0P] + f[DIR_M0M]) - (f[DIR_P0M] + f[DIR_M0P])) - vx * vz);
+                          (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + (-(f[dPMM] + f[dMPP]) - (f[dMMP] + f[dPPM])) +
+                           ((f[dP0P] + f[dM0M]) - (f[dP0M] + f[dM0P])) - vx * vz);
 
                     syz = c3o1 * collFactor / (collFactor - c1o1) *
-                          (((f[DIR_PPP] + f[DIR_MMM]) - (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) - (f[DIR_MMP] + f[DIR_PPM])) +
-                           (-(f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM])) - vy * vz);
+                          (((f[dPPP] + f[dMMM]) - (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) - (f[dMMP] + f[dPPM])) +
+                           (-(f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM])) - vy * vz);
 
                     real dxxMyy = c3o1 / c2o1 * collFactor / (collFactor - c1o1) *
-                                     (((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM])) +
-                                      ((f[DIR_P00] + f[DIR_M00]) - (f[DIR_0P0] + f[DIR_0M0])) - vx * vx + vy * vy);
+                                     (((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM])) +
+                                      ((f[dP00] + f[dM00]) - (f[d0P0] + f[d0M0])) - vx * vx + vy * vy);
 
                     real dxxMzz = c3o1 / c2o1 * collFactor / (collFactor - c1o1) *
-                                     ((((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) +
-                                      ((f[DIR_P00] + f[DIR_M00]) - (f[DIR_00P] + f[DIR_00M])) - vx * vx + vz * vz);
+                                     ((((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
+                                      ((f[dP00] + f[dM00]) - (f[d00P] + f[d00M])) - vx * vx + vz * vz);
 
                     // LBMReal dyyMzz =3.0/2.0 *collFactor/(collFactor-1.0)*((((f[NE] + f[SW]) + (f[SE] +
                     // f[NW]))-((f[TE] + f[BW])+(f[BE]+ f[TW])))
@@ -571,32 +571,32 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                                 "ix2=" + UbSystem::toString(ix2) + "ix3=" + UbSystem::toString(ix3) +
                                                 "GlobalID=" + UbSystem::toString(block->getGlobalID()) +
                                                 "dx=" + UbSystem::toString(dx) +
-                                                "T=" + UbSystem::toString(bcPtr->getQ(DIR_00P)) +
-                                                "B=" + UbSystem::toString(bcPtr->getQ(DIR_00M)) +
-                                                "E=" + UbSystem::toString(bcPtr->getQ(DIR_P00)) +
-                                                "W=" + UbSystem::toString(bcPtr->getQ(DIR_M00)) +
-                                                "N=" + UbSystem::toString(bcPtr->getQ(DIR_0P0)) +
-                                                "S=" + UbSystem::toString(bcPtr->getQ(DIR_0M0)) +
-                                                "NE=" + UbSystem::toString(bcPtr->getQ(DIR_PP0)) +
-                                                "SW=" + UbSystem::toString(bcPtr->getQ(DIR_MM0)) +
-                                                "SE=" + UbSystem::toString(bcPtr->getQ(DIR_PM0)) +
-                                                "NW=" + UbSystem::toString(bcPtr->getQ(DIR_MP0)) +
-                                                "TE=" + UbSystem::toString(bcPtr->getQ(DIR_P0P)) +
-                                                "BW=" + UbSystem::toString(bcPtr->getQ(DIR_M0M)) +
-                                                "BE=" + UbSystem::toString(bcPtr->getQ(DIR_P0M)) +
-                                                "TW=" + UbSystem::toString(bcPtr->getQ(DIR_M0P)) +
-                                                "TN=" + UbSystem::toString(bcPtr->getQ(DIR_0PP)) +
-                                                "BS=" + UbSystem::toString(bcPtr->getQ(DIR_0MM)) +
-                                                "BN=" + UbSystem::toString(bcPtr->getQ(DIR_0PM)) +
-                                                "TS=" + UbSystem::toString(bcPtr->getQ(DIR_0MP)) +
-                                                "TNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPP)) +
-                                                "TNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPP)) +
-                                                "TSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMP)) +
-                                                "TSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMP)) +
-                                                "BNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPM)) +
-                                                "BNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPM)) +
-                                                "BSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMM)) +
-                                                "BSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMM) * dx)));
+                                                "T=" + UbSystem::toString(bcPtr->getQ(d00P)) +
+                                                "B=" + UbSystem::toString(bcPtr->getQ(d00M)) +
+                                                "E=" + UbSystem::toString(bcPtr->getQ(dP00)) +
+                                                "W=" + UbSystem::toString(bcPtr->getQ(dM00)) +
+                                                "N=" + UbSystem::toString(bcPtr->getQ(d0P0)) +
+                                                "S=" + UbSystem::toString(bcPtr->getQ(d0M0)) +
+                                                "NE=" + UbSystem::toString(bcPtr->getQ(dPP0)) +
+                                                "SW=" + UbSystem::toString(bcPtr->getQ(dMM0)) +
+                                                "SE=" + UbSystem::toString(bcPtr->getQ(dPM0)) +
+                                                "NW=" + UbSystem::toString(bcPtr->getQ(dMP0)) +
+                                                "TE=" + UbSystem::toString(bcPtr->getQ(dP0P)) +
+                                                "BW=" + UbSystem::toString(bcPtr->getQ(dM0M)) +
+                                                "BE=" + UbSystem::toString(bcPtr->getQ(dP0M)) +
+                                                "TW=" + UbSystem::toString(bcPtr->getQ(dM0P)) +
+                                                "TN=" + UbSystem::toString(bcPtr->getQ(d0PP)) +
+                                                "BS=" + UbSystem::toString(bcPtr->getQ(d0MM)) +
+                                                "BN=" + UbSystem::toString(bcPtr->getQ(d0PM)) +
+                                                "TS=" + UbSystem::toString(bcPtr->getQ(d0MP)) +
+                                                "TNE=" + UbSystem::toString(bcPtr->getQ(dPPP)) +
+                                                "TNW=" + UbSystem::toString(bcPtr->getQ(dMPP)) +
+                                                "TSE=" + UbSystem::toString(bcPtr->getQ(dPMP)) +
+                                                "TSW=" + UbSystem::toString(bcPtr->getQ(dMMP)) +
+                                                "BNE=" + UbSystem::toString(bcPtr->getQ(dPPM)) +
+                                                "BNW=" + UbSystem::toString(bcPtr->getQ(dMPM)) +
+                                                "BSE=" + UbSystem::toString(bcPtr->getQ(dPMM)) +
+                                                "BSW=" + UbSystem::toString(bcPtr->getQ(dMMM) * dx)));
         }
     }
 
@@ -617,7 +617,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                 if (ii <= 2) {
                                     real q = bcPtrIn->getQ(fdir);
                                     if (q != 999.00000) {
-                                        if (fdir == DIR_P00) {
+                                        if (fdir == dP00) {
                                             // if(!bcArray->isSolid(i, j, k))continue;
                                             if (i + q <= x + 1) {
                                                 if (ii == 0) {
@@ -643,7 +643,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                                 }
                                             }
                                         }
-                                        if (fdir == DIR_M00) {
+                                        if (fdir == dM00) {
                                             // if(!bcArray->isSolid(i, j, k))continue;
                                             if (i - q >= x) {
                                                 if (ii == 0) {
@@ -669,7 +669,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                                 }
                                             }
                                         }
-                                        if (fdir == DIR_0P0) {
+                                        if (fdir == d0P0) {
                                             // if(!bcArray->isSolid(i, j, k))continue;
                                             if (j + q <= y + 1) {
                                                 if (ii == 0) {
@@ -695,7 +695,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                                 }
                                             }
                                         }
-                                        if (fdir == DIR_0M0) {
+                                        if (fdir == d0M0) {
                                             // if(!bcArray->isSolid(i, j, k))continue;
                                             if (j - q >= y) {
                                                 if (ii == 0) {
@@ -722,7 +722,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                             }
                                         }
 
-                                        if (fdir == DIR_00P) {
+                                        if (fdir == d00P) {
                                             // if(!bcArray->isSolid(i, j, k))continue;
                                             if (k + q <= z + 1) {
                                                 if (ii == 0) {
@@ -748,7 +748,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                                                 }
                                             }
                                         }
-                                        if (fdir == DIR_00M) {
+                                        if (fdir == d00M) {
                                             // if(!bcArray->isSolid(i, j, k))continue;
                                             if (k - q >= z) {
                                                 if (ii == 0) {
@@ -797,32 +797,32 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr
                     UB_EXARGS, "ii is=" + UbSystem::toString(ii) + "  ix1=" + UbSystem::toString(ix1) +
                                    " ix2=" + UbSystem::toString(ix2) + " ix3=" + UbSystem::toString(ix3) +
                                    " Block3D::GlobalID=" + UbSystem::toString(block->getGlobalID()) + " dx=" +
-                                   UbSystem::toString(dx) + " T=" + UbSystem::toString(bcPtr->getQ(DIR_00P)) +
-                                   " B=" + UbSystem::toString(bcPtr->getQ(DIR_00M)) +
-                                   " E=" + UbSystem::toString(bcPtr->getQ(DIR_P00)) +
-                                   " W=" + UbSystem::toString(bcPtr->getQ(DIR_M00)) +
-                                   " N=" + UbSystem::toString(bcPtr->getQ(DIR_0P0)) +
-                                   " S=" + UbSystem::toString(bcPtr->getQ(DIR_0M0)) +
-                                   " NE=" + UbSystem::toString(bcPtr->getQ(DIR_PP0)) +
-                                   " SW=" + UbSystem::toString(bcPtr->getQ(DIR_MM0)) +
-                                   " SE=" + UbSystem::toString(bcPtr->getQ(DIR_PM0)) +
-                                   " NW=" + UbSystem::toString(bcPtr->getQ(DIR_MP0)) +
-                                   " TE=" + UbSystem::toString(bcPtr->getQ(DIR_P0P)) +
-                                   " BW=" + UbSystem::toString(bcPtr->getQ(DIR_M0M)) +
-                                   " BE=" + UbSystem::toString(bcPtr->getQ(DIR_P0M)) +
-                                   " TW=" + UbSystem::toString(bcPtr->getQ(DIR_M0P)) +
-                                   " TN=" + UbSystem::toString(bcPtr->getQ(DIR_0PP)) +
-                                   " BS=" + UbSystem::toString(bcPtr->getQ(DIR_0MM)) +
-                                   " BN=" + UbSystem::toString(bcPtr->getQ(DIR_0PM)) +
-                                   " TS=" + UbSystem::toString(bcPtr->getQ(DIR_0MP)) +
-                                   " TNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPP)) +
-                                   " TNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPP)) +
-                                   " TSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMP)) +
-                                   " TSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMP)) +
-                                   " BNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPM)) +
-                                   " BNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPM)) +
-                                   " BSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMM)) +
-                                   " BSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMM))));
+                                   UbSystem::toString(dx) + " T=" + UbSystem::toString(bcPtr->getQ(d00P)) +
+                                   " B=" + UbSystem::toString(bcPtr->getQ(d00M)) +
+                                   " E=" + UbSystem::toString(bcPtr->getQ(dP00)) +
+                                   " W=" + UbSystem::toString(bcPtr->getQ(dM00)) +
+                                   " N=" + UbSystem::toString(bcPtr->getQ(d0P0)) +
+                                   " S=" + UbSystem::toString(bcPtr->getQ(d0M0)) +
+                                   " NE=" + UbSystem::toString(bcPtr->getQ(dPP0)) +
+                                   " SW=" + UbSystem::toString(bcPtr->getQ(dMM0)) +
+                                   " SE=" + UbSystem::toString(bcPtr->getQ(dPM0)) +
+                                   " NW=" + UbSystem::toString(bcPtr->getQ(dMP0)) +
+                                   " TE=" + UbSystem::toString(bcPtr->getQ(dP0P)) +
+                                   " BW=" + UbSystem::toString(bcPtr->getQ(dM0M)) +
+                                   " BE=" + UbSystem::toString(bcPtr->getQ(dP0M)) +
+                                   " TW=" + UbSystem::toString(bcPtr->getQ(dM0P)) +
+                                   " TN=" + UbSystem::toString(bcPtr->getQ(d0PP)) +
+                                   " BS=" + UbSystem::toString(bcPtr->getQ(d0MM)) +
+                                   " BN=" + UbSystem::toString(bcPtr->getQ(d0PM)) +
+                                   " TS=" + UbSystem::toString(bcPtr->getQ(d0MP)) +
+                                   " TNE=" + UbSystem::toString(bcPtr->getQ(dPPP)) +
+                                   " TNW=" + UbSystem::toString(bcPtr->getQ(dMPP)) +
+                                   " TSE=" + UbSystem::toString(bcPtr->getQ(dPMP)) +
+                                   " TSW=" + UbSystem::toString(bcPtr->getQ(dMMP)) +
+                                   " BNE=" + UbSystem::toString(bcPtr->getQ(dPPM)) +
+                                   " BNW=" + UbSystem::toString(bcPtr->getQ(dMPM)) +
+                                   " BSE=" + UbSystem::toString(bcPtr->getQ(dPMM)) +
+                                   " BSW=" + UbSystem::toString(bcPtr->getQ(dMMM))));
             }
         }
     }
@@ -888,22 +888,22 @@ void ShearStressSimulationObserver::initDistance()
                         continue;
                     int numberOfCorner = 0;
 
-                    if (bc->getQ(DIR_00P) != 999.000) {
+                    if (bc->getQ(d00P) != 999.000) {
                         numberOfCorner++;
                     }
-                    if (bc->getQ(DIR_00M) != 999.000) {
+                    if (bc->getQ(d00M) != 999.000) {
                         numberOfCorner++;
                     }
-                    if (bc->getQ(DIR_P00) != 999.000) {
+                    if (bc->getQ(dP00) != 999.000) {
                         numberOfCorner++;
                     }
-                    if (bc->getQ(DIR_M00) != 999.000) {
+                    if (bc->getQ(dM00) != 999.000) {
                         numberOfCorner++;
                     }
-                    if (bc->getQ(DIR_0P0) != 999.000) {
+                    if (bc->getQ(d0P0) != 999.000) {
                         numberOfCorner++;
                     }
-                    if (bc->getQ(DIR_0M0) != 999.000) {
+                    if (bc->getQ(d0M0) != 999.000) {
                         numberOfCorner++;
                     }
                     // if(bc->hasVelocityBoundary()||bc->hasDensityBoundary())continue;
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.h b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.h
rename to src/cpu/core/SimulationObservers/ShearStressSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.cpp b/src/cpu/core/SimulationObservers/SimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/SimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.h b/src/cpu/core/SimulationObservers/SimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.h
rename to src/cpu/core/SimulationObservers/SimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp
index 7f915be1a931fb61a4c59ab9d20677f4d3be97ad..5161e887b63c8c0b1ed945839a00f25b2fb5d070 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp
@@ -286,7 +286,7 @@ void TimeAveragedValuesSimulationObserver::addData(const SPtr<Block3D> block)
 
                     data[index++].push_back(level);
 
-                    distributions->getDistribution(f, ix1, ix2, ix3);
+                    distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     calcMacros(f, rho, vx1, vx2, vx3);
 
                     data[index++].push_back(rho);
@@ -516,7 +516,7 @@ void TimeAveragedValuesSimulationObserver::calculateSubtotal(real step)
                                         // read distribution
                                         ////////////////////////////////////////////////////////////////////////////
 
-                                        distributions->getDistribution(f, ix1, ix2, ix3);
+                                        distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                                         //////////////////////////////////////////////////////////////////////////
                                         // compute velocity
                                         //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.h b/src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.h
rename to src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.cpp b/src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.h b/src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.h
rename to src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.h b/src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.h
rename to src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp b/src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp
similarity index 92%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp
index d5a0ccb593488f4e992fef0fc7591c0672fc24ed..424c3411f05400597c1722df793153354ba874b7 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp
@@ -212,18 +212,18 @@ void TurbulenceIntensitySimulationObserver::calculateAverageValues(real timeStep
                                 //////////////////////////////////////////////////////////////////////////
                                 // read distribution
                                 ////////////////////////////////////////////////////////////////////////////
-                                distributions->getDistribution(f, ix1, ix2, ix3);
+                                distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                                 //////////////////////////////////////////////////////////////////////////
                                 // compute velocity
                                 //////////////////////////////////////////////////////////////////////////
-                                vx = f[DIR_P00] - f[DIR_M00] + f[DIR_PP0] - f[DIR_MM0] + f[DIR_PM0] - f[DIR_MP0] + f[DIR_P0P] - f[DIR_M0M] + f[DIR_P0M] - f[DIR_M0P] +
-                                     f[DIR_PPP] - f[DIR_MMP] + f[DIR_PMP] - f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] + f[DIR_PMM] - f[DIR_MPM];
+                                vx = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M] + f[dP0M] - f[dM0P] +
+                                     f[dPPP] - f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM] + f[dPMM] - f[dMPM];
 
-                                vy = f[DIR_0P0] - f[DIR_0M0] + f[DIR_PP0] - f[DIR_MM0] - f[DIR_PM0] + f[DIR_MP0] + f[DIR_0PP] - f[DIR_0MM] + f[DIR_0PM] - f[DIR_0MP] +
-                                     f[DIR_PPP] - f[DIR_MMP] - f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] + f[DIR_MPM];
+                                vy = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM] - f[d0MP] +
+                                     f[dPPP] - f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] + f[dMPM];
 
-                                vz = f[DIR_00P] - f[DIR_00M] + f[DIR_P0P] - f[DIR_M0M] - f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] - f[DIR_0MM] - f[DIR_0PM] + f[DIR_0MP] +
-                                     f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] - f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] - f[DIR_MPM];
+                                vz = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM] + f[d0MP] +
+                                     f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] - f[dMPM];
                                 //////////////////////////////////////////////////////////////////////////
                                 // compute average values
                                 //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.h b/src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.h
rename to src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.cpp
index 15a1c39cf268659d8cc8dec4b7633636049a019d..45ea8b5714775bca42b23dc14d96fa764129d962 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.cpp
@@ -123,7 +123,7 @@ void WriteBlocksSimulationObserver::collectData(real step)
                 // for (std::size_t i = 0; i<connectors.size(); i++)
                 //   if (connectors[i])
                 //   {
-                //      if (connectors[i]->getSendDir() == D3Q27System::DIR_0MM)
+                //      if (connectors[i]->getSendDir() == D3Q27System::d0MM)
                 //      {
 
                 //         flag = true;
@@ -146,7 +146,7 @@ void WriteBlocksSimulationObserver::collectData(real step)
                 // for (std::size_t i = 0; i<connectors.size(); i++)
                 //   if (connectors[i])
                 //   {
-                //      if (connectors[i]->getSendDir() == D3Q27System::DIR_0MM)
+                //      if (connectors[i]->getSendDir() == D3Q27System::d0MM)
                 //      {
 
                 //         flag = true;
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.h
rename to src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h
rename to src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.cpp
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.h
rename to src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp
index 945058c8e94b2d7780c4a03444c0848267b4b8f7..b95930db587687142c4339ad1b7b6edae9a815f9 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp
@@ -174,7 +174,7 @@ void WriteMQFromSelectionSimulationObserver::addDataMQ(SPtr<Block3D> block)
                         nodes.emplace_back(float(worldCoordinates[0]), float(worldCoordinates[1]),
                                            float(worldCoordinates[2]));
 
-                        distributions->getDistribution(f, ix1, ix2, ix3);
+                        distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                         calcMacros(f, rho, vx1, vx2, vx3);
 
                         if (UbMath::isNaN(rho) || UbMath::isInfinity(rho))
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.h
rename to src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
index f098a21f536ba9ee1c8786007fe5ef272fb674af..733d9d80672c483696b84b0b1ae14be660ed4866 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
@@ -209,7 +209,7 @@ void WriteMacroscopicQuantitiesPlusMassSimulationObserver::addDataMQ(SPtr<Block3
                     nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]),
                                                   float(worldCoordinates[2])));
 
-                    distributions->getDistribution(f, ix1, ix2, ix3);
+                    distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     calcMacros(f, rho, vx1, vx2, vx3);
                     //double press = D3Q27System::getPressure(f); // D3Q27System::calcPress(f,rho,vx1,vx2,vx3);
 
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h
rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
similarity index 99%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
index d5c80b4df56bc303361572e9114ab57efe995ecc..704f09ce2eb6ceae11d604ecd9cf22fc0d3fb83c 100644
--- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
@@ -209,7 +209,7 @@ void WriteMacroscopicQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block
                     nodes.push_back(UbTupleFloat3(real(worldCoordinates[0]), real(worldCoordinates[1]),
                                                   real(worldCoordinates[2])));
 
-                    distributions->getDistribution(f, ix1, ix2, ix3);
+                    distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     calcMacros(f, rho, vx1, vx2, vx3);
                     //double press = D3Q27System::getPressure(f); // D3Q27System::calcPress(f,rho,vx1,vx2,vx3);
 
diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h
rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h
diff --git a/src/cpu/VirtualFluidsCore/Utilities/ChangeRandomQs.hpp b/src/cpu/core/Utilities/ChangeRandomQs.hpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Utilities/ChangeRandomQs.hpp
rename to src/cpu/core/Utilities/ChangeRandomQs.hpp
diff --git a/src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.cpp b/src/cpu/core/Utilities/CheckpointConverter.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.cpp
rename to src/cpu/core/Utilities/CheckpointConverter.cpp
diff --git a/src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.h b/src/cpu/core/Utilities/CheckpointConverter.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.h
rename to src/cpu/core/Utilities/CheckpointConverter.h
diff --git a/src/cpu/VirtualFluidsCore/Utilities/MathUtil.hpp b/src/cpu/core/Utilities/MathUtil.hpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Utilities/MathUtil.hpp
rename to src/cpu/core/Utilities/MathUtil.hpp
diff --git a/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h b/src/cpu/core/Utilities/MemoryUtil.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
rename to src/cpu/core/Utilities/MemoryUtil.h
diff --git a/src/cpu/VirtualFluidsCore/Utilities/VoxelMatrixUtil.hpp b/src/cpu/core/Utilities/VoxelMatrixUtil.hpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Utilities/VoxelMatrixUtil.hpp
rename to src/cpu/core/Utilities/VoxelMatrixUtil.hpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h b/src/cpu/core/Visitors/Block3DVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h
rename to src/cpu/core/Visitors/Block3DVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp
rename to src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h
rename to src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.cpp b/src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.cpp
rename to src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.h b/src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.h
rename to src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.cpp b/src/cpu/core/Visitors/CheckRatioBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.cpp
rename to src/cpu/core/Visitors/CheckRatioBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.h b/src/cpu/core/Visitors/CheckRatioBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.h
rename to src/cpu/core/Visitors/CheckRatioBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp b/src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp
rename to src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h b/src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h
rename to src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.cpp b/src/cpu/core/Visitors/CreateTransmittersHelper.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.cpp
rename to src/cpu/core/Visitors/CreateTransmittersHelper.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.h b/src/cpu/core/Visitors/CreateTransmittersHelper.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.h
rename to src/cpu/core/Visitors/CreateTransmittersHelper.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.cpp b/src/cpu/core/Visitors/GenBlocksGridVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.cpp
rename to src/cpu/core/Visitors/GenBlocksGridVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h b/src/cpu/core/Visitors/GenBlocksGridVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h
rename to src/cpu/core/Visitors/GenBlocksGridVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h b/src/cpu/core/Visitors/Grid3DVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h
rename to src/cpu/core/Visitors/Grid3DVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp
similarity index 87%
rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
rename to src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp
index 0cc445b303b29897076080aa0146ae64cba11e28..daef0aa7eea9c0d5180845f5fc3bd88bb9f1d4ba 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp
@@ -251,41 +251,41 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D>
                real f_TNW  = - eps_new *((bz + cy)/(c36o1*o)) - f_TNE;
 
 
-               f[DIR_P00]    = f_E    + feq[DIR_P00];
-               f[DIR_M00]    = f_E    + feq[DIR_M00];
-               f[DIR_0P0]    = f_N    + feq[DIR_0P0];
-               f[DIR_0M0]    = f_N    + feq[DIR_0M0];
-               f[DIR_00P]    = f_T    + feq[DIR_00P];
-               f[DIR_00M]    = f_T    + feq[DIR_00M];
-               f[DIR_PP0]   = f_NE   + feq[DIR_PP0];
-               f[DIR_MM0]   = f_NE   + feq[DIR_MM0];
-               f[DIR_PM0]   = f_SE   + feq[DIR_PM0];
-               f[DIR_MP0]   = f_SE   + feq[DIR_MP0];
-               f[DIR_P0P]   = f_TE   + feq[DIR_P0P];
-               f[DIR_M0M]   = f_TE   + feq[DIR_M0M];
-               f[DIR_P0M]   = f_BE   + feq[DIR_P0M];
-               f[DIR_M0P]   = f_BE   + feq[DIR_M0P];
-               f[DIR_0PP]   = f_TN   + feq[DIR_0PP];
-               f[DIR_0MM]   = f_TN   + feq[DIR_0MM];
-               f[DIR_0PM]   = f_BN   + feq[DIR_0PM];
-               f[DIR_0MP]   = f_BN   + feq[DIR_0MP];
-               f[DIR_PPP]  = f_TNE  + feq[DIR_PPP];
-               f[DIR_MPP]  = f_TNW  + feq[DIR_MPP];
-               f[DIR_PMP]  = f_TSE  + feq[DIR_PMP];
-               f[DIR_MMP]  = f_TSW  + feq[DIR_MMP];
-               f[DIR_PPM]  = f_TSW  + feq[DIR_PPM];
-               f[DIR_MPM]  = f_TSE  + feq[DIR_MPM];
-               f[DIR_PMM]  = f_TNW  + feq[DIR_PMM];
-               f[DIR_MMM]  = f_TNE  + feq[DIR_MMM];
-               f[DIR_000] = f_ZERO + feq[DIR_000];
+               f[dP00]    = f_E    + feq[dP00];
+               f[dM00]    = f_E    + feq[dM00];
+               f[d0P0]    = f_N    + feq[d0P0];
+               f[d0M0]    = f_N    + feq[d0M0];
+               f[d00P]    = f_T    + feq[d00P];
+               f[d00M]    = f_T    + feq[d00M];
+               f[dPP0]   = f_NE   + feq[dPP0];
+               f[dMM0]   = f_NE   + feq[dMM0];
+               f[dPM0]   = f_SE   + feq[dPM0];
+               f[dMP0]   = f_SE   + feq[dMP0];
+               f[dP0P]   = f_TE   + feq[dP0P];
+               f[dM0M]   = f_TE   + feq[dM0M];
+               f[dP0M]   = f_BE   + feq[dP0M];
+               f[dM0P]   = f_BE   + feq[dM0P];
+               f[d0PP]   = f_TN   + feq[d0PP];
+               f[d0MM]   = f_TN   + feq[d0MM];
+               f[d0PM]   = f_BN   + feq[d0PM];
+               f[d0MP]   = f_BN   + feq[d0MP];
+               f[dPPP]  = f_TNE  + feq[dPPP];
+               f[dMPP]  = f_TNW  + feq[dMPP];
+               f[dPMP]  = f_TSE  + feq[dPMP];
+               f[dMMP]  = f_TSW  + feq[dMMP];
+               f[dPPM]  = f_TSW  + feq[dPPM];
+               f[dMPM]  = f_TSE  + feq[dMPM];
+               f[dPMM]  = f_TNW  + feq[dPMM];
+               f[dMMM]  = f_TNE  + feq[dMMM];
+               f[d000] = f_ZERO + feq[d000];
 
                //calcFeqsFct(f,rho,vx1,vx2,vx3);
-               distributions->setDistribution(f, ix1, ix2, ix3);
-               distributions->setDistributionInv(f, ix1, ix2, ix3);
+               distributions->setPostCollisionDistribution(f, ix1, ix2, ix3);
+               distributions->setPreCollisionDistribution(f, ix1, ix2, ix3);
 
                //distributions->swap();
-               //distributions->setDistribution(f, ix1, ix2, ix3);
-               //distributions->setDistributionInv(f, ix1, ix2, ix3);
+               //distributions->setPostCollisionDistribution(f, ix1, ix2, ix3);
+               //distributions->setPreCollisionDistribution(f, ix1, ix2, ix3);
                //distributions->swap();
 
             }
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h
rename to src/cpu/core/Visitors/InitDistributionsBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp
similarity index 97%
rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp
rename to src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp
index 3a51f5532532e4ac116221a551a1d4ad9bb5e66c..e3e058b2810719d0466afd1276c8aaa342d185a0 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp
@@ -202,7 +202,7 @@ void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<
                     // f_TSW = -eps_new *((ay + bx) / (36.*o)) - f_TNE; double f_TSE = -eps_new *((az + cx) / (36.*o)) -
                     // f_TNE; double f_TNW = -eps_new *((bz + cy) / (36.*o)) - f_TNE;
 
-                    // f[DIR_P00] = f_E + feq[DIR_P00];
+                    // f[dP00] = f_E + feq[dP00];
                     // f[W] = f_E + feq[W];
                     // f[N] = f_N + feq[N];
                     // f[S] = f_N + feq[S];
@@ -232,8 +232,8 @@ void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<
 
                     calcFeqsFct(f, rho, vx1, vx2, vx3);
 
-                    distributions->setDistribution(f, ix1, ix2, ix3);
-                    distributions->setDistributionInv(f, ix1, ix2, ix3);
+                    distributions->setPostCollisionDistribution(f, ix1, ix2, ix3);
+                    distributions->setPreCollisionDistribution(f, ix1, ix2, ix3);
                     dynamicPointerCast<InitDensityLBMKernel>(kernel)->setVelocity(ix1, ix2, ix3, vx1, vx2, vx3);
                 }
     }
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.h
rename to src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp
rename to src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.h b/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.h
rename to src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp
similarity index 98%
rename from src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp
rename to src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp
index 79c354e5f28724279447a4751ba81c3b6eba0958..00d0e9e7f26d6d50caa9ec5f46f7984ab7c3b1c8 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp
@@ -281,15 +281,15 @@ void InitThixotropyBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
                //initialize(h, x1, x2, x3, f1, f2, f3, conc, coords, dx, oDiffusion, false);
 
 
-               //distributionsf->setDistribution(f, ix1, ix2, ix3);
-               //distributionsf->setDistributionInv(f, ix1, ix2, ix3);
+               //distributionsf->setPostCollisionDistribution(f, ix1, ix2, ix3);
+               //distributionsf->setPreCollisionDistribution(f, ix1, ix2, ix3);
 
                real lambda = muLambda.Eval();
                
                calcFeqsFct(h,lambda,c0o1,c0o1,c0o1);
                
-               distributions->setDistribution(h, ix1, ix2, ix3);
-               distributions->setDistributionInv(h, ix1, ix2, ix3);
+               distributions->setPostCollisionDistribution(h, ix1, ix2, ix3);
+               distributions->setPreCollisionDistribution(h, ix1, ix2, ix3);
 
 
             }
@@ -429,7 +429,7 @@ void InitThixotropyBlockVisitor::checkFunction(mu::Parser fct)
 //   double f_TNW = -eps_new * ((bz + cy) / (36. * o)) - f_TNE;
 //
 //
-//   f[DIR_P00] = f_E + feq[DIR_P00];
+//   f[dP00] = f_E + feq[dP00];
 //   f[W] = f_E + feq[W];
 //   f[N] = f_N + feq[N];
 //   f[S] = f_N + feq[S];
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.h b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.h
rename to src/cpu/core/Visitors/InitThixotropyBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp b/src/cpu/core/Visitors/MetisPartitioningGridVisitor.cpp
similarity index 97%
rename from src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp
rename to src/cpu/core/Visitors/MetisPartitioningGridVisitor.cpp
index 30708d664deb405954f95a4aac58cd6c01d17153..26787a1530681d98f29469c95443503611ec62ce 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp
+++ b/src/cpu/core/Visitors/MetisPartitioningGridVisitor.cpp
@@ -135,7 +135,7 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelIntersected(SPtr<Grid3D>
             // the weights of the vertices are 2^level of grid (1, 2, 4, 8 .....) 1<<level
             metis.vwgt.push_back((idx_t)(1 << block->getLevel()));
 
-            for (int dir = (int)DIR_P00; dir <= numOfDirs; dir++) {
+            for (int dir = (int)dP00; dir <= numOfDirs; dir++) {
                 SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, block);
                 if (neighBlock) {
                     if (this->getPartitionCondition(neighBlock, level)) {
@@ -204,7 +204,7 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelBased(SPtr<Grid3D> grid,
             metis.xadj.push_back(edges);
             metis.vwgt.push_back(vertexWeight);
 
-            for (int dir = (int)DIR_P00; dir <= numOfDirs; dir++) {
+            for (int dir = (int)dP00; dir <= numOfDirs; dir++) {
                 SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, block);
                 if (neighBlock) {
                     if (this->getPartitionCondition(neighBlock, level)) {
@@ -262,11 +262,11 @@ int MetisPartitioningGridVisitor::getEdgeWeight(int dir)
     using namespace D3Q27System;
     using namespace vf::lbm::dir;
 
-    if (dir <= (int)DIR_00M) {
+    if (dir <= (int)d00M) {
         return 100;
-    } else if (dir >= (int)DIR_PP0 && dir <= (int)DIR_0MP) {
+    } else if (dir >= (int)dPP0 && dir <= (int)d0MP) {
         return 10;
-    } else if (dir >= (int)DIR_PPP) {
+    } else if (dir >= (int)dPPP) {
         return 1;
     }
 
diff --git a/src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h b/src/cpu/core/Visitors/MetisPartitioningGridVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h
rename to src/cpu/core/Visitors/MetisPartitioningGridVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.cpp b/src/cpu/core/Visitors/OverlapBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.cpp
rename to src/cpu/core/Visitors/OverlapBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.h b/src/cpu/core/Visitors/OverlapBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.h
rename to src/cpu/core/Visitors/OverlapBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.cpp b/src/cpu/core/Visitors/PQueuePartitioningGridVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.cpp
rename to src/cpu/core/Visitors/PQueuePartitioningGridVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.h b/src/cpu/core/Visitors/PQueuePartitioningGridVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.h
rename to src/cpu/core/Visitors/PQueuePartitioningGridVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.cpp b/src/cpu/core/Visitors/RatioBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.cpp
rename to src/cpu/core/Visitors/RatioBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.h b/src/cpu/core/Visitors/RatioBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.h
rename to src/cpu/core/Visitors/RatioBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.cpp b/src/cpu/core/Visitors/RatioSmoothBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.cpp
rename to src/cpu/core/Visitors/RatioSmoothBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.h b/src/cpu/core/Visitors/RatioSmoothBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.h
rename to src/cpu/core/Visitors/RatioSmoothBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.cpp b/src/cpu/core/Visitors/RefineAroundGbObjectHelper.cpp
similarity index 97%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.cpp
rename to src/cpu/core/Visitors/RefineAroundGbObjectHelper.cpp
index b2eefc859d26ef92d43bb7701a1eb96e6a7a6f4a..3245fa58c090d0cc790a40ddef69f13ab638cd16 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.cpp
+++ b/src/cpu/core/Visitors/RefineAroundGbObjectHelper.cpp
@@ -40,7 +40,7 @@ void RefineAroundGbObjectHelper::refine()
     grid->accept(overlapVisitor);
 
     std::vector<int> dirs;
-    for (int i = (int)DIR_P00; i <= (int)DIR_0MP; i++) {
+    for (int i = (int)dP00; i <= (int)d0MP; i++) {
         dirs.push_back(i);
     }
     SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.h b/src/cpu/core/Visitors/RefineAroundGbObjectHelper.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.h
rename to src/cpu/core/Visitors/RefineAroundGbObjectHelper.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp
rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h
rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp
rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.h b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.h
rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.cpp b/src/cpu/core/Visitors/RefineInterGbObjectsVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.cpp
rename to src/cpu/core/Visitors/RefineInterGbObjectsVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.h b/src/cpu/core/Visitors/RefineInterGbObjectsVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.h
rename to src/cpu/core/Visitors/RefineInterGbObjectsVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.cpp b/src/cpu/core/Visitors/RenumberBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.cpp
rename to src/cpu/core/Visitors/RenumberBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.h b/src/cpu/core/Visitors/RenumberBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.h
rename to src/cpu/core/Visitors/RenumberBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.cpp b/src/cpu/core/Visitors/RenumberGridVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.cpp
rename to src/cpu/core/Visitors/RenumberGridVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.h b/src/cpu/core/Visitors/RenumberGridVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.h
rename to src/cpu/core/Visitors/RenumberGridVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.cpp b/src/cpu/core/Visitors/SetBcBlocksBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetBcBlocksBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h b/src/cpu/core/Visitors/SetBcBlocksBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h
rename to src/cpu/core/Visitors/SetBcBlocksBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetConnectorsBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h
similarity index 99%
rename from src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
rename to src/cpu/core/Visitors/SetConnectorsBlockVisitor.h
index fcf2c93d233a5168f0ff4586244ee2088a7bf627..f54f3f210dd8a62a30de03f08948c7cd6de7ff7f 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
+++ b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h
@@ -128,7 +128,7 @@ void SetConnectorsBlockVisitor<T1, T2>::setSameLevelConnectors(SPtr<Grid3D> grid
                 } else if (blockRank != neighBlockRank && neighBlock->isActive()) {
                     setRemoteConnectors(block, neighBlock, dir);
 
-                    if (dir >= (int)DIR_P00 && dir <= (int)DIR_00M) {
+                    if (dir >= (int)dP00 && dir <= (int)d00M) {
                         int weight = block->getWeight(neighBlockRank);
                         weight++;
                         block->setWeight(neighBlockRank, weight);
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.cpp b/src/cpu/core/Visitors/SetForcingBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetForcingBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.h b/src/cpu/core/Visitors/SetForcingBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.h
rename to src/cpu/core/Visitors/SetForcingBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.cpp b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
similarity index 80%
rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
index bdf851025d380daa93db2477217a513002591ebb..c8d9fa7cb803ea922cd37914d2e51beeab685240 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
@@ -84,110 +84,110 @@ void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Gri
 		int fbx3 = block->getX3() << 1;
 		int level = block->getLevel() + 1;
 
-		if( block->hasInterpolationFlagCF(DIR_P00))
+		if( block->hasInterpolationFlagCF(dP00))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockNW = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_P00);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP00);
 		}
-		if( block->hasInterpolationFlagCF(DIR_M00))
+		if( block->hasInterpolationFlagCF(dM00))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_M00);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM00);
 		}
-		if( block->hasInterpolationFlagCF(DIR_0P0))
+		if( block->hasInterpolationFlagCF(d0P0))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0P0);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0P0);
 		}
-		if( block->hasInterpolationFlagCF(DIR_0M0))
+		if( block->hasInterpolationFlagCF(d0M0))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0M0);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0M0);
 		}
-		if( block->hasInterpolationFlagCF(DIR_00P))
+		if( block->hasInterpolationFlagCF(d00P))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_00P);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00P);
 		}
-		if( block->hasInterpolationFlagCF(DIR_00M))
+		if( block->hasInterpolationFlagCF(d00M))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_00M);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00M);
 		}
 
 		//////NE-NW-SE-SW
-		if( block->hasInterpolationFlagCF(DIR_PP0)&&!block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_P00))
+		if( block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+1,fbx3+0,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PP0);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPP0);
 		}
-		if( block->hasInterpolationFlagCF(DIR_MM0)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_0M0))
+		if( block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MM0);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMM0);
 		}
-		if( block->hasInterpolationFlagCF(DIR_PM0)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_0M0))
+		if( block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3+0,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PM0);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPM0);
 		}
-		if( block->hasInterpolationFlagCF(DIR_MP0)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_M00))
+		if( block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MP0);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMP0);
 		}
 
 		/////////TE-BW-BE-TW 1-0
-		if( block->hasInterpolationFlagCF(DIR_P0P)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_00P))
+		if( block->hasInterpolationFlagCF(dP0P)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00P))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3+1,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_P0P);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0P);
 		}
-		if( block->hasInterpolationFlagCF(DIR_M0M)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_00M))
+		if( block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00M))
 		{
 
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3,level);
@@ -195,140 +195,140 @@ void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Gri
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_M0M);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0M);
 		}
-		if( block->hasInterpolationFlagCF(DIR_P0M)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_00M))
+		if( block->hasInterpolationFlagCF(dP0M)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00M))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_P0M);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0M);
 		}
-		if( block->hasInterpolationFlagCF(DIR_M0P)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_00P))
+		if( block->hasInterpolationFlagCF(dM0P)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00P))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3+1,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_M0P);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0P);
 		}
 
 		//////TN-BS-BN-TS
-		if( block->hasInterpolationFlagCF(DIR_0PP)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_00P))
+		if( block->hasInterpolationFlagCF(d0PP)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00P))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0PP);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PP);
 		}
-		if( block->hasInterpolationFlagCF(DIR_0MM)&& !block->hasInterpolationFlagCF(DIR_0M0) && !block->hasInterpolationFlagCF(DIR_00M))
+		if( block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00M))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0MM);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MM);
 		}
-		if( block->hasInterpolationFlagCF(DIR_0PM)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_00M))
+		if( block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00M))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0PM);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PM);
 		}
-		if( block->hasInterpolationFlagCF(DIR_0MP)&& !block->hasInterpolationFlagCF(DIR_0M0) && !block->hasInterpolationFlagCF(DIR_00P))
+		if( block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00P))
 		{
 			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
 			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3+1, level);
 			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
 
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0MP);
+			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MP);
 		}
 
 
 
 
       //////corners
-      if (block->hasInterpolationFlagCF(DIR_PPP)&&!block->hasInterpolationFlagCF(DIR_P0P)&&!block->hasInterpolationFlagCF(DIR_0PP)&&!block->hasInterpolationFlagCF(DIR_PP0)&&!block->hasInterpolationFlagCF(DIR_00P)&&!block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_P00))
+      if (block->hasInterpolationFlagCF(dPPP)&&!block->hasInterpolationFlagCF(dP0P)&&!block->hasInterpolationFlagCF(d0PP)&&!block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d00P)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PPP);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPPP);
       }
-      if (block->hasInterpolationFlagCF(DIR_MMP)&&!block->hasInterpolationFlagCF(DIR_M0P)&&!block->hasInterpolationFlagCF(DIR_0MP)&& !block->hasInterpolationFlagCF(DIR_MM0)&& !block->hasInterpolationFlagCF(DIR_00P)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_0M0))
+      if (block->hasInterpolationFlagCF(dMMP)&&!block->hasInterpolationFlagCF(dM0P)&&!block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(d00P)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2, fbx3+1, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2, fbx3, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MMP);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMMP);
       }
-      if (block->hasInterpolationFlagCF(DIR_PMP)&&!block->hasInterpolationFlagCF(DIR_P0P)&&!block->hasInterpolationFlagCF(DIR_0MP)&& !block->hasInterpolationFlagCF(DIR_PM0)&& !block->hasInterpolationFlagCF(DIR_00P)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_0M0))
+      if (block->hasInterpolationFlagCF(dPMP)&&!block->hasInterpolationFlagCF(dP0P)&&!block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(d00P)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2, fbx3+0, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PMP);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPMP);
       }
-      if (block->hasInterpolationFlagCF(DIR_MPP)&&!block->hasInterpolationFlagCF(DIR_M0P)&&!block->hasInterpolationFlagCF(DIR_0PP)&& !block->hasInterpolationFlagCF(DIR_MP0)&& !block->hasInterpolationFlagCF(DIR_00P)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_M00))
+      if (block->hasInterpolationFlagCF(dMPP)&&!block->hasInterpolationFlagCF(dM0P)&&!block->hasInterpolationFlagCF(d0PP)&& !block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d00P)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MPP);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMPP);
       }
-      if (block->hasInterpolationFlagCF(DIR_PPM)&&!block->hasInterpolationFlagCF(DIR_P0M)&&!block->hasInterpolationFlagCF(DIR_0PM)&& !block->hasInterpolationFlagCF(DIR_PP0)&&!block->hasInterpolationFlagCF(DIR_00M)&&!block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_P00))
+      if (block->hasInterpolationFlagCF(dPPM)&&!block->hasInterpolationFlagCF(dP0M)&&!block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d00M)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PPM);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPPM);
       }
-      if (block->hasInterpolationFlagCF(DIR_MMM)&& !block->hasInterpolationFlagCF(DIR_0MM)&& !block->hasInterpolationFlagCF(DIR_M0M)&& !block->hasInterpolationFlagCF(DIR_MM0)&& !block->hasInterpolationFlagCF(DIR_00M)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_0M0))
+      if (block->hasInterpolationFlagCF(dMMM)&& !block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(d00M)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2, fbx3+0, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2, fbx3, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MMM);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMMM);
       }
-      if (block->hasInterpolationFlagCF(DIR_PMM)&& !block->hasInterpolationFlagCF(DIR_0MM)&& !block->hasInterpolationFlagCF(DIR_P0M)&& !block->hasInterpolationFlagCF(DIR_PM0)&& !block->hasInterpolationFlagCF(DIR_00M)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_0M0))
+      if (block->hasInterpolationFlagCF(dPMM)&& !block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(dP0M)&& !block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(d00M)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2, fbx3, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2, fbx3+0, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PMM);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPMM);
       }
-      if (block->hasInterpolationFlagCF(DIR_MPM)&& !block->hasInterpolationFlagCF(DIR_0PM)&& !block->hasInterpolationFlagCF(DIR_M0M)&& !block->hasInterpolationFlagCF(DIR_MP0)&& !block->hasInterpolationFlagCF(DIR_00M)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_M00))
+      if (block->hasInterpolationFlagCF(dMPM)&& !block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d00M)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00))
       {
          SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2+1, fbx3+0, level);
          SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level);
          SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
          SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
 
-         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MPM);
+         setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMPM);
       }
 
 	}
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.h b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.h
rename to src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.cpp b/src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp
similarity index 70%
rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp
index dbb85c0b848d2c5dc89e99f72d4091476eb31790..dcf71314768d8274941d5631906b972d0ab82561 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp
@@ -34,103 +34,103 @@ void SetInterpolationDirsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bl
             if (p_nblock) {
                 bool flagDir;
                 switch (dir) {
-                    case DIR_PP0:
-                        checkFlagDir(grid, DIR_P00, DIR_0P0, flagDir, ix1, ix2, ix3, level);
+                    case dPP0:
+                        checkFlagDir(grid, dP00, d0P0, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_MM0:
-                        checkFlagDir(grid, DIR_M00, DIR_0M0, flagDir, ix1, ix2, ix3, level);
+                    case dMM0:
+                        checkFlagDir(grid, dM00, d0M0, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_PM0:
-                        checkFlagDir(grid, DIR_P00, DIR_0M0, flagDir, ix1, ix2, ix3, level);
+                    case dPM0:
+                        checkFlagDir(grid, dP00, d0M0, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_MP0:
-                        checkFlagDir(grid, DIR_M00, DIR_0P0, flagDir, ix1, ix2, ix3, level);
+                    case dMP0:
+                        checkFlagDir(grid, dM00, d0P0, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_P0P:
-                        checkFlagDir(grid, DIR_P00, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case dP0P:
+                        checkFlagDir(grid, dP00, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_M0M:
-                        checkFlagDir(grid, DIR_M00, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case dM0M:
+                        checkFlagDir(grid, dM00, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_P0M:
-                        checkFlagDir(grid, DIR_P00, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case dP0M:
+                        checkFlagDir(grid, dP00, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_M0P:
-                        checkFlagDir(grid, DIR_M00, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case dM0P:
+                        checkFlagDir(grid, dM00, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_0PP:
-                        checkFlagDir(grid, DIR_0P0, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case d0PP:
+                        checkFlagDir(grid, d0P0, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_0MM:
-                        checkFlagDir(grid, DIR_0M0, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case d0MM:
+                        checkFlagDir(grid, d0M0, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_0PM:
-                        checkFlagDir(grid, DIR_0P0, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case d0PM:
+                        checkFlagDir(grid, d0P0, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_0MP:
-                        checkFlagDir(grid, DIR_0M0, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case d0MP:
+                        checkFlagDir(grid, d0M0, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_PPP:
-                        checkFlagDir(grid, DIR_P00, DIR_0P0, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case dPPP:
+                        checkFlagDir(grid, dP00, d0P0, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_MMP:
-                        checkFlagDir(grid, DIR_M00, DIR_0M0, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case dMMP:
+                        checkFlagDir(grid, dM00, d0M0, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_PMP:
-                        checkFlagDir(grid, DIR_P00, DIR_0M0, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case dPMP:
+                        checkFlagDir(grid, dP00, d0M0, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_MPP:
-                        checkFlagDir(grid, DIR_M00, DIR_0P0, DIR_00P, flagDir, ix1, ix2, ix3, level);
+                    case dMPP:
+                        checkFlagDir(grid, dM00, d0P0, d00P, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_PPM:
-                        checkFlagDir(grid, DIR_P00, DIR_0P0, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case dPPM:
+                        checkFlagDir(grid, dP00, d0P0, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_MMM:
-                        checkFlagDir(grid, DIR_M00, DIR_0M0, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case dMMM:
+                        checkFlagDir(grid, dM00, d0M0, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_PMM:
-                        checkFlagDir(grid, DIR_P00, DIR_0M0, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case dPMM:
+                        checkFlagDir(grid, dP00, d0M0, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
-                    case DIR_MPM:
-                        checkFlagDir(grid, DIR_M00, DIR_0P0, DIR_00M, flagDir, ix1, ix2, ix3, level);
+                    case dMPM:
+                        checkFlagDir(grid, dM00, d0P0, d00M, flagDir, ix1, ix2, ix3, level);
                         if (!flagDir)
                             continue;
                         break;
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.h b/src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.h
rename to src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp b/src/cpu/core/Visitors/SetKernelBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetKernelBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h b/src/cpu/core/Visitors/SetKernelBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
rename to src/cpu/core/Visitors/SetKernelBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp b/src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h b/src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h
rename to src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.cpp b/src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.h b/src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.h
rename to src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.cpp b/src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp
similarity index 89%
rename from src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.cpp
rename to src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp
index 04f758d396b726c67a5e9a5797a3d65d3d26a36b..797e8886e7825075cbff8ce9e762d0286dc81bea 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp
@@ -42,7 +42,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
     // int offset = 2;
     int offset = 3;
 
-    if (block->hasInterpolationFlag(DIR_P00)) {
+    if (block->hasInterpolationFlag(dP00)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -53,7 +53,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_M00)) {
+    if (block->hasInterpolationFlag(dM00)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -64,7 +64,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_0P0)) {
+    if (block->hasInterpolationFlag(d0P0)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = maxX2;
@@ -75,7 +75,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_0M0)) {
+    if (block->hasInterpolationFlag(d0M0)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -86,7 +86,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_00P)) {
+    if (block->hasInterpolationFlag(d00P)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -97,7 +97,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_00M)) {
+    if (block->hasInterpolationFlag(d00M)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -108,7 +108,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_PP0)) {
+    if (block->hasInterpolationFlag(dPP0)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -121,7 +121,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_MM0)) {
+    if (block->hasInterpolationFlag(dMM0)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -134,7 +134,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_PM0)) {
+    if (block->hasInterpolationFlag(dPM0)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -147,7 +147,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_MP0)) {
+    if (block->hasInterpolationFlag(dMP0)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -160,7 +160,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_P0P)) {
+    if (block->hasInterpolationFlag(dP0P)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -173,7 +173,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_M0M)) {
+    if (block->hasInterpolationFlag(dM0M)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -186,7 +186,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_P0M)) {
+    if (block->hasInterpolationFlag(dP0M)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -199,7 +199,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_M0P)) {
+    if (block->hasInterpolationFlag(dM0P)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -212,7 +212,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_0PP)) {
+    if (block->hasInterpolationFlag(d0PP)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = maxX2;
@@ -225,7 +225,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_0MM)) {
+    if (block->hasInterpolationFlag(d0MM)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -238,7 +238,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_0PM)) {
+    if (block->hasInterpolationFlag(d0PM)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = maxX2;
@@ -251,7 +251,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_0MP)) {
+    if (block->hasInterpolationFlag(d0MP)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -264,7 +264,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_PPP)) {
+    if (block->hasInterpolationFlag(dPPP)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -279,7 +279,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_MPP)) {
+    if (block->hasInterpolationFlag(dMPP)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -294,7 +294,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_PMP)) {
+    if (block->hasInterpolationFlag(dPMP)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -309,7 +309,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_MMP)) {
+    if (block->hasInterpolationFlag(dMMP)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -324,7 +324,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             startix3 = startix3 - offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_PPM)) {
+    if (block->hasInterpolationFlag(dPPM)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -339,7 +339,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_MPM)) {
+    if (block->hasInterpolationFlag(dMPM)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -354,7 +354,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_PMM)) {
+    if (block->hasInterpolationFlag(dPMM)) {
         int startix1 = maxX1;
         int endix1   = maxX1;
         if (block->hasInterpolationFlagCF())
@@ -369,7 +369,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
             endix3 = endix3 + offset;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlag(DIR_MMM)) {
+    if (block->hasInterpolationFlag(dMMM)) {
         int startix1 = minX1;
         int endix1   = minX1;
         if (block->hasInterpolationFlagCF())
@@ -397,7 +397,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
     maxX2 = static_cast<int>(bcMatrix->getNX2()) - 1 - ll;
     maxX3 = static_cast<int>(bcMatrix->getNX3()) - 1 - ll;
 
-    if (block->hasInterpolationFlagFC(DIR_P00)) {
+    if (block->hasInterpolationFlagFC(dP00)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -406,7 +406,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_M00)) {
+    if (block->hasInterpolationFlagFC(dM00)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = minX2;
@@ -415,7 +415,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_0P0)) {
+    if (block->hasInterpolationFlagFC(d0P0)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = maxX2 - offset2;
@@ -424,7 +424,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_0M0)) {
+    if (block->hasInterpolationFlagFC(d0M0)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -433,7 +433,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_00P)) {
+    if (block->hasInterpolationFlagFC(d00P)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -442,7 +442,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_00M)) {
+    if (block->hasInterpolationFlagFC(d00M)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -451,7 +451,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_PP0)) {
+    if (block->hasInterpolationFlagFC(dPP0)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = maxX2 - offset2;
@@ -460,7 +460,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_MM0)) {
+    if (block->hasInterpolationFlagFC(dMM0)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = minX2;
@@ -469,7 +469,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_PM0)) {
+    if (block->hasInterpolationFlagFC(dPM0)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -478,7 +478,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_MP0)) {
+    if (block->hasInterpolationFlagFC(dMP0)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = maxX2 - offset2;
@@ -487,7 +487,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_P0P)) {
+    if (block->hasInterpolationFlagFC(dP0P)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -496,7 +496,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_M0M)) {
+    if (block->hasInterpolationFlagFC(dM0M)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = minX2;
@@ -505,7 +505,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_P0M)) {
+    if (block->hasInterpolationFlagFC(dP0M)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -514,7 +514,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_M0P)) {
+    if (block->hasInterpolationFlagFC(dM0P)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = minX2;
@@ -523,7 +523,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_0PP)) {
+    if (block->hasInterpolationFlagFC(d0PP)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = maxX2 - offset2;
@@ -532,7 +532,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_0MM)) {
+    if (block->hasInterpolationFlagFC(d0MM)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -541,7 +541,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_0PM)) {
+    if (block->hasInterpolationFlagFC(d0PM)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = maxX2 - offset2;
@@ -550,7 +550,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_0MP)) {
+    if (block->hasInterpolationFlagFC(d0MP)) {
         int startix1 = minX1;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -559,7 +559,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_PPP)) {
+    if (block->hasInterpolationFlagFC(dPPP)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = maxX2 - offset2;
@@ -568,7 +568,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_MPP)) {
+    if (block->hasInterpolationFlagFC(dMPP)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = maxX2 - offset2;
@@ -577,7 +577,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_PMP)) {
+    if (block->hasInterpolationFlagFC(dPMP)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -586,7 +586,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_MMP)) {
+    if (block->hasInterpolationFlagFC(dMMP)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = minX2;
@@ -595,7 +595,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = maxX3;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_PPM)) {
+    if (block->hasInterpolationFlagFC(dPPM)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = maxX2 - offset2;
@@ -604,7 +604,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_MPM)) {
+    if (block->hasInterpolationFlagFC(dMPM)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = maxX2 - offset2;
@@ -613,7 +613,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_PMM)) {
+    if (block->hasInterpolationFlagFC(dPMM)) {
         int startix1 = maxX1 - offset2;
         int endix1   = maxX1;
         int startix2 = minX2;
@@ -622,7 +622,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
         int endix3   = minX3 + offset2;
         this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix);
     }
-    if (block->hasInterpolationFlagFC(DIR_MMM)) {
+    if (block->hasInterpolationFlagFC(dMMM)) {
         int startix1 = minX1;
         int endix1   = minX1 + offset2;
         int startix2 = minX2;
@@ -635,10 +635,10 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block
     // invert scaleCF blocks
     if (block->hasInterpolationFlagCF()) {
         if (block->hasInterpolationFlagFC() && twoTypeOfConnectorsCheck) {
-            for (int i = (int)DIR_P00; i <= (int)DIR_MMM; i++) {
+            for (int i = (int)dP00; i <= (int)dMMM; i++) {
                 UBLOG(logINFO, "FC in dir=" << i << " " << block->hasInterpolationFlagFC(i));
             }
-            for (int i = (int)DIR_P00; i <= (int)DIR_MMM; i++) {
+            for (int i = (int)dP00; i <= (int)dMMM; i++) {
                 UBLOG(logINFO, "CF in dir=" << i << " " << block->hasInterpolationFlagCF(i));
             }
             throw UbException(UB_EXARGS, "block " + block->toString() + " has CF and FC");
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.h b/src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.h
rename to src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.cpp b/src/cpu/core/Visitors/SpongeLayerBlockVisitor.cpp
similarity index 96%
rename from src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.cpp
rename to src/cpu/core/Visitors/SpongeLayerBlockVisitor.cpp
index 520c7cfa30f582438b188643d8f913fd6ce2bd0b..01bb35cd52b78231a82651575006d7682afbdda5 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/SpongeLayerBlockVisitor.cpp
@@ -75,22 +75,22 @@ void SpongeLayerBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
 
             real newCollFactor;
 
-            if (dir == DIR_P00) {
+            if (dir == dP00) {
                 int ibX1      = block->getX1();
                 int ibMax     = val<1>(ixMax) - val<1>(ixMin) + 1;
                 real index  = (real)(ibX1 - val<1>(ixMin) + 1);
                 newCollFactor = oldCollFactor - (oldCollFactor - c1o1) / (real)(ibMax)*index;
-            } else if (dir == DIR_M00) {
+            } else if (dir == dM00) {
                 int ibX1      = block->getX1();
                 int ibMax     = val<1>(ixMax) - val<1>(ixMin) + 1;
                 real index  = (real)(ibX1 - val<1>(ixMin) + 1);
                 newCollFactor = (oldCollFactor - c1o1) / (real)(ibMax)*index;
-            } else if (dir == DIR_00P) {
+            } else if (dir == d00P) {
                 int ibX3      = block->getX3();
                 int ibMax     = val<3>(ixMax) - val<3>(ixMin) + 1;
                 real index  = (real)(ibX3 - val<3>(ixMin) + 1);
                 newCollFactor = oldCollFactor - (oldCollFactor - c1o1) / (real)(ibMax)*index;
-            } else if (dir == DIR_00M) {
+            } else if (dir == d00M) {
                 int ibX3      = block->getX3();
                 int ibMax     = val<3>(ixMax) - val<3>(ixMin) + 1;
                 real index  = (real)(ibX3 - val<3>(ixMin) + 1);
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.h b/src/cpu/core/Visitors/SpongeLayerBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.h
rename to src/cpu/core/Visitors/SpongeLayerBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.cpp b/src/cpu/core/Visitors/ViscosityBlockVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.cpp
rename to src/cpu/core/Visitors/ViscosityBlockVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.h b/src/cpu/core/Visitors/ViscosityBlockVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.h
rename to src/cpu/core/Visitors/ViscosityBlockVisitor.h
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.cpp b/src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.cpp
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.cpp
rename to src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.cpp
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.h b/src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.h
similarity index 100%
rename from src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.h
rename to src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.h
diff --git a/src/cpu/simulationconfig/CMakeLists.txt b/src/cpu/simulationconfig/CMakeLists.txt
index 255c83dfc2bff125e15f67e98080a76017abe6e9..9fb244cbb3943a60950d1fff21947bc93cf3648b 100644
--- a/src/cpu/simulationconfig/CMakeLists.txt
+++ b/src/cpu/simulationconfig/CMakeLists.txt
@@ -1,5 +1,5 @@
 
-vf_add_library(PUBLIC_LINK VirtualFluidsCore basics muparser lbm)
+vf_add_library(PUBLIC_LINK cpu_core basics muparser lbm)
 
 set_target_properties(simulationconfig PROPERTIES POSITION_INDEPENDENT_CODE ON)
 
diff --git a/src/cpu/simulationconfig/Simulation.cpp b/src/cpu/simulationconfig/Simulation.cpp
index 4b7d52286995ed9b5eadd5827d586b49e9f222a4..35fca4a47253c2ff50b93ea341409792a4b7f6a0 100644
--- a/src/cpu/simulationconfig/Simulation.cpp
+++ b/src/cpu/simulationconfig/Simulation.cpp
@@ -118,7 +118,7 @@ void CPUSimulation::run()
 
     auto metisVisitor = std::make_shared<MetisPartitioningGridVisitor>(communicator,
                                                                        MetisPartitioningGridVisitor::LevelBased,
-                                                                       vf::lbm::dir::DIR_00M, MetisPartitioner::RECURSIVE);
+                                                                       vf::lbm::dir::d00M, MetisPartitioner::RECURSIVE);
 
     InteractorsHelper intHelper(grid, metisVisitor);
     for (auto const &interactor : interactors)
diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h b/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h
index 624b3722a1c909ba26063b49565779b924d34adc..c4232335a071a34e63292e240139d7bf84bdf28b 100644
--- a/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h
+++ b/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h
@@ -106,9 +106,9 @@ protected:
         { SideType::MZ, { 0.0, 0.0, NEGATIVE_DIR } }, { SideType::PZ, { 0.0, 0.0, POSITIVE_DIR } }
     };
     const std::map<SideType, size_t> sideToD3Q27 = {
-        { SideType::MX, vf::lbm::dir::DIR_M00 }, { SideType::PX, vf::lbm::dir::DIR_P00 },
-        { SideType::MY, vf::lbm::dir::DIR_0M0 }, { SideType::PY, vf::lbm::dir::DIR_0P0 },
-        { SideType::MZ, vf::lbm::dir::DIR_00M }, { SideType::PZ, vf::lbm::dir::DIR_00P }
+        { SideType::MX, vf::lbm::dir::dM00 }, { SideType::PX, vf::lbm::dir::dP00 },
+        { SideType::MY, vf::lbm::dir::d0M0 }, { SideType::PY, vf::lbm::dir::d0P0 },
+        { SideType::MZ, vf::lbm::dir::d00M }, { SideType::PZ, vf::lbm::dir::d00P }
     };
 };
 
diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp b/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp
index 36a286a8766db4af7e109eb3f8d47add401779f9..31a7edea02d5282cb109f907e10006952e5c4ef5 100644
--- a/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp
+++ b/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp
@@ -134,9 +134,9 @@ TEST_F(SideTestBC, setQs2D_whenSettingPX_setAllQsNormalToBC)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(11, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PP0] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPP0] = 0.5;
+    expectedQs[dPM0] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -151,8 +151,8 @@ TEST_F(SideTestBC, setQs2D_givenPYhasBeenSet_thenSetPX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(11, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPM0] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -167,15 +167,15 @@ TEST_F(SideTestBC, setQs3D_givenMXhasBeenSet_thenSetPX_setAllQsNormalToPX)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PP0] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPP0] = 0.5;
+    expectedQs[dPM0] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dPMP] = 0.5;
+    expectedQs[dPPM] = 0.5;
+    expectedQs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 
     // node already has BC in MX direction, but this does not change anything
@@ -205,15 +205,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingPX_setAllQsNormalToBC)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PP0] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPP0] = 0.5;
+    expectedQs[dPM0] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dPMP] = 0.5;
+    expectedQs[dPPM] = 0.5;
+    expectedQs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -227,12 +227,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetPX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPM0] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dPMP] = 0.5;
+    expectedQs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -246,12 +246,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetPX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PP0] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPP0] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dPPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -265,12 +265,12 @@ TEST_F(SideTestBC, setQs3D_givenPZhasBeenSet_thenSetPX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PP0] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPP0] = 0.5;
+    expectedQs[dPM0] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dPPM] = 0.5;
+    expectedQs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -284,12 +284,12 @@ TEST_F(SideTestBC, setQs3D_givenMZhasBeenSet_thenSetPX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_P00] = 0.5;
-    expectedQs[DIR_PP0] = 0.5;
-    expectedQs[DIR_PM0] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
+    expectedQs[dP00] = 0.5;
+    expectedQs[dPP0] = 0.5;
+    expectedQs[dPM0] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dPMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -304,10 +304,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandMZhaveBeenSet_thenSetPX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_P00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PM0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PMP] = 0.5;
+    expectedQsForTwoPreviousBCs[dP00] = 0.5;
+    expectedQsForTwoPreviousBCs[dPM0] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0P] = 0.5;
+    expectedQsForTwoPreviousBCs[dPMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -322,10 +322,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPZhaveBeenSet_thenSetPX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_P00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PM0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PMM] = 0.5;
+    expectedQsForTwoPreviousBCs[dP00] = 0.5;
+    expectedQsForTwoPreviousBCs[dPM0] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0M] = 0.5;
+    expectedQsForTwoPreviousBCs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -340,10 +340,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPZhaveBeenSet_thenSetPX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_P00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PP0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PPM] = 0.5;
+    expectedQsForTwoPreviousBCs[dP00] = 0.5;
+    expectedQsForTwoPreviousBCs[dPP0] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0M] = 0.5;
+    expectedQsForTwoPreviousBCs[dPPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -358,10 +358,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMZhaveBeenSet_thenSetPX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_P00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PP0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PPP] = 0.5;
+    expectedQsForTwoPreviousBCs[dP00] = 0.5;
+    expectedQsForTwoPreviousBCs[dPP0] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0P] = 0.5;
+    expectedQsForTwoPreviousBCs[dPPP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -374,15 +374,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingMX_setAllQsNormalToBC)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_M00] = 0.5;
-    expectedQs[DIR_MP0] = 0.5;
-    expectedQs[DIR_MM0] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_MPP] = 0.5;
-    expectedQs[DIR_MMP] = 0.5;
-    expectedQs[DIR_MPM] = 0.5;
-    expectedQs[DIR_MMM] = 0.5;
+    expectedQs[dM00] = 0.5;
+    expectedQs[dMP0] = 0.5;
+    expectedQs[dMM0] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[dMPP] = 0.5;
+    expectedQs[dMMP] = 0.5;
+    expectedQs[dMPM] = 0.5;
+    expectedQs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -396,12 +396,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetMX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_M00] = 0.5;
-    expectedQs[DIR_MM0] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_MMP] = 0.5;
-    expectedQs[DIR_MMM] = 0.5;
+    expectedQs[dM00] = 0.5;
+    expectedQs[dMM0] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[dMMP] = 0.5;
+    expectedQs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -415,12 +415,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetMX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_M00] = 0.5;
-    expectedQs[DIR_MP0] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_MPP] = 0.5;
-    expectedQs[DIR_MPM] = 0.5;
+    expectedQs[dM00] = 0.5;
+    expectedQs[dMP0] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[dMPP] = 0.5;
+    expectedQs[dMPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -434,12 +434,12 @@ TEST_F(SideTestBC, setQs3D_givenPZhasBeenSet_thenSetMX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_M00] = 0.5;
-    expectedQs[DIR_MP0] = 0.5;
-    expectedQs[DIR_MM0] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_MPM] = 0.5;
-    expectedQs[DIR_MMM] = 0.5;
+    expectedQs[dM00] = 0.5;
+    expectedQs[dMP0] = 0.5;
+    expectedQs[dMM0] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[dMPM] = 0.5;
+    expectedQs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -453,12 +453,12 @@ TEST_F(SideTestBC, setQs3D_givenMZhasBeenSet_thenSetMX_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_M00] = 0.5;
-    expectedQs[DIR_MP0] = 0.5;
-    expectedQs[DIR_MM0] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_MPP] = 0.5;
-    expectedQs[DIR_MMP] = 0.5;
+    expectedQs[dM00] = 0.5;
+    expectedQs[dMP0] = 0.5;
+    expectedQs[dMM0] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[dMPP] = 0.5;
+    expectedQs[dMMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -473,10 +473,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandMZhaveBeenSet_thenSetMX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_M00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MM0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MMP] = 0.5;
+    expectedQsForTwoPreviousBCs[dM00] = 0.5;
+    expectedQsForTwoPreviousBCs[dMM0] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0P] = 0.5;
+    expectedQsForTwoPreviousBCs[dMMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -491,10 +491,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPZhaveBeenSet_thenSetMX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_M00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MM0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MMM] = 0.5;
+    expectedQsForTwoPreviousBCs[dM00] = 0.5;
+    expectedQsForTwoPreviousBCs[dMM0] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0M] = 0.5;
+    expectedQsForTwoPreviousBCs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -509,10 +509,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPZhaveBeenSet_thenSetMX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_M00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MP0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MPM] = 0.5;
+    expectedQsForTwoPreviousBCs[dM00] = 0.5;
+    expectedQsForTwoPreviousBCs[dMP0] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0M] = 0.5;
+    expectedQsForTwoPreviousBCs[dMPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -527,10 +527,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMZhaveBeenSet_thenSetMX_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_M00] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MP0] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MPP] = 0.5;
+    expectedQsForTwoPreviousBCs[dM00] = 0.5;
+    expectedQsForTwoPreviousBCs[dMP0] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0P] = 0.5;
+    expectedQsForTwoPreviousBCs[dMPP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -543,15 +543,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingMZ_setAllQsNormalToBC)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00M] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_0PM] = 0.5;
-    expectedQs[DIR_0MM] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
-    expectedQs[DIR_MPM] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
-    expectedQs[DIR_MMM] = 0.5;
+    expectedQs[d00M] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[d0PM] = 0.5;
+    expectedQs[d0MM] = 0.5;
+    expectedQs[dPPM] = 0.5;
+    expectedQs[dMPM] = 0.5;
+    expectedQs[dPMM] = 0.5;
+    expectedQs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -565,12 +565,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetMZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00M] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_0PM] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
-    expectedQs[DIR_MPM] = 0.5;
+    expectedQs[d00M] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[d0PM] = 0.5;
+    expectedQs[dPPM] = 0.5;
+    expectedQs[dMPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -584,12 +584,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetMZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00M] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_0MM] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
-    expectedQs[DIR_MMM] = 0.5;
+    expectedQs[d00M] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[d0MM] = 0.5;
+    expectedQs[dPMM] = 0.5;
+    expectedQs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -603,12 +603,12 @@ TEST_F(SideTestBC, setQs3D_givenPXhasBeenSet_thenSetMZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00M] = 0.5;
-    expectedQs[DIR_M0M] = 0.5;
-    expectedQs[DIR_0PM] = 0.5;
-    expectedQs[DIR_0MM] = 0.5;
-    expectedQs[DIR_MPM] = 0.5;
-    expectedQs[DIR_MMM] = 0.5;
+    expectedQs[d00M] = 0.5;
+    expectedQs[dM0M] = 0.5;
+    expectedQs[d0PM] = 0.5;
+    expectedQs[d0MM] = 0.5;
+    expectedQs[dMPM] = 0.5;
+    expectedQs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -622,12 +622,12 @@ TEST_F(SideTestBC, setQs3D_givenMXhasBeenSet_thenSetMZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00M] = 0.5;
-    expectedQs[DIR_P0M] = 0.5;
-    expectedQs[DIR_0PM] = 0.5;
-    expectedQs[DIR_0MM] = 0.5;
-    expectedQs[DIR_PPM] = 0.5;
-    expectedQs[DIR_PMM] = 0.5;
+    expectedQs[d00M] = 0.5;
+    expectedQs[dP0M] = 0.5;
+    expectedQs[d0PM] = 0.5;
+    expectedQs[d0MM] = 0.5;
+    expectedQs[dPPM] = 0.5;
+    expectedQs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -642,10 +642,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0PM] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MPM] = 0.5;
+    expectedQsForTwoPreviousBCs[d00M] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0M] = 0.5;
+    expectedQsForTwoPreviousBCs[d0PM] = 0.5;
+    expectedQsForTwoPreviousBCs[dMPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -660,10 +660,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0PM] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PPM] = 0.5;
+    expectedQsForTwoPreviousBCs[d00M] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0M] = 0.5;
+    expectedQsForTwoPreviousBCs[d0PM] = 0.5;
+    expectedQsForTwoPreviousBCs[dPPM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -678,10 +678,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0MM] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MMM] = 0.5;
+    expectedQsForTwoPreviousBCs[d00M] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0M] = 0.5;
+    expectedQsForTwoPreviousBCs[d0MM] = 0.5;
+    expectedQsForTwoPreviousBCs[dMMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -696,10 +696,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandMXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0MM] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PMM] = 0.5;
+    expectedQsForTwoPreviousBCs[d00M] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0M] = 0.5;
+    expectedQsForTwoPreviousBCs[d0MM] = 0.5;
+    expectedQsForTwoPreviousBCs[dPMM] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -712,15 +712,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingPZ_setAllQsNormalToBC)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00P] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_0PP] = 0.5;
-    expectedQs[DIR_0MP] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_MPP] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
-    expectedQs[DIR_MMP] = 0.5;
+    expectedQs[d00P] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[d0PP] = 0.5;
+    expectedQs[d0MP] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dMPP] = 0.5;
+    expectedQs[dPMP] = 0.5;
+    expectedQs[dMMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -734,12 +734,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetPZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00P] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_0PP] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_MPP] = 0.5;
+    expectedQs[d00P] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[d0PP] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dMPP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -753,12 +753,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetPZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00P] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_0MP] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
-    expectedQs[DIR_MMP] = 0.5;
+    expectedQs[d00P] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[d0MP] = 0.5;
+    expectedQs[dPMP] = 0.5;
+    expectedQs[dMMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -772,12 +772,12 @@ TEST_F(SideTestBC, setQs3D_givenPXhasBeenSet_thenSetPZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00P] = 0.5;
-    expectedQs[DIR_M0P] = 0.5;
-    expectedQs[DIR_0PP] = 0.5;
-    expectedQs[DIR_0MP] = 0.5;
-    expectedQs[DIR_MPP] = 0.5;
-    expectedQs[DIR_MMP] = 0.5;
+    expectedQs[d00P] = 0.5;
+    expectedQs[dM0P] = 0.5;
+    expectedQs[d0PP] = 0.5;
+    expectedQs[d0MP] = 0.5;
+    expectedQs[dMPP] = 0.5;
+    expectedQs[dMMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -791,12 +791,12 @@ TEST_F(SideTestBC, setQs3D_givenMXhasBeenSet_thenSetPZ_doNotSetSameQsAgain)
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQs(27, -1);
-    expectedQs[DIR_00P] = 0.5;
-    expectedQs[DIR_P0P] = 0.5;
-    expectedQs[DIR_0PP] = 0.5;
-    expectedQs[DIR_0MP] = 0.5;
-    expectedQs[DIR_PPP] = 0.5;
-    expectedQs[DIR_PMP] = 0.5;
+    expectedQs[d00P] = 0.5;
+    expectedQs[dP0P] = 0.5;
+    expectedQs[d0PP] = 0.5;
+    expectedQs[d0MP] = 0.5;
+    expectedQs[dPPP] = 0.5;
+    expectedQs[dPMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQs));
 }
 
@@ -811,10 +811,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0PP] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MPP] = 0.5;
+    expectedQsForTwoPreviousBCs[d00P] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0P] = 0.5;
+    expectedQsForTwoPreviousBCs[d0PP] = 0.5;
+    expectedQsForTwoPreviousBCs[dMPP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -829,10 +829,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0PP] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PPP] = 0.5;
+    expectedQsForTwoPreviousBCs[d00P] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0P] = 0.5;
+    expectedQsForTwoPreviousBCs[d0PP] = 0.5;
+    expectedQsForTwoPreviousBCs[dPPP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -847,10 +847,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0MP] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_MMP] = 0.5;
+    expectedQsForTwoPreviousBCs[d00P] = 0.5;
+    expectedQsForTwoPreviousBCs[dM0P] = 0.5;
+    expectedQsForTwoPreviousBCs[d0MP] = 0.5;
+    expectedQsForTwoPreviousBCs[dMMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
 
@@ -865,9 +865,9 @@ TEST_F(SideTestBC, setQs3D_givenPYandMXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain
     auto actualQs = bc->getQs()[0];
 
     std::vector<real> expectedQsForTwoPreviousBCs(27, -1);
-    expectedQsForTwoPreviousBCs[DIR_00P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_0MP] = 0.5;
-    expectedQsForTwoPreviousBCs[DIR_PMP] = 0.5;
+    expectedQsForTwoPreviousBCs[d00P] = 0.5;
+    expectedQsForTwoPreviousBCs[dP0P] = 0.5;
+    expectedQsForTwoPreviousBCs[d0MP] = 0.5;
+    expectedQsForTwoPreviousBCs[dPMP] = 0.5;
     EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs));
 }
diff --git a/src/gpu/GridGenerator/grid/GridInterface.cpp b/src/gpu/GridGenerator/grid/GridInterface.cpp
index 53613bf4ab34f6e9d2e843c61431cc0a2e7be154..7a0e1cf4a0cd7a8a87982f38056a601a4a41cba7 100644
--- a/src/gpu/GridGenerator/grid/GridInterface.cpp
+++ b/src/gpu/GridGenerator/grid/GridInterface.cpp
@@ -460,7 +460,7 @@ uint GridInterface::findOffsetBaseToNested(const uint& indexOnCoarseGrid, GridIm
     Cell cell(x, y, z, coarseGrid->getDelta());
 
     if( coarseGrid->cellContainsOnly( cell, FLUID, FLUID_CFC ) ){
-        this->bn.offset[ interfaceIndex ] = dir::DIR_000;
+        this->bn.offset[ interfaceIndex ] = dir::d000;
         return indexOnCoarseGrid;
     }
 
@@ -495,7 +495,7 @@ uint GridInterface::findOffsetNestedToBase(const uint& indexOnFineGrid, GridImp*
     Cell cell(x, y, z, fineGrid->getDelta());
 
     if( fineGrid->cellContainsOnly( cell, FLUID, FLUID_FCF ) ){
-        this->nb.offset[ interfaceIndex ] = dir::DIR_000;
+        this->nb.offset[ interfaceIndex ] = dir::d000;
         return indexOnFineGrid;
     }
 
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
index 31d2e2f8a927e7141d80a55f4164dfcb0f52a8e0..d21ec338dabc4207ddbb6d83b8b63b8d2facd689 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
@@ -49,148 +49,148 @@ Distribution DistributionHelper::getDistribution27()
     d27.dirs.resize((ENDDIR + 1) * DIMENSION);
 
     d27.directions.resize(ENDDIR + 1);
-    d27.directions[DIR_P00] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z);
-    d27.directions[DIR_M00] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z);
-    d27.directions[DIR_0P0] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z);
-    d27.directions[DIR_0M0] = Direction(DIR_27_S_X, DIR_27_S_Y, DIR_27_S_Z);
-    d27.directions[DIR_00P] = Direction(DIR_27_T_X, DIR_27_T_Y, DIR_27_T_Z);
-    d27.directions[DIR_00M] = Direction(DIR_27_B_X, DIR_27_B_Y, DIR_27_B_Z);
-
-    d27.directions[DIR_PP0] = Direction(DIR_27_NE_X, DIR_27_NE_Y, DIR_27_NE_Z);
-    d27.directions[DIR_MM0] = Direction(DIR_27_SW_X, DIR_27_SW_Y, DIR_27_SW_Z);
-    d27.directions[DIR_PM0] = Direction(DIR_27_SE_X, DIR_27_SE_Y, DIR_27_SE_Z);
-    d27.directions[DIR_MP0] = Direction(DIR_27_NW_X, DIR_27_NW_Y, DIR_27_NW_Z);
-
-    d27.directions[DIR_P0P] = Direction(DIR_27_TE_X, DIR_27_TE_Y, DIR_27_TE_Z);
-    d27.directions[DIR_M0M] = Direction(DIR_27_BW_X, DIR_27_BW_Y, DIR_27_BW_Z);
-    d27.directions[DIR_P0M] = Direction(DIR_27_BE_X, DIR_27_BE_Y, DIR_27_BE_Z);
-    d27.directions[DIR_M0P] = Direction(DIR_27_TW_X, DIR_27_TW_Y, DIR_27_TW_Z);
-
-    d27.directions[DIR_0PP] = Direction(DIR_27_TN_X, DIR_27_TN_Y, DIR_27_TN_Z);
-    d27.directions[DIR_0MM] = Direction(DIR_27_BS_X, DIR_27_BS_Y, DIR_27_BS_Z);
-    d27.directions[DIR_0PM] = Direction(DIR_27_BN_X, DIR_27_BN_Y, DIR_27_BN_Z);
-    d27.directions[DIR_0MP] = Direction(DIR_27_TS_X, DIR_27_TS_Y, DIR_27_TS_Z);
-
-    d27.directions[DIR_000] = Direction(DIR_27_REST_X, DIR_27_REST_Y, DIR_27_REST_Z);
-
-    d27.directions[DIR_PPP] = Direction(DIR_27_TNE_X, DIR_27_TNE_Y, DIR_27_TNE_Z);
-    d27.directions[DIR_MPP] = Direction(DIR_27_TNW_X, DIR_27_TNW_Y, DIR_27_TNW_Z);
-    d27.directions[DIR_PMP] = Direction(DIR_27_TSE_X, DIR_27_TSE_Y, DIR_27_TSE_Z);
-    d27.directions[DIR_MMP] = Direction(DIR_27_TSW_X, DIR_27_TSW_Y, DIR_27_TSW_Z);
-
-    d27.directions[DIR_PPM] = Direction(DIR_27_BNE_X, DIR_27_BNE_Y, DIR_27_BNE_Z);
-    d27.directions[DIR_MPM]= Direction(DIR_27_BNW_X, DIR_27_BNW_Y, DIR_27_BNW_Z);
-    d27.directions[DIR_PMM]= Direction(DIR_27_BSE_X, DIR_27_BSE_Y, DIR_27_BSE_Z);
-    d27.directions[DIR_MMM] = Direction(DIR_27_BSW_X, DIR_27_BSW_Y, DIR_27_BSW_Z);
-
-
-    d27.dirs[DIR_P00 * 3    ] = DIR_27_E_X;
-    d27.dirs[DIR_P00 * 3 + 1] = DIR_27_E_Y;
-    d27.dirs[DIR_P00 * 3 + 2] = DIR_27_E_Z;
-
-    d27.dirs[DIR_M00 * 3    ] = DIR_27_W_X;
-    d27.dirs[DIR_M00 * 3 + 1] = DIR_27_W_Y;
-    d27.dirs[DIR_M00 * 3 + 2] = DIR_27_W_Z;
+    d27.directions[dP00] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z);
+    d27.directions[dM00] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z);
+    d27.directions[d0P0] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z);
+    d27.directions[d0M0] = Direction(DIR_27_S_X, DIR_27_S_Y, DIR_27_S_Z);
+    d27.directions[d00P] = Direction(DIR_27_T_X, DIR_27_T_Y, DIR_27_T_Z);
+    d27.directions[d00M] = Direction(DIR_27_B_X, DIR_27_B_Y, DIR_27_B_Z);
+
+    d27.directions[dPP0] = Direction(DIR_27_NE_X, DIR_27_NE_Y, DIR_27_NE_Z);
+    d27.directions[dMM0] = Direction(DIR_27_SW_X, DIR_27_SW_Y, DIR_27_SW_Z);
+    d27.directions[dPM0] = Direction(DIR_27_SE_X, DIR_27_SE_Y, DIR_27_SE_Z);
+    d27.directions[dMP0] = Direction(DIR_27_NW_X, DIR_27_NW_Y, DIR_27_NW_Z);
+
+    d27.directions[dP0P] = Direction(DIR_27_TE_X, DIR_27_TE_Y, DIR_27_TE_Z);
+    d27.directions[dM0M] = Direction(DIR_27_BW_X, DIR_27_BW_Y, DIR_27_BW_Z);
+    d27.directions[dP0M] = Direction(DIR_27_BE_X, DIR_27_BE_Y, DIR_27_BE_Z);
+    d27.directions[dM0P] = Direction(DIR_27_TW_X, DIR_27_TW_Y, DIR_27_TW_Z);
+
+    d27.directions[d0PP] = Direction(DIR_27_TN_X, DIR_27_TN_Y, DIR_27_TN_Z);
+    d27.directions[d0MM] = Direction(DIR_27_BS_X, DIR_27_BS_Y, DIR_27_BS_Z);
+    d27.directions[d0PM] = Direction(DIR_27_BN_X, DIR_27_BN_Y, DIR_27_BN_Z);
+    d27.directions[d0MP] = Direction(DIR_27_TS_X, DIR_27_TS_Y, DIR_27_TS_Z);
+
+    d27.directions[d000] = Direction(DIR_27_REST_X, DIR_27_REST_Y, DIR_27_REST_Z);
+
+    d27.directions[dPPP] = Direction(DIR_27_TNE_X, DIR_27_TNE_Y, DIR_27_TNE_Z);
+    d27.directions[dMPP] = Direction(DIR_27_TNW_X, DIR_27_TNW_Y, DIR_27_TNW_Z);
+    d27.directions[dPMP] = Direction(DIR_27_TSE_X, DIR_27_TSE_Y, DIR_27_TSE_Z);
+    d27.directions[dMMP] = Direction(DIR_27_TSW_X, DIR_27_TSW_Y, DIR_27_TSW_Z);
+
+    d27.directions[dPPM] = Direction(DIR_27_BNE_X, DIR_27_BNE_Y, DIR_27_BNE_Z);
+    d27.directions[dMPM]= Direction(DIR_27_BNW_X, DIR_27_BNW_Y, DIR_27_BNW_Z);
+    d27.directions[dPMM]= Direction(DIR_27_BSE_X, DIR_27_BSE_Y, DIR_27_BSE_Z);
+    d27.directions[dMMM] = Direction(DIR_27_BSW_X, DIR_27_BSW_Y, DIR_27_BSW_Z);
+
+
+    d27.dirs[dP00 * 3    ] = DIR_27_E_X;
+    d27.dirs[dP00 * 3 + 1] = DIR_27_E_Y;
+    d27.dirs[dP00 * 3 + 2] = DIR_27_E_Z;
+
+    d27.dirs[dM00 * 3    ] = DIR_27_W_X;
+    d27.dirs[dM00 * 3 + 1] = DIR_27_W_Y;
+    d27.dirs[dM00 * 3 + 2] = DIR_27_W_Z;
     
-    d27.dirs[DIR_0P0 * 3    ] = DIR_27_N_X;
-    d27.dirs[DIR_0P0 * 3 + 1] = DIR_27_N_Y;
-    d27.dirs[DIR_0P0 * 3 + 2] = DIR_27_N_Z;
+    d27.dirs[d0P0 * 3    ] = DIR_27_N_X;
+    d27.dirs[d0P0 * 3 + 1] = DIR_27_N_Y;
+    d27.dirs[d0P0 * 3 + 2] = DIR_27_N_Z;
 
-    d27.dirs[DIR_0M0 * 3    ] = DIR_27_S_X;
-    d27.dirs[DIR_0M0 * 3 + 1] = DIR_27_S_Y;
-    d27.dirs[DIR_0M0 * 3 + 2] = DIR_27_S_Z;
+    d27.dirs[d0M0 * 3    ] = DIR_27_S_X;
+    d27.dirs[d0M0 * 3 + 1] = DIR_27_S_Y;
+    d27.dirs[d0M0 * 3 + 2] = DIR_27_S_Z;
     
-    d27.dirs[DIR_00P * 3    ] = DIR_27_T_X;
-    d27.dirs[DIR_00P * 3 + 1] = DIR_27_T_Y;
-    d27.dirs[DIR_00P * 3 + 2] = DIR_27_T_Z;
+    d27.dirs[d00P * 3    ] = DIR_27_T_X;
+    d27.dirs[d00P * 3 + 1] = DIR_27_T_Y;
+    d27.dirs[d00P * 3 + 2] = DIR_27_T_Z;
     
-    d27.dirs[DIR_00M * 3    ] = DIR_27_B_X;
-    d27.dirs[DIR_00M * 3 + 1] = DIR_27_B_Y;
-    d27.dirs[DIR_00M * 3 + 2] = DIR_27_B_Z;
+    d27.dirs[d00M * 3    ] = DIR_27_B_X;
+    d27.dirs[d00M * 3 + 1] = DIR_27_B_Y;
+    d27.dirs[d00M * 3 + 2] = DIR_27_B_Z;
 
-    d27.dirs[DIR_PP0 * 3    ] = DIR_27_NE_X;
-    d27.dirs[DIR_PP0 * 3 + 1] = DIR_27_NE_Y;
-    d27.dirs[DIR_PP0 * 3 + 2] = DIR_27_NE_Z;
+    d27.dirs[dPP0 * 3    ] = DIR_27_NE_X;
+    d27.dirs[dPP0 * 3 + 1] = DIR_27_NE_Y;
+    d27.dirs[dPP0 * 3 + 2] = DIR_27_NE_Z;
     
-    d27.dirs[DIR_MM0 * 3    ] = DIR_27_SW_X;
-    d27.dirs[DIR_MM0 * 3 + 1] = DIR_27_SW_Y;
-    d27.dirs[DIR_MM0 * 3 + 2] = DIR_27_SW_Z;
+    d27.dirs[dMM0 * 3    ] = DIR_27_SW_X;
+    d27.dirs[dMM0 * 3 + 1] = DIR_27_SW_Y;
+    d27.dirs[dMM0 * 3 + 2] = DIR_27_SW_Z;
 
-    d27.dirs[DIR_PM0 * 3    ] = DIR_27_SE_X;
-    d27.dirs[DIR_PM0 * 3 + 1] = DIR_27_SE_Y;
-    d27.dirs[DIR_PM0 * 3 + 2] = DIR_27_SE_Z;
+    d27.dirs[dPM0 * 3    ] = DIR_27_SE_X;
+    d27.dirs[dPM0 * 3 + 1] = DIR_27_SE_Y;
+    d27.dirs[dPM0 * 3 + 2] = DIR_27_SE_Z;
 
-    d27.dirs[DIR_MP0 * 3    ] = DIR_27_NW_X;
-    d27.dirs[DIR_MP0 * 3 + 1] = DIR_27_NW_Y;
-    d27.dirs[DIR_MP0 * 3 + 2] = DIR_27_NW_Z;
+    d27.dirs[dMP0 * 3    ] = DIR_27_NW_X;
+    d27.dirs[dMP0 * 3 + 1] = DIR_27_NW_Y;
+    d27.dirs[dMP0 * 3 + 2] = DIR_27_NW_Z;
 
-    d27.dirs[DIR_P0P * 3    ] = DIR_27_TE_X;
-    d27.dirs[DIR_P0P * 3 + 1] = DIR_27_TE_Y;
-    d27.dirs[DIR_P0P * 3 + 2] = DIR_27_TE_Z;
+    d27.dirs[dP0P * 3    ] = DIR_27_TE_X;
+    d27.dirs[dP0P * 3 + 1] = DIR_27_TE_Y;
+    d27.dirs[dP0P * 3 + 2] = DIR_27_TE_Z;
 
-    d27.dirs[DIR_M0M * 3    ] = DIR_27_BW_X;
-    d27.dirs[DIR_M0M * 3 + 1] = DIR_27_BW_Y;
-    d27.dirs[DIR_M0M * 3 + 2] = DIR_27_BW_Z;
+    d27.dirs[dM0M * 3    ] = DIR_27_BW_X;
+    d27.dirs[dM0M * 3 + 1] = DIR_27_BW_Y;
+    d27.dirs[dM0M * 3 + 2] = DIR_27_BW_Z;
                               
-    d27.dirs[DIR_P0M * 3    ] = DIR_27_BE_X;
-    d27.dirs[DIR_P0M * 3 + 1] = DIR_27_BE_Y;
-    d27.dirs[DIR_P0M * 3 + 2] = DIR_27_BE_Z;
+    d27.dirs[dP0M * 3    ] = DIR_27_BE_X;
+    d27.dirs[dP0M * 3 + 1] = DIR_27_BE_Y;
+    d27.dirs[dP0M * 3 + 2] = DIR_27_BE_Z;
                               
-    d27.dirs[DIR_M0P * 3    ] = DIR_27_TW_X;
-    d27.dirs[DIR_M0P * 3 + 1] = DIR_27_TW_Y;
-    d27.dirs[DIR_M0P * 3 + 2] = DIR_27_TW_Z;
+    d27.dirs[dM0P * 3    ] = DIR_27_TW_X;
+    d27.dirs[dM0P * 3 + 1] = DIR_27_TW_Y;
+    d27.dirs[dM0P * 3 + 2] = DIR_27_TW_Z;
                               
-    d27.dirs[DIR_0PP * 3    ] = DIR_27_TN_X;
-    d27.dirs[DIR_0PP * 3 + 1] = DIR_27_TN_Y;
-    d27.dirs[DIR_0PP * 3 + 2] = DIR_27_TN_Z;
+    d27.dirs[d0PP * 3    ] = DIR_27_TN_X;
+    d27.dirs[d0PP * 3 + 1] = DIR_27_TN_Y;
+    d27.dirs[d0PP * 3 + 2] = DIR_27_TN_Z;
                               
-    d27.dirs[DIR_0MM * 3    ] = DIR_27_BS_X;
-    d27.dirs[DIR_0MM * 3 + 1] = DIR_27_BS_Y;
-    d27.dirs[DIR_0MM * 3 + 2] = DIR_27_BS_Z;
+    d27.dirs[d0MM * 3    ] = DIR_27_BS_X;
+    d27.dirs[d0MM * 3 + 1] = DIR_27_BS_Y;
+    d27.dirs[d0MM * 3 + 2] = DIR_27_BS_Z;
                               
-    d27.dirs[DIR_0PM * 3    ] = DIR_27_BN_X;
-    d27.dirs[DIR_0PM * 3 + 1] = DIR_27_BN_Y;
-    d27.dirs[DIR_0PM * 3 + 2] = DIR_27_BN_Z;
+    d27.dirs[d0PM * 3    ] = DIR_27_BN_X;
+    d27.dirs[d0PM * 3 + 1] = DIR_27_BN_Y;
+    d27.dirs[d0PM * 3 + 2] = DIR_27_BN_Z;
 
-    d27.dirs[DIR_0MP * 3    ] = DIR_27_TS_X;
-    d27.dirs[DIR_0MP * 3 + 1] = DIR_27_TS_Y;
-    d27.dirs[DIR_0MP * 3 + 2] = DIR_27_TS_Z;
+    d27.dirs[d0MP * 3    ] = DIR_27_TS_X;
+    d27.dirs[d0MP * 3 + 1] = DIR_27_TS_Y;
+    d27.dirs[d0MP * 3 + 2] = DIR_27_TS_Z;
 
-    d27.dirs[DIR_000 * 3    ] = DIR_27_REST_X;   //
-    d27.dirs[DIR_000 * 3 + 1] = DIR_27_REST_Y;   //  ZERO ELEMENT
-    d27.dirs[DIR_000 * 3 + 2] = DIR_27_REST_Z;   //
+    d27.dirs[d000 * 3    ] = DIR_27_REST_X;   //
+    d27.dirs[d000 * 3 + 1] = DIR_27_REST_Y;   //  ZERO ELEMENT
+    d27.dirs[d000 * 3 + 2] = DIR_27_REST_Z;   //
 
-    d27.dirs[DIR_PPP * 3    ] = DIR_27_TNE_X;
-    d27.dirs[DIR_PPP * 3 + 1] = DIR_27_TNE_Y;
-    d27.dirs[DIR_PPP * 3 + 2] = DIR_27_TNE_Z;
+    d27.dirs[dPPP * 3    ] = DIR_27_TNE_X;
+    d27.dirs[dPPP * 3 + 1] = DIR_27_TNE_Y;
+    d27.dirs[dPPP * 3 + 2] = DIR_27_TNE_Z;
 
-    d27.dirs[DIR_PPM * 3    ] = DIR_27_BNE_X;
-    d27.dirs[DIR_PPM * 3 + 1] = DIR_27_BNE_Y;
-    d27.dirs[DIR_PPM * 3 + 2] = DIR_27_BNE_Z;
+    d27.dirs[dPPM * 3    ] = DIR_27_BNE_X;
+    d27.dirs[dPPM * 3 + 1] = DIR_27_BNE_Y;
+    d27.dirs[dPPM * 3 + 2] = DIR_27_BNE_Z;
 
-    d27.dirs[DIR_PMP * 3    ] = DIR_27_TSE_X;
-    d27.dirs[DIR_PMP * 3 + 1] = DIR_27_TSE_Y;
-    d27.dirs[DIR_PMP * 3 + 2] = DIR_27_TSE_Z;
+    d27.dirs[dPMP * 3    ] = DIR_27_TSE_X;
+    d27.dirs[dPMP * 3 + 1] = DIR_27_TSE_Y;
+    d27.dirs[dPMP * 3 + 2] = DIR_27_TSE_Z;
 
-    d27.dirs[DIR_PMM * 3    ] = DIR_27_BSE_X;
-    d27.dirs[DIR_PMM * 3 + 1] = DIR_27_BSE_Y;
-    d27.dirs[DIR_PMM * 3 + 2] = DIR_27_BSE_Z;
+    d27.dirs[dPMM * 3    ] = DIR_27_BSE_X;
+    d27.dirs[dPMM * 3 + 1] = DIR_27_BSE_Y;
+    d27.dirs[dPMM * 3 + 2] = DIR_27_BSE_Z;
 
-    d27.dirs[DIR_MPP * 3    ] = DIR_27_TNW_X;
-    d27.dirs[DIR_MPP * 3 + 1] = DIR_27_TNW_Y;
-    d27.dirs[DIR_MPP * 3 + 2] = DIR_27_TNW_Z;
+    d27.dirs[dMPP * 3    ] = DIR_27_TNW_X;
+    d27.dirs[dMPP * 3 + 1] = DIR_27_TNW_Y;
+    d27.dirs[dMPP * 3 + 2] = DIR_27_TNW_Z;
 
-    d27.dirs[DIR_MPM * 3    ] = DIR_27_BNW_X;
-    d27.dirs[DIR_MPM * 3 + 1] = DIR_27_BNW_Y;
-    d27.dirs[DIR_MPM * 3 + 2] = DIR_27_BNW_Z;
+    d27.dirs[dMPM * 3    ] = DIR_27_BNW_X;
+    d27.dirs[dMPM * 3 + 1] = DIR_27_BNW_Y;
+    d27.dirs[dMPM * 3 + 2] = DIR_27_BNW_Z;
 
-    d27.dirs[DIR_MMP * 3    ] = DIR_27_TSW_X;
-    d27.dirs[DIR_MMP * 3 + 1] = DIR_27_TSW_Y;
-    d27.dirs[DIR_MMP * 3 + 2] = DIR_27_TSW_Z;
+    d27.dirs[dMMP * 3    ] = DIR_27_TSW_X;
+    d27.dirs[dMMP * 3 + 1] = DIR_27_TSW_Y;
+    d27.dirs[dMMP * 3 + 2] = DIR_27_TSW_Z;
 
-    d27.dirs[DIR_MMM * 3    ] = DIR_27_BSW_X;
-    d27.dirs[DIR_MMM * 3 + 1] = DIR_27_BSW_Y;
-    d27.dirs[DIR_MMM * 3 + 2] = DIR_27_BSW_Z;
+    d27.dirs[dMMM * 3    ] = DIR_27_BSW_X;
+    d27.dirs[dMMM * 3 + 1] = DIR_27_BSW_Y;
+    d27.dirs[dMMM * 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
index 3a9dd1d33ec4e1567b7b85e99970a5245ebbb06d..4ea6e345fe5fbdef05e386002f35d47f34703a9b 100644
--- a/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp
+++ b/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp
@@ -10,52 +10,52 @@ TEST(DistributionTest, DistributionReturnsCorrectDirections)
 {
     Distribution dist = DistributionHelper::getDistribution27();
 
-    EXPECT_THAT(dist.directions[DIR_P00][0], testing::Eq(DIR_27_E_X));
-    EXPECT_THAT(dist.directions[DIR_P00][1], testing::Eq(DIR_27_E_Y));
-    EXPECT_THAT(dist.directions[DIR_P00][2], testing::Eq(DIR_27_E_Z));
-    EXPECT_THAT(dist.dirs[DIR_P00 * 3    ], testing::Eq(DIR_27_E_X));
-    EXPECT_THAT(dist.dirs[DIR_P00 * 3 + 1], testing::Eq(DIR_27_E_Y));
-    EXPECT_THAT(dist.dirs[DIR_P00 * 3 + 2], testing::Eq(DIR_27_E_Z));
-
-    EXPECT_THAT(dist.directions[DIR_00M][0], testing::Eq(DIR_27_B_X));
-    EXPECT_THAT(dist.directions[DIR_00M][1], testing::Eq(DIR_27_B_Y));
-    EXPECT_THAT(dist.directions[DIR_00M][2], testing::Eq(DIR_27_B_Z));
-    EXPECT_THAT(dist.dirs[DIR_00M * 3    ], testing::Eq(DIR_27_B_X));
-    EXPECT_THAT(dist.dirs[DIR_00M * 3 + 1], testing::Eq(DIR_27_B_Y));
-    EXPECT_THAT(dist.dirs[DIR_00M * 3 + 2], testing::Eq(DIR_27_B_Z));
+    EXPECT_THAT(dist.directions[dP00][0], testing::Eq(DIR_27_E_X));
+    EXPECT_THAT(dist.directions[dP00][1], testing::Eq(DIR_27_E_Y));
+    EXPECT_THAT(dist.directions[dP00][2], testing::Eq(DIR_27_E_Z));
+    EXPECT_THAT(dist.dirs[dP00 * 3    ], testing::Eq(DIR_27_E_X));
+    EXPECT_THAT(dist.dirs[dP00 * 3 + 1], testing::Eq(DIR_27_E_Y));
+    EXPECT_THAT(dist.dirs[dP00 * 3 + 2], testing::Eq(DIR_27_E_Z));
+
+    EXPECT_THAT(dist.directions[d00M][0], testing::Eq(DIR_27_B_X));
+    EXPECT_THAT(dist.directions[d00M][1], testing::Eq(DIR_27_B_Y));
+    EXPECT_THAT(dist.directions[d00M][2], testing::Eq(DIR_27_B_Z));
+    EXPECT_THAT(dist.dirs[d00M * 3    ], testing::Eq(DIR_27_B_X));
+    EXPECT_THAT(dist.dirs[d00M * 3 + 1], testing::Eq(DIR_27_B_Y));
+    EXPECT_THAT(dist.dirs[d00M * 3 + 2], testing::Eq(DIR_27_B_Z));
     
-    EXPECT_THAT(dist.directions[DIR_000][0], testing::Eq(0));
-    EXPECT_THAT(dist.directions[DIR_000][1], testing::Eq(0));
-    EXPECT_THAT(dist.directions[DIR_000][2], testing::Eq(0));
-    EXPECT_THAT(dist.dirs[DIR_000 * 3    ], testing::Eq(0));
-    EXPECT_THAT(dist.dirs[DIR_000 * 3 + 1], testing::Eq(0));
-    EXPECT_THAT(dist.dirs[DIR_000 * 3 + 2], testing::Eq(0));
-
-    EXPECT_THAT(dist.directions[DIR_PP0][0], testing::Eq(DIR_27_NE_X));
-    EXPECT_THAT(dist.directions[DIR_PP0][1], testing::Eq(DIR_27_NE_Y));
-    EXPECT_THAT(dist.directions[DIR_PP0][2], testing::Eq(DIR_27_NE_Z));
-    EXPECT_THAT(dist.dirs[DIR_PP0 * 3    ], testing::Eq(DIR_27_NE_X));
-    EXPECT_THAT(dist.dirs[DIR_PP0 * 3 + 1], testing::Eq(DIR_27_NE_Y));
-    EXPECT_THAT(dist.dirs[DIR_PP0 * 3 + 2], testing::Eq(DIR_27_NE_Z));
-
-    EXPECT_THAT(dist.directions[DIR_0MP][0], testing::Eq(DIR_27_TS_X));
-    EXPECT_THAT(dist.directions[DIR_0MP][1], testing::Eq(DIR_27_TS_Y));
-    EXPECT_THAT(dist.directions[DIR_0MP][2], testing::Eq(DIR_27_TS_Z));
-    EXPECT_THAT(dist.dirs[DIR_0MP * 3    ], testing::Eq(DIR_27_TS_X));
-    EXPECT_THAT(dist.dirs[DIR_0MP * 3 + 1], testing::Eq(DIR_27_TS_Y));
-    EXPECT_THAT(dist.dirs[DIR_0MP * 3 + 2], testing::Eq(DIR_27_TS_Z));
-
-    EXPECT_THAT(dist.directions[DIR_PPP][0], testing::Eq(DIR_27_TNE_X));
-    EXPECT_THAT(dist.directions[DIR_PPP][1], testing::Eq(DIR_27_TNE_Y));
-    EXPECT_THAT(dist.directions[DIR_PPP][2], testing::Eq(DIR_27_TNE_Z));
-    EXPECT_THAT(dist.dirs[DIR_PPP * 3    ], testing::Eq(DIR_27_TNE_X));
-    EXPECT_THAT(dist.dirs[DIR_PPP * 3 + 1], testing::Eq(DIR_27_TNE_Y));
-    EXPECT_THAT(dist.dirs[DIR_PPP * 3 + 2], testing::Eq(DIR_27_TNE_Z));
-
-    EXPECT_THAT(dist.directions[DIR_MMM][0], testing::Eq(DIR_27_BSW_X));
-    EXPECT_THAT(dist.directions[DIR_MMM][1], testing::Eq(DIR_27_BSW_Y));
-    EXPECT_THAT(dist.directions[DIR_MMM][2], testing::Eq(DIR_27_BSW_Z));
-    EXPECT_THAT(dist.dirs[DIR_MMM * 3    ], testing::Eq(DIR_27_BSW_X));
-    EXPECT_THAT(dist.dirs[DIR_MMM * 3 + 1], testing::Eq(DIR_27_BSW_Y));
-    EXPECT_THAT(dist.dirs[DIR_MMM * 3 + 2], testing::Eq(DIR_27_BSW_Z));
+    EXPECT_THAT(dist.directions[d000][0], testing::Eq(0));
+    EXPECT_THAT(dist.directions[d000][1], testing::Eq(0));
+    EXPECT_THAT(dist.directions[d000][2], testing::Eq(0));
+    EXPECT_THAT(dist.dirs[d000 * 3    ], testing::Eq(0));
+    EXPECT_THAT(dist.dirs[d000 * 3 + 1], testing::Eq(0));
+    EXPECT_THAT(dist.dirs[d000 * 3 + 2], testing::Eq(0));
+
+    EXPECT_THAT(dist.directions[dPP0][0], testing::Eq(DIR_27_NE_X));
+    EXPECT_THAT(dist.directions[dPP0][1], testing::Eq(DIR_27_NE_Y));
+    EXPECT_THAT(dist.directions[dPP0][2], testing::Eq(DIR_27_NE_Z));
+    EXPECT_THAT(dist.dirs[dPP0 * 3    ], testing::Eq(DIR_27_NE_X));
+    EXPECT_THAT(dist.dirs[dPP0 * 3 + 1], testing::Eq(DIR_27_NE_Y));
+    EXPECT_THAT(dist.dirs[dPP0 * 3 + 2], testing::Eq(DIR_27_NE_Z));
+
+    EXPECT_THAT(dist.directions[d0MP][0], testing::Eq(DIR_27_TS_X));
+    EXPECT_THAT(dist.directions[d0MP][1], testing::Eq(DIR_27_TS_Y));
+    EXPECT_THAT(dist.directions[d0MP][2], testing::Eq(DIR_27_TS_Z));
+    EXPECT_THAT(dist.dirs[d0MP * 3    ], testing::Eq(DIR_27_TS_X));
+    EXPECT_THAT(dist.dirs[d0MP * 3 + 1], testing::Eq(DIR_27_TS_Y));
+    EXPECT_THAT(dist.dirs[d0MP * 3 + 2], testing::Eq(DIR_27_TS_Z));
+
+    EXPECT_THAT(dist.directions[dPPP][0], testing::Eq(DIR_27_TNE_X));
+    EXPECT_THAT(dist.directions[dPPP][1], testing::Eq(DIR_27_TNE_Y));
+    EXPECT_THAT(dist.directions[dPPP][2], testing::Eq(DIR_27_TNE_Z));
+    EXPECT_THAT(dist.dirs[dPPP * 3    ], testing::Eq(DIR_27_TNE_X));
+    EXPECT_THAT(dist.dirs[dPPP * 3 + 1], testing::Eq(DIR_27_TNE_Y));
+    EXPECT_THAT(dist.dirs[dPPP * 3 + 2], testing::Eq(DIR_27_TNE_Z));
+
+    EXPECT_THAT(dist.directions[dMMM][0], testing::Eq(DIR_27_BSW_X));
+    EXPECT_THAT(dist.directions[dMMM][1], testing::Eq(DIR_27_BSW_Y));
+    EXPECT_THAT(dist.directions[dMMM][2], testing::Eq(DIR_27_BSW_Z));
+    EXPECT_THAT(dist.dirs[dMMM * 3    ], testing::Eq(DIR_27_BSW_X));
+    EXPECT_THAT(dist.dirs[dMMM * 3 + 1], testing::Eq(DIR_27_BSW_Y));
+    EXPECT_THAT(dist.dirs[dMMM * 3 + 2], testing::Eq(DIR_27_BSW_Z));
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu
deleted file mode 100644
index 278d01e149aeb6de5241f5c84463e4e80d360512..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu
+++ /dev/null
@@ -1,7147 +0,0 @@
-/* Device code */
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADPress7(  real* DD, 
-                                       real* DD7, 
-                                       real* temp,
-                                       real* velo,
-                                       real diffusivity,
-                                       int* k_Q, 
-                                       real* QQ,
-                                       unsigned int numberOfBCnodes, 
-                                       real om1, 
-                                       unsigned int* neighborX,
-                                       unsigned int* neighborY,
-                                       unsigned int* neighborZ,
-                                       unsigned long long numberOfLBnodes, 
-                                       bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions7 D7;
-   if (isEvenTimestep==true)
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[1] = &DD7[1*numberOfLBnodes];
-      D7.f[2] = &DD7[2*numberOfLBnodes];
-      D7.f[3] = &DD7[3*numberOfLBnodes];
-      D7.f[4] = &DD7[4*numberOfLBnodes];
-      D7.f[5] = &DD7[5*numberOfLBnodes];
-      D7.f[6] = &DD7[6*numberOfLBnodes];
-   }
-   else
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[2] = &DD7[1*numberOfLBnodes];
-      D7.f[1] = &DD7[2*numberOfLBnodes];
-      D7.f[4] = &DD7[3*numberOfLBnodes];
-      D7.f[3] = &DD7[4*numberOfLBnodes];
-      D7.f[6] = &DD7[5*numberOfLBnodes];
-      D7.f[5] = &DD7[6*numberOfLBnodes];
-   }
-
-
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      //q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      //q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      //q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      //q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      //q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      //q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      //q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      //q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      //q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      //q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      //q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      //q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      //q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      //q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      //q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      //q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      //q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      //q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      //q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      //q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      /*real drho*/;
-      //real vx1_Inflow   = zero;
-      //real vx2_Inflow   = zero;
-      //real vx3_Inflow   = velo[k];
-      //real ux_sq_Inflow = vx1_Inflow * vx1_Inflow;
-      //real uy_sq_Inflow = vx2_Inflow * vx2_Inflow;
-      //real uz_sq_Inflow = vx3_Inflow * vx3_Inflow;
-
-
-      //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[DIR_000])[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); 
-
-      //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); 
-
-      //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); 
-
-      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[DIR_000])[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));
-      real 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));
-      real 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 cu_sq       =1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
-      real ux_sq       = vx1 * vx1;
-      real uy_sq       = vx2 * vx2;
-      real uz_sq       = vx3 * vx3;
-      real omegaD     = c3o1 - sqrt(c3o1);
-      real Lam         = -(c1o2-c1o1/omegaD);
-      real nue_d       = Lam/c3o1;
-      //real ae          = zero;
-      real ae          = diffusivity/nue_d - c1o1;
-
-      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
-      real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
-      real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
-      //real TempD = temp[k];
-
-
-      f7_ZERO =  (D7.f[0])[kzero];
-      f7_W    =  (D7.f[1])[ke   ];
-      f7_E    =  (D7.f[2])[kw   ];
-      f7_S    =  (D7.f[3])[kn   ];
-      f7_N    =  (D7.f[4])[ks   ];
-      f7_B    =  (D7.f[5])[kt   ];
-      f7_T    =  (D7.f[6])[kb   ];
-
-      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
-
-      //feq7_ZERO = ConcD*(c1o3*(ae*(-3.0))-(ux_sq+uy_sq+uz_sq));
-      feq7_E    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
-      feq7_W    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
-      feq7_N    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
-      feq7_S    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
-      feq7_T    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
-      feq7_B    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
-
-      //feq7_ZERO = TempD*(c1o3*(ae*(-3.0f))-(ux_sq+uy_sq+uz_sq));
-      feqW7_E    = feq7_E;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
-      feqW7_W    = feq7_W;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
-      feqW7_N    = feq7_N;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
-      feqW7_S    = feq7_S;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
-      feqW7_T    = feq7_T;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
-      feqW7_B    = feq7_B;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
-
-      //////////////////////////////////////////////////////////////////////////
-      //pointertausch
-      if (isEvenTimestep==false)
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[1] = &DD7[1*numberOfLBnodes];
-         D7.f[2] = &DD7[2*numberOfLBnodes];
-         D7.f[3] = &DD7[3*numberOfLBnodes];
-         D7.f[4] = &DD7[4*numberOfLBnodes];
-         D7.f[5] = &DD7[5*numberOfLBnodes];
-         D7.f[6] = &DD7[6*numberOfLBnodes];
-      }
-      else
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[2] = &DD7[1*numberOfLBnodes];
-         D7.f[1] = &DD7[2*numberOfLBnodes];
-         D7.f[4] = &DD7[3*numberOfLBnodes];
-         D7.f[3] = &DD7[4*numberOfLBnodes];
-         D7.f[6] = &DD7[5*numberOfLBnodes];
-         D7.f[5] = &DD7[6*numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=0.1f;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //DIR_P00
-      //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //DIR_M00
-      //(D7.f[3])[kn   ] = f7_N - feq7_N + feqW7_S; //DIR_0P0
-      //(D7.f[4])[ks   ] = f7_S - feq7_S + feqW7_N; //DIR_0M0
-      //(D7.f[5])[kt   ] = f7_T - feq7_T + feqW7_B; //DIR_00P
-      //(D7.f[6])[kb   ] = f7_B - feq7_B + feqW7_T; //DIR_00M
-
-      //////////////////////////////////////////////////////////////////////////
-      //mit Q's
-      real /*feq,*/ q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[2])[kw]=(c2o1*feqW7_W-(f7_E*(q*omegaD-c1o1)-omegaD*feq7_E*(q-c1o1))/(omegaD-c1o1)+f7_W*q)/(q+c1o1);//f7_W - feq7_W + feqW7_E;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[1])[ke]=(c2o1*feqW7_E-(f7_W*(q*omegaD-c1o1)-omegaD*feq7_W*(q-c1o1))/(omegaD-c1o1)+f7_E*q)/(q+c1o1);//f7_E - feq7_E + feqW7_W;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[4])[ks]=(c2o1*feqW7_S-(f7_N*(q*omegaD-1.)-omegaD*feq7_N*(q-c1o1))/(omegaD-c1o1)+f7_S*q)/(q+c1o1);//f7_S - feq7_S + feqW7_N;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[3])[kn]=(c2o1*feqW7_N-(f7_S*(q*omegaD-c1o1)-omegaD*feq7_S*(q-c1o1))/(omegaD-c1o1)+f7_N*q)/(q+c1o1);//f7_N - feq7_N + feqW7_S;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[6])[kb]=(c2o1*feqW7_B-(f7_T*(q*omegaD-1.)-omegaD*feq7_T*(q-c1o1))/(omegaD-c1o1)+f7_B*q)/(q+c1o1);//f7_B - feq7_B + feqW7_T;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[5])[kt]=(c2o1*feqW7_T-(f7_B*(q*omegaD-c1o1)-omegaD*feq7_B*(q-c1o1))/(omegaD-c1o1)+f7_T*q)/(q+c1o1);//f7_T - feq7_T + feqW7_B;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////ohne Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
-      //}
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADPress27( real* DD, 
-                                       real* DD27, 
-                                       real* temp,
-                                       real* velo,
-                                       real diffusivity,
-                                       int* k_Q, 
-                                       real* QQ,
-                                       unsigned int numberOfBCnodes, 
-                                       real om1, 
-                                       unsigned int* neighborX,
-                                       unsigned int* neighborY,
-                                       unsigned int* neighborZ,
-                                       unsigned long long numberOfLBnodes, 
-                                       bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[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 + f_ZERO; 
-
-      //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); 
-
-
-      //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); 
-
-      //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)+ f_ZERO;
-      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));
-      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[DIR_P00])[ke   ];
-      real f27_E    = (D27.f[DIR_M00])[kw   ];
-      real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      real f27_B    = (D27.f[DIR_00P])[kt   ];
-      real f27_T    = (D27.f[DIR_00M])[kb   ];
-      real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      real f27_ZERO = (D27.f[DIR_000])[kzero];
-      real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-                        f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-                        f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      ////real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      //real feq27_E    =   c2over27* (ConcD+(one+ConcD)*(three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq));
-      //real feq27_W    =   c2over27* (ConcD+(one+ConcD)*(three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq));
-      //real feq27_N    =   c2over27* (ConcD+(one+ConcD)*(three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq));
-      //real feq27_S    =   c2over27* (ConcD+(one+ConcD)*(three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq));
-      //real feq27_T    =   c2over27* (ConcD+(one+ConcD)*(three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq));
-      //real feq27_B    =   c2over27* (ConcD+(one+ConcD)*(three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq));
-      //real feq27_NE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      //real feq27_SW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      //real feq27_SE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      //real feq27_NW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      //real feq27_TE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      //real feq27_BW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      //real feq27_BE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      //real feq27_TW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      //real feq27_TN   =   c1over54* (ConcD+(one+ConcD)*(three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      //real feq27_BS   =   c1over54* (ConcD+(one+ConcD)*(three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      //real feq27_BN   =   c1over54* (ConcD+(one+ConcD)*(three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      //real feq27_TS   =   c1over54* (ConcD+(one+ConcD)*(three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      //real feq27_TNE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      //real feq27_BSW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      //real feq27_BNE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      //real feq27_TSW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      //real feq27_TSE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      //real feq27_BNW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      //real feq27_BSE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      //real feq27_TNW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
-      //
-      real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //real TempD = temp[k];
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      // velocity inflow
-      //vx1   = zero;
-      //vx2   = zero;
-      //vx3   = velo[k];
-
-      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      real feqW27_E    =  feq27_E  ;// c2over27* TempD*(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
-      real feqW27_W    =  feq27_W  ;// c2over27* TempD*(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
-      real feqW27_N    =  feq27_N  ;// c2over27* TempD*(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
-      real feqW27_S    =  feq27_S  ;// c2over27* TempD*(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feqW27_T    =  feq27_T  ;// c2over27* TempD*(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
-      real feqW27_B    =  feq27_B  ;// c2over27* TempD*(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
-      real feqW27_NE   =  feq27_NE ;// c1over54* TempD*(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feqW27_SW   =  feq27_SW ;// c1over54* TempD*(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feqW27_SE   =  feq27_SE ;// c1over54* TempD*(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feqW27_NW   =  feq27_NW ;// c1over54* TempD*(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feqW27_TE   =  feq27_TE ;// c1over54* TempD*(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feqW27_BW   =  feq27_BW ;// c1over54* TempD*(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feqW27_BE   =  feq27_BE ;// c1over54* TempD*(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feqW27_TW   =  feq27_TW ;// c1over54* TempD*(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feqW27_TN   =  feq27_TN ;// c1over54* TempD*(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feqW27_BS   =  feq27_BS ;// c1over54* TempD*(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feqW27_BN   =  feq27_BN ;// c1over54* TempD*(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feqW27_TS   =  feq27_TS ;// c1over54* TempD*(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feqW27_TNE  =  feq27_TNE;// c1over216*TempD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feqW27_BSW  =  feq27_BSW;// c1over216*TempD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feqW27_BNE  =  feq27_BNE;// c1over216*TempD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feqW27_TSW  =  feq27_TSW;// c1over216*TempD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feqW27_TSE  =  feq27_TSE;// c1over216*TempD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feqW27_BNW  =  feq27_BNW;// c1over216*TempD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feqW27_BSE  =  feq27_BSE;// c1over216*TempD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feqW27_TNW  =  feq27_TNW;// c1over216*TempD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADPressNEQNeighbor27(
-													real* DD,
-													real* DD27,
-													int* k_Q,
-													int* k_N,
-													int numberOfBCnodes,
-													unsigned int* neighborX,
-													unsigned int* neighborY,
-													unsigned int* neighborZ,
-													unsigned long long numberOfLBnodes,
-													bool isEvenTimestep
-												)
-{
-	Distributions27 D;
-	if (isEvenTimestep == true)
-	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	}
-	else
-	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	}
-
-	Distributions27 D27;
-	if (isEvenTimestep == true)
-	{
-		D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-		D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-		D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-		D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-		D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-		D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-		D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-		D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-		D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-		D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-		D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-		D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-		D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-		D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-		D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-		D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-		D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-		D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-		D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-		D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-		D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-		D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-		D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-		D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-		D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-		D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-		D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-	}
-	else
-	{
-		D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-		D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-		D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-		D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-		D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-		D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-		D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-		D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-		D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-		D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-		D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-		D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-		D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-		D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-		D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-		D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-		D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-		D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-		D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-		D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-		D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-		D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-		D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-		D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-		D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-		D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-		D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-	}
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if (k < numberOfBCnodes)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		//Fluid - BC Nodes
-		////////////////////////////////////////////////////////////////////////////////
-		//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];
-		////////////////////////////////////////////////////////////////////////////////
-		//distributions
-		real f_W =    (D.f[DIR_P00])[ke];
-		real f_E =    (D.f[DIR_M00])[kw];
-		real f_S =    (D.f[DIR_0P0])[kn];
-		real f_N =    (D.f[DIR_0M0])[ks];
-		real f_B =    (D.f[DIR_00P])[kt];
-		real f_T =    (D.f[DIR_00M])[kb];
-		real f_SW =   (D.f[DIR_PP0])[kne];
-		real f_NE =   (D.f[DIR_MM0])[ksw];
-		real f_NW =   (D.f[DIR_PM0])[kse];
-		real f_SE =   (D.f[DIR_MP0])[knw];
-		real f_BW =   (D.f[DIR_P0P])[kte];
-		real f_TE =   (D.f[DIR_M0M])[kbw];
-		real f_TW =   (D.f[DIR_P0M])[kbe];
-		real f_BE =   (D.f[DIR_M0P])[ktw];
-		real f_BS =   (D.f[DIR_0PP])[ktn];
-		real f_TN =   (D.f[DIR_0MM])[kbs];
-		real f_TS =   (D.f[DIR_0PM])[kbn];
-		real f_BN =   (D.f[DIR_0MP])[kts];
-		real f_ZERO = (D.f[DIR_000])[kzero];
-		real f_BSW =  (D.f[DIR_PPP])[ktne];
-		real f_BNE =  (D.f[DIR_MMP])[ktsw];
-		real f_BNW =  (D.f[DIR_PMP])[ktse];
-		real f_BSE =  (D.f[DIR_MPP])[ktnw];
-		real f_TSW =  (D.f[DIR_PPM])[kbne];
-		real f_TNE =  (D.f[DIR_MMM])[kbsw];
-		real f_TNW =  (D.f[DIR_PMM])[kbse];
-		real f_TSE =  (D.f[DIR_MPM])[kbnw];
-		////////////////////////////////////////////////////////////////////////////////
-		//macroscopic values
-		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  ) +  f_ZERO;
-		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));
-		real 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));
-		real 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));
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//AD - BC Nodes
-		////////////////////////////////////////////////////////////////////////////////
-		//distributions
-		real f27_W =    (D27.f[DIR_P00])[ke];
-		real f27_E =    (D27.f[DIR_M00])[kw];
-		real f27_S =    (D27.f[DIR_0P0])[kn];
-		real f27_N =    (D27.f[DIR_0M0])[ks];
-		real f27_B =    (D27.f[DIR_00P])[kt];
-		real f27_T =    (D27.f[DIR_00M])[kb];
-		real f27_SW =   (D27.f[DIR_PP0])[kne];
-		real f27_NE =   (D27.f[DIR_MM0])[ksw];
-		real f27_NW =   (D27.f[DIR_PM0])[kse];
-		real f27_SE =   (D27.f[DIR_MP0])[knw];
-		real f27_BW =   (D27.f[DIR_P0P])[kte];
-		real f27_TE =   (D27.f[DIR_M0M])[kbw];
-		real f27_TW =   (D27.f[DIR_P0M])[kbe];
-		real f27_BE =   (D27.f[DIR_M0P])[ktw];
-		real f27_BS =   (D27.f[DIR_0PP])[ktn];
-		real f27_TN =   (D27.f[DIR_0MM])[kbs];
-		real f27_TS =   (D27.f[DIR_0PM])[kbn];
-		real f27_BN =   (D27.f[DIR_0MP])[kts];
-		real f27_ZERO = (D27.f[DIR_000])[kzero];
-		real f27_BSW =  (D27.f[DIR_PPP])[ktne];
-		real f27_BNE =  (D27.f[DIR_MMP])[ktsw];
-		real f27_BNW =  (D27.f[DIR_PMP])[ktse];
-		real f27_BSE =  (D27.f[DIR_MPP])[ktnw];
-		real f27_TSW =  (D27.f[DIR_PPM])[kbne];
-		real f27_TNE =  (D27.f[DIR_MMM])[kbsw];
-		real f27_TNW =  (D27.f[DIR_PMM])[kbse];
-		real f27_TSE =  (D27.f[DIR_MPM])[kbnw];
-		////////////////////////////////////////////////////////////////////////////////
-		real cusq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
-		////////////////////////////////////////////////////////////////////////////////
-		//concentration
-		real ConcD = 
-			(f27_TNE + f27_BSW) + (f27_TSW + f27_BNE) + (f27_TSE + f27_BNW) + (f27_TNW + f27_BSE) + 
-			(f27_NE  + f27_SW ) + (f27_NW  + f27_SE ) + (f27_TE  + f27_BW ) + (f27_BE  + f27_TW ) + 
-			(f27_TN  + f27_BS ) + (f27_BN  + f27_TS ) +   						
-			(f27_E   + f27_W  ) + (f27_N   + f27_S  ) + (f27_T   + f27_B  ) +  f27_ZERO;
-		////////////////////////////////////////////////////////////////////////////////
-		//calculate non-equilibrium
-		f27_ZERO  -=  c8o27* (ConcD-(ConcD+c1o1)*cusq);
-		f27_E     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq));
-		f27_W     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq));
-		f27_N     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
-		f27_S     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
-		f27_T     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
-		f27_B     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
-		f27_NE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-		f27_SW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-		f27_SE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-		f27_NW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-		f27_TE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-		f27_BW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-		f27_BE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-		f27_TW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-		f27_TN    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-		f27_BS    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-		f27_BN    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-		f27_TS    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-		f27_TNE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-		f27_BSW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-		f27_BNE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-		f27_TSW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-		f27_TSE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-		f27_BNW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
-		f27_BSE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
-		f27_TNW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
-		////////////////////////////////////////////////////////////////////////////////
-		ConcD = c0o1;
-		////////////////////////////////////////////////////////////////////////////////
-		//add BC equilibrium
-		f27_ZERO  +=  c8o27* (ConcD-(ConcD+c1o1)*cusq);
-		f27_E     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq));
-		f27_W     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq));
-		f27_N     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
-		f27_S     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
-		f27_T     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
-		f27_B     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
-		f27_NE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-		f27_SW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-		f27_SE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-		f27_NW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-		f27_TE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-		f27_BW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-		f27_BE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-		f27_TW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-		f27_TN    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-		f27_BS    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-		f27_BN    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-		f27_TS    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-		f27_TNE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-		f27_BSW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-		f27_BNE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-		f27_TSW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-		f27_TSE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-		f27_BNW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
-		f27_BSE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
-		f27_TNW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        __syncthreads();
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//Neighbors of BC Nodes
-		////////////////////////////////////////////////////////////////////////////////
-		//index neighbor
-		unsigned int KNQK = k_N[k];
-		unsigned int kNzero = KNQK;
-		unsigned int kNe = KNQK;
-		unsigned int kNw = neighborX[KNQK];
-		unsigned int kNn = KNQK;
-		unsigned int kNs = neighborY[KNQK];
-		unsigned int kNt = KNQK;
-		unsigned int kNb = neighborZ[KNQK];
-		unsigned int kNsw = neighborY[kNw];
-		unsigned int kNne = KNQK;
-		unsigned int kNse = kNs;
-		unsigned int kNnw = kNw;
-		unsigned int kNbw = neighborZ[kNw];
-		unsigned int kNte = KNQK;
-		unsigned int kNbe = kNb;
-		unsigned int kNtw = kNw;
-		unsigned int kNbs = neighborZ[kNs];
-		unsigned int kNtn = KNQK;
-		unsigned int kNbn = kNb;
-		unsigned int kNts = kNs;
-		unsigned int kNtse = kNs;
-		unsigned int kNbnw = kNbw;
-		unsigned int kNtnw = kNw;
-		unsigned int kNbse = kNbs;
-		unsigned int kNtsw = kNsw;
-		unsigned int kNbne = kNb;
-		unsigned int kNtne = KNQK;
-		unsigned int kNbsw = neighborZ[kNsw];
-		////////////////////////////////////////////////////////////////////////////////
-		//update distributions at neighbor nodes
-        (D27.f[DIR_P00])[kNe   ] = f27_W   ;  
-        (D27.f[DIR_M00])[kNw   ] = f27_E   ;	
-        (D27.f[DIR_0P0])[kNn   ] = f27_S   ;	
-        (D27.f[DIR_0M0])[kNs   ] = f27_N   ;	
-        (D27.f[DIR_00P])[kNt   ] = f27_B   ;	
-        (D27.f[DIR_00M])[kNb   ] = f27_T   ;	
-        (D27.f[DIR_PP0])[kNne  ] = f27_SW  ;	
-        (D27.f[DIR_MM0])[kNsw  ] = f27_NE  ;	
-        (D27.f[DIR_PM0])[kNse  ] = f27_NW  ;	
-        (D27.f[DIR_MP0])[kNnw  ] = f27_SE  ;	
-        (D27.f[DIR_P0P])[kNte  ] = f27_BW  ;	
-        (D27.f[DIR_M0M])[kNbw  ] = f27_TE  ;	
-        (D27.f[DIR_P0M])[kNbe  ] = f27_TW  ;	
-        (D27.f[DIR_M0P])[kNtw  ] = f27_BE  ;	
-        (D27.f[DIR_0PP])[kNtn  ] = f27_BS  ;	
-        (D27.f[DIR_0MM])[kNbs  ] = f27_TN  ;	
-        (D27.f[DIR_0PM])[kNbn  ] = f27_TS  ;	
-        (D27.f[DIR_0MP])[kNts  ] = f27_BN  ;	
-        (D27.f[DIR_000])[kNzero] = f27_ZERO;	
-        (D27.f[DIR_PPP])[kNtne ] = f27_BSW ;	
-        (D27.f[DIR_MMP])[kNtsw ] = f27_BNE ;	
-        (D27.f[DIR_PMP])[kNtse ] = f27_BNW ;	
-        (D27.f[DIR_MPP])[kNtnw ] = f27_BSE ;	
-        (D27.f[DIR_PPM])[kNbne ] = f27_TSW ;	
-        (D27.f[DIR_MMM])[kNbsw ] = f27_TNE ;	
-        (D27.f[DIR_PMM])[kNbse ] = f27_TNW ;	
-        (D27.f[DIR_MPM])[kNbnw ] = f27_TSE ;       
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADVel7( real* DD, 
-                                    real* DD7, 
-                                    real* temp,
-                                    real* velo,
-                                    real diffusivity,
-                                    int* k_Q, 
-                                    real* QQ,
-                                    unsigned int numberOfBCnodes, 
-                                    real om1, 
-                                    unsigned int* neighborX,
-                                    unsigned int* neighborY,
-                                    unsigned int* neighborZ,
-                                    unsigned long long numberOfLBnodes, 
-                                    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions7 D7;
-   if (isEvenTimestep==true)
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[1] = &DD7[1*numberOfLBnodes];
-      D7.f[2] = &DD7[2*numberOfLBnodes];
-      D7.f[3] = &DD7[3*numberOfLBnodes];
-      D7.f[4] = &DD7[4*numberOfLBnodes];
-      D7.f[5] = &DD7[5*numberOfLBnodes];
-      D7.f[6] = &DD7[6*numberOfLBnodes];
-   }
-   else
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[2] = &DD7[1*numberOfLBnodes];
-      D7.f[1] = &DD7[2*numberOfLBnodes];
-      D7.f[4] = &DD7[3*numberOfLBnodes];
-      D7.f[3] = &DD7[4*numberOfLBnodes];
-      D7.f[6] = &DD7[5*numberOfLBnodes];
-      D7.f[5] = &DD7[6*numberOfLBnodes];
-   }
-
-
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      //////////////////////////////////////////////////////////////////////////////////
-      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB;//, 
-
-      q_dirE   = &QQ[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      /*real drho*/;
-      real vx1_Inflow   = c0o1;
-      real vx2_Inflow   = c0o1;
-      real vx3_Inflow   = velo[k];
-      real ux_sq_Inflow = vx1_Inflow * vx1_Inflow;
-      real uy_sq_Inflow = vx2_Inflow * vx2_Inflow;
-      real uz_sq_Inflow = vx3_Inflow * vx3_Inflow;
-
-
-      ////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[DIR_000])[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); 
-
-      //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); 
-
-      //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); 
-
-      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[DIR_000])[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));
-      real 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));
-      real 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 cu_sq       =1.5f*(vx1*vx1+vx2*vx2+vx3*vx3);
-      real ux_sq       = vx1 * vx1;
-      real uy_sq       = vx2 * vx2;
-      real uz_sq       = vx3 * vx3;
-      real omegaD     = c3o1 - sqrt(c3o1);
-      real Lam         = -(c1o2-c1o1/omegaD);
-      real nue_d       = Lam/c3o1;
-      //real ae          = zero;
-      real ae          = diffusivity/nue_d - c1o1;
-
-      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
-      real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
-      real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
-      real TempD = temp[k];
-
-
-      f7_ZERO =  (D7.f[0])[kzero];
-      f7_W    =  (D7.f[1])[ke   ];
-      f7_E    =  (D7.f[2])[kw   ];
-      f7_S    =  (D7.f[3])[kn   ];
-      f7_N    =  (D7.f[4])[ks   ];
-      f7_B    =  (D7.f[5])[kt   ];
-      f7_T    =  (D7.f[6])[kb   ];
-
-      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
-
-      //feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      feq7_E    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
-      feq7_W    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
-      feq7_N    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
-      feq7_S    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
-      feq7_T    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
-      feq7_B    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
-
-      //feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      feqW7_E    = TempD*(c1o6*(ae+c1o1)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
-      feqW7_W    = TempD*(c1o6*(ae+c1o1)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
-      feqW7_N    = TempD*(c1o6*(ae+c1o1)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
-      feqW7_S    = TempD*(c1o6*(ae+c1o1)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
-      feqW7_T    = TempD*(c1o6*(ae+c1o1)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
-      feqW7_B    = TempD*(c1o6*(ae+c1o1)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
-
-      //////////////////////////////////////////////////////////////////////////
-      //pointertausch
-      if (isEvenTimestep==false)
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[1] = &DD7[1*numberOfLBnodes];
-         D7.f[2] = &DD7[2*numberOfLBnodes];
-         D7.f[3] = &DD7[3*numberOfLBnodes];
-         D7.f[4] = &DD7[4*numberOfLBnodes];
-         D7.f[5] = &DD7[5*numberOfLBnodes];
-         D7.f[6] = &DD7[6*numberOfLBnodes];
-      }
-      else
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[2] = &DD7[1*numberOfLBnodes];
-         D7.f[1] = &DD7[2*numberOfLBnodes];
-         D7.f[4] = &DD7[3*numberOfLBnodes];
-         D7.f[3] = &DD7[4*numberOfLBnodes];
-         D7.f[6] = &DD7[5*numberOfLBnodes];
-         D7.f[5] = &DD7[6*numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //DIR_P00
-      //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //DIR_M00
-      //(D7.f[3])[kn   ] = f7_N - feq7_N + feqW7_S; //DIR_0P0
-      //(D7.f[4])[ks   ] = f7_S - feq7_S + feqW7_N; //DIR_0M0
-      //(D7.f[5])[kt   ] = f7_T - feq7_T + feqW7_B; //DIR_00P
-      //(D7.f[6])[kb   ] = f7_B - feq7_B + feqW7_T; //DIR_00M
-
-      //////////////////////////////////////////////////////////////////////////
-      //mit Q's
-      real /*feq,*/ q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[2])[kw]=(c2o1*feqW7_W-(f7_E*(q*omegaD-c1o1)-omegaD*feq7_E*(q-c1o1))/(omegaD-c1o1)+f7_W*q)/(q+c1o1);//f7_W - feq7_W + feqW7_E;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[1])[ke]=(c2o1*feqW7_E-(f7_W*(q*omegaD-c1o1)-omegaD*feq7_W*(q-c1o1))/(omegaD-c1o1)+f7_E*q)/(q+c1o1);//f7_E - feq7_E + feqW7_W;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[4])[ks]=(c2o1*feqW7_S-(f7_N*(q*omegaD-c1o1)-omegaD*feq7_N*(q-c1o1))/(omegaD-c1o1)+f7_S*q)/(q+c1o1);//f7_S - feq7_S + feqW7_N;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[3])[kn]=(c2o1*feqW7_N-(f7_S*(q*omegaD-c1o1)-omegaD*feq7_S*(q-c1o1))/(omegaD-c1o1)+f7_N*q)/(q+c1o1);//f7_N - feq7_N + feqW7_S;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[6])[kb]=(c2o1*feqW7_B-(f7_T*(q*omegaD-c1o1)-omegaD*feq7_T*(q-c1o1))/(omegaD-c1o1)+f7_B*q)/(q+c1o1);//f7_B - feq7_B + feqW7_T;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         //q=0.;
-         (D7.f[5])[kt]=(c2o1*feqW7_T-(f7_B*(q*omegaD-c1o1)-omegaD*feq7_B*(q-c1o1))/(omegaD-c1o1)+f7_T*q)/(q+c1o1);//f7_T - feq7_T + feqW7_B;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////ohne Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
-      //}
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADVel27(real* DD, 
-                                    real* DD27, 
-                                    real* temp,
-                                    real* velo,
-                                    real diffusivity,
-                                    int* k_Q, 
-                                    real* QQ,
-                                    unsigned int numberOfBCnodes, 
-                                    real om1, 
-                                    unsigned int* neighborX,
-                                    unsigned int* neighborY,
-                                    unsigned int* neighborZ,
-                                    unsigned long long numberOfLBnodes, 
-                                    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[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 + f_ZERO; 
-
-      //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); 
-
-
-      //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); 
-
-      //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)+ f_ZERO;
-      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));
-      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[DIR_P00])[ke   ];
-      //real f27_E    = (D27.f[DIR_M00])[kw   ];
-      //real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      //real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      //real f27_B    = (D27.f[DIR_00P])[kt   ];
-      //real f27_T    = (D27.f[DIR_00M])[kb   ];
-      //real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      //real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      //real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      //real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      //real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      //real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      //real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      //real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      //real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      //real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      //real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      //real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      //real f27_ZERO = (D27.f[DIR_000])[kzero];
-      //real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      //real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      //real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      //real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      //real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      //real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      //real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      //real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-      //                  f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-      //                  f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      //real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      //real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      //real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      //real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      //real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      //real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      //real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      //real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      //real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      //real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      //real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      //real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      //real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      //real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      //real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      //real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      //real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      //real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      //real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      //real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      //real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      //real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      //real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      //real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      //real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      //real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real TempD = temp[k];
-      //real TempD = four;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      // velocity inflow
-      //vx1   = velo[k]; //zero;
-      //vx2   = zero; //velo[k];//zero;//velo[k];
-      //vx3   = zero;
-
-      ////real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      //real feqW27_E    =   c2over27* (TempD+(one+TempD)*(three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq));
-      //real feqW27_W    =   c2over27* (TempD+(one+TempD)*(three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq));
-      //real feqW27_N    =   c2over27* (TempD+(one+TempD)*(three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq));
-      //real feqW27_S    =   c2over27* (TempD+(one+TempD)*(three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq));
-      //real feqW27_T    =   c2over27* (TempD+(one+TempD)*(three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq));
-      //real feqW27_B    =   c2over27* (TempD+(one+TempD)*(three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq));
-      //real feqW27_NE   =   c1over54* (TempD+(one+TempD)*(three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      //real feqW27_SW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      //real feqW27_SE   =   c1over54* (TempD+(one+TempD)*(three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      //real feqW27_NW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      //real feqW27_TE   =   c1over54* (TempD+(one+TempD)*(three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      //real feqW27_BW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      //real feqW27_BE   =   c1over54* (TempD+(one+TempD)*(three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      //real feqW27_TW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      //real feqW27_TN   =   c1over54* (TempD+(one+TempD)*(three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      //real feqW27_BS   =   c1over54* (TempD+(one+TempD)*(three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      //real feqW27_BN   =   c1over54* (TempD+(one+TempD)*(three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      //real feqW27_TS   =   c1over54* (TempD+(one+TempD)*(three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      //real feqW27_TNE  =   c1over216*(TempD+(one+TempD)*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      //real feqW27_BSW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      //real feqW27_BNE  =   c1over216*(TempD+(one+TempD)*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      //real feqW27_TSW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      //real feqW27_TSE  =   c1over216*(TempD+(one+TempD)*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      //real feqW27_BNW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      //real feqW27_BSE  =   c1over216*(TempD+(one+TempD)*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      //real feqW27_TNW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
-      //
-      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //(D27.f[DIR_M00])[kw  ]= four;
-      //(D27.f[DIR_P00])[ke  ]= four;
-      //(D27.f[DIR_0M0])[ks  ]= four;
-      //(D27.f[DIR_0P0])[kn  ]= four;
-      //(D27.f[DIR_00M])[kb  ]= four;
-      //(D27.f[DIR_00P])[kt  ]= four;
-      //(D27.f[DIR_MM0])[ksw ]= four;
-      //(D27.f[DIR_PP0])[kne ]= four;
-      //(D27.f[DIR_MP0])[knw ]= four;
-      //(D27.f[DIR_PM0])[kse ]= four;
-      //(D27.f[DIR_M0M])[kbw ]= four;
-      //(D27.f[DIR_P0P])[kte ]= four;
-      //(D27.f[DIR_M0P])[ktw ]= four;
-      //(D27.f[DIR_P0M])[kbe ]= four;
-      //(D27.f[DIR_0MM])[kbs ]= four;
-      //(D27.f[DIR_0PP])[ktn ]= four;
-      //(D27.f[DIR_0MP])[kts ]= four;
-      //(D27.f[DIR_0PM])[kbn ]= four;
-      //(D27.f[DIR_MMM])[kbsw]= four;
-      //(D27.f[DIR_PPP])[ktne]= four;
-      //(D27.f[DIR_MMP])[ktsw]= four;
-      //(D27.f[DIR_PPM])[kbne]= four;
-      //(D27.f[DIR_MPM])[kbnw]= four;
-      //(D27.f[DIR_PMP])[ktse]= four;
-      //(D27.f[DIR_MPP])[ktnw]= four;
-      //(D27.f[DIR_PMM])[kbse]= four;
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QAD7( real* DD, 
-                                 real* DD7, 
-                                 real* temp,
-                                 real diffusivity,
-                                 int* k_Q, 
-                                 real* QQ,
-                                 unsigned int numberOfBCnodes, 
-                                 real om1, 
-                                 unsigned int* neighborX,
-                                 unsigned int* neighborY,
-                                 unsigned int* neighborZ,
-                                 unsigned long long numberOfLBnodes, 
-                                 bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions7 D7;
-   if (isEvenTimestep==true)
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[1] = &DD7[1*numberOfLBnodes];
-      D7.f[2] = &DD7[2*numberOfLBnodes];
-      D7.f[3] = &DD7[3*numberOfLBnodes];
-      D7.f[4] = &DD7[4*numberOfLBnodes];
-      D7.f[5] = &DD7[5*numberOfLBnodes];
-      D7.f[6] = &DD7[6*numberOfLBnodes];
-   }
-   else
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[2] = &DD7[1*numberOfLBnodes];
-      D7.f[1] = &DD7[2*numberOfLBnodes];
-      D7.f[4] = &DD7[3*numberOfLBnodes];
-      D7.f[3] = &DD7[4*numberOfLBnodes];
-      D7.f[6] = &DD7[5*numberOfLBnodes];
-      D7.f[5] = &DD7[6*numberOfLBnodes];
-   }
-
-
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      //q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      //q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      //q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      //q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      //q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      //q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      //q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      //q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      //q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      //q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      //q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      //q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      //q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      //q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      //q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      //q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      //q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      //q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      //q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      //q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-
-
-      //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); 
-
-      //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[DIR_000])[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));
-      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 cu_sq       =c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      real ux_sq       = vx1 * vx1;
-      real uy_sq       = vx2 * vx2;
-      real uz_sq       = vx3 * vx3;
-      real omegaD     = c3o1 - sqrt(c3o1);
-      real Lam         = -(c1o2-c1o1/omegaD);
-      real nue_d       = Lam/c3o1;
-      //real ae          = zero;
-      real ae          = diffusivity/nue_d - c1o1;
-
-      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
-      real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
-      real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
-      real TempD = temp[k];
-
-
-      f7_ZERO =  (D7.f[0])[kzero];
-      f7_W    =  (D7.f[1])[ke   ];
-      f7_E    =  (D7.f[2])[kw   ];
-      f7_S    =  (D7.f[3])[kn   ];
-      f7_N    =  (D7.f[4])[ks   ];
-      f7_B    =  (D7.f[5])[kt   ];
-      f7_T    =  (D7.f[6])[kb   ];
-
-      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
-
-      //feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      feq7_E    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
-      feq7_W    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
-      feq7_N    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
-      feq7_S    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
-      feq7_T    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
-      feq7_B    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
-
-      //feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      feqW7_E    = TempD*(c1o6*(ae+c1o1));//+c1o2*(ux_sq)+vx1*c1o2);
-      feqW7_W    = TempD*(c1o6*(ae+c1o1));//+c1o2*(ux_sq)-vx1*c1o2);
-      feqW7_N    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uy_sq)+vx2*c1o2);
-      feqW7_S    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uy_sq)-vx2*c1o2);
-      feqW7_T    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uz_sq)+vx3*c1o2);
-      feqW7_B    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uz_sq)-vx3*c1o2);
-
-      //////////////////////////////////////////////////////////////////////////
-      //pointertausch
-      if (isEvenTimestep==false)
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[1] = &DD7[1*numberOfLBnodes];
-         D7.f[2] = &DD7[2*numberOfLBnodes];
-         D7.f[3] = &DD7[3*numberOfLBnodes];
-         D7.f[4] = &DD7[4*numberOfLBnodes];
-         D7.f[5] = &DD7[5*numberOfLBnodes];
-         D7.f[6] = &DD7[6*numberOfLBnodes];
-      }
-      else
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[2] = &DD7[1*numberOfLBnodes];
-         D7.f[1] = &DD7[2*numberOfLBnodes];
-         D7.f[4] = &DD7[3*numberOfLBnodes];
-         D7.f[3] = &DD7[4*numberOfLBnodes];
-         D7.f[6] = &DD7[5*numberOfLBnodes];
-         D7.f[5] = &DD7[6*numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //DIR_P00
-      //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //DIR_M00
-      //(D7.f[3])[kn   ] = f7_N - feq7_N + feqW7_S; //DIR_0P0
-      //(D7.f[4])[ks   ] = f7_S - feq7_S + feqW7_N; //DIR_0M0
-      //(D7.f[5])[kt   ] = f7_T - feq7_T + feqW7_B; //DIR_00P
-      //(D7.f[6])[kb   ] = f7_B - feq7_B + feqW7_T; //DIR_00M
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////mit Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
-      //}
-
-      //////////////////////////////////////////////////////////////////////////
-      //ohne Q's
-      real /*feq,*/ q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADDirichlet27(
-											 real* DD, 
-											 real* DD27, 
-											 real* temp,
-											 real diffusivity,
-											 int* k_Q, 
-											 real* QQ,
-											 unsigned int numberOfBCnodes, 
-											 real om1, 
-											 unsigned int* neighborX,
-											 unsigned int* neighborY,
-											 unsigned int* neighborZ,
-											 unsigned long long numberOfLBnodes, 
-											 bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[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 + f_ZERO; 
-
-      //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); 
-
-
-      //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); 
-
-      //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)+f_ZERO;
-      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));
-      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[DIR_P00])[ke   ];
-      real f27_E    = (D27.f[DIR_M00])[kw   ];
-      real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      real f27_B    = (D27.f[DIR_00P])[kt   ];
-      real f27_T    = (D27.f[DIR_00M])[kb   ];
-      real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      real f27_ZERO = (D27.f[DIR_000])[kzero];
-      real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-         f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-         f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real TempD = temp[k];//one;//temp[k];
-
-      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=0.1f;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[  ke   ]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADBB27( real* DD, 
-                                   real* DD27, 
-                                   real* temp,
-                                   real diffusivity,
-                                   int* k_Q, 
-                                   real* QQ,
-                                   unsigned int numberOfBCnodes, 
-                                   real om1, 
-                                   unsigned int* neighborX,
-                                   unsigned int* neighborY,
-                                   unsigned int* neighborZ,
-                                   unsigned long long numberOfLBnodes, 
-                                   bool isEvenTimestep)
-{
-   //Distributions27 D;
-   //if (isEvenTimestep==true)
-   //{
-   //   D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
-   //} 
-   //else
-   //{
-   //   D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
-   //}
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      //real f_E    = (D.f[DIR_M00])[kw   ];
-      //real f_S    = (D.f[DIR_0P0])[kn   ];
-      //real f_N    = (D.f[DIR_0M0])[ks   ];
-      //real f_B    = (D.f[DIR_00P])[kt   ];
-      //real f_T    = (D.f[DIR_00M])[kb   ];
-      //real f_SW   = (D.f[DIR_PP0])[kne  ];
-      //real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      //real f_NW   = (D.f[DIR_PM0])[kse  ];
-      //real f_SE   = (D.f[DIR_MP0])[knw  ];
-      //real f_BW   = (D.f[DIR_P0P])[kte  ];
-      //real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      //real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      //real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      //real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      //real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      //real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      //real f_BN   = (D.f[DIR_0MP])[kts  ];
-      //real f_ZERO = (D.f[DIR_000])[kzero];
-      //real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      //real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      //real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      //real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      //real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      //real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      //real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      //real f_TSE  = (D.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      //real vx1, vx2, vx3, /*drho, feq,*/ q;
-      real 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 + f_ZERO; 
-
-      //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); 
-
-
-      //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); 
-
-      //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)+f_ZERO;
-      //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));
-      //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[DIR_P00])[ke   ];
-      real f27_E    = (D27.f[DIR_M00])[kw   ];
-      real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      real f27_B    = (D27.f[DIR_00P])[kt   ];
-      real f27_T    = (D27.f[DIR_00M])[kb   ];
-      real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      //real f27_ZERO = (D27.f[DIR_000])[kzero];
-      real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      //real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-      //   f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-      //   f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      //real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      //real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      //real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      //real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      //real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      //real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      //real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      //real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      //real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      //real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      //real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      //real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      //real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      //real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      //real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      //real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      //real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      //real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      //real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      //real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      //real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      //real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      //real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      //real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      //real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      //real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //real TempD = temp[k];
-
-      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      //real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      //real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      //real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      //real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      //real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      //real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      //real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      //real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      //real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      //real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      //real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      //real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      //real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      //real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      //real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      //real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      //real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      //real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      //real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      //real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      //real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      //real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      //real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      //real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      //real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      //real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=0.1f;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw  ]=f27_E  ;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke  ]=f27_W  ;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks  ]=f27_N  ;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn  ]=f27_S  ;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb  ]=f27_T  ;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt  ]=f27_B  ;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]=f27_NE ;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]=f27_SW ;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]=f27_SE ;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]=f27_NW ;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]=f27_TE ;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]=f27_BW ;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]=f27_BE ;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]=f27_TW ;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]=f27_TN ;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]=f27_BS ;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]=f27_BN ;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]=f27_TS ;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]=f27_TNE;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]=f27_BSW;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]=f27_BNE;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]=f27_TSW;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]=f27_TSE;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]=f27_BNW;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]=f27_BSE;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]=f27_TNW;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//////																																		  //////
-//////                 										incomp   																		  //////
-//////																																		  //////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QNoSlipADincomp7(
-											 real* DD, 
-											 real* DD7, 
-											 real* temp,
-											 real diffusivity,
-											 int* k_Q, 
-											 real* QQ,
-											 unsigned int numberOfBCnodes, 
-											 real om1, 
-											 unsigned int* neighborX,
-											 unsigned int* neighborY,
-											 unsigned int* neighborZ,
-											 unsigned long long numberOfLBnodes, 
-											 bool isEvenTimestep)
-{
-   //Distributions27 D;
-   //if (isEvenTimestep==true)
-   //{
-   //   D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
-   //} 
-   //else
-   //{
-   //   D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
-   //}
-
-   Distributions7 D7;
-   if (isEvenTimestep==true)
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[1] = &DD7[1*numberOfLBnodes];
-      D7.f[2] = &DD7[2*numberOfLBnodes];
-      D7.f[3] = &DD7[3*numberOfLBnodes];
-      D7.f[4] = &DD7[4*numberOfLBnodes];
-      D7.f[5] = &DD7[5*numberOfLBnodes];
-      D7.f[6] = &DD7[6*numberOfLBnodes];
-   }
-   else
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[2] = &DD7[1*numberOfLBnodes];
-      D7.f[1] = &DD7[2*numberOfLBnodes];
-      D7.f[4] = &DD7[3*numberOfLBnodes];
-      D7.f[3] = &DD7[4*numberOfLBnodes];
-      D7.f[6] = &DD7[5*numberOfLBnodes];
-      D7.f[5] = &DD7[6*numberOfLBnodes];
-   }
-
-
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      //////////////////////////////////////////////////////////////////////////////////
-      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB;
-
-      q_dirE   = &QQ[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * 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];
-      //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 f_W    = (D.f[DIR_P00])[ke   ];
-      //real f_E    = (D.f[DIR_M00])[kw   ];
-      //real f_S    = (D.f[DIR_0P0])[kn   ];
-      //real f_N    = (D.f[DIR_0M0])[ks   ];
-      //real f_B    = (D.f[DIR_00P])[kt   ];
-      //real f_T    = (D.f[DIR_00M])[kb   ];
-      //real f_SW   = (D.f[DIR_PP0])[kne  ];
-      //real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      //real f_NW   = (D.f[DIR_PM0])[kse  ];
-      //real f_SE   = (D.f[DIR_MP0])[knw  ];
-      //real f_BW   = (D.f[DIR_P0P])[kte  ];
-      //real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      //real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      //real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      //real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      //real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      //real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      //real f_BN   = (D.f[DIR_0MP])[kts  ];
-      //real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      //real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      //real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      //real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      //real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      //real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      //real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      //real f_TSE  = (D.f[DIR_MPM])[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));
-		 ////d�rrrrrty !!!!!!!!!!!!!
-   //      real vx1     =  ten * ((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     =  ten * ((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     =  ten * ((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 cu_sq       =c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      //real ux_sq       = vx1 * vx1;
-      //real uy_sq       = vx2 * vx2;
-      //real uz_sq       = vx3 * vx3;
-      ////////////////////////////////////////////////////////////////////////////////
-	  //BGK
-      //real omegaD     = three - sqrt(three);
-      //real Lam         = -(c1o2-one/omegaD);
-      //real nue_d       = Lam/three;
-      //real ae          = diffusivity/nue_d - one; //zero;
-
-      real f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
-      //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
-      //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
-      real TempD = temp[k];
-
-
-      //f7_ZERO =  (D7.f[0])[kzero];
-      f7_W    =  (D7.f[1])[ke   ];
-      f7_E    =  (D7.f[2])[kw   ];
-      f7_S    =  (D7.f[3])[kn   ];
-      f7_N    =  (D7.f[4])[ks   ];
-      f7_B    =  (D7.f[5])[kt   ];
-      f7_T    =  (D7.f[6])[kb   ];
-
-      //real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
-
-      ////feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      //feq7_E    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
-      //feq7_W    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
-      //feq7_N    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
-      //feq7_S    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
-      //feq7_T    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
-      //feq7_B    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
-
-      ////feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      //feqW7_E    = TempD*(c1o6*(ae+one));//+c1o2*(ux_sq)+vx1*c1o2);
-      //feqW7_W    = TempD*(c1o6*(ae+one));//+c1o2*(ux_sq)-vx1*c1o2);
-      //feqW7_N    = TempD*(c1o6*(ae+one));//+c1o2*(uy_sq)+vx2*c1o2);
-      //feqW7_S    = TempD*(c1o6*(ae+one));//+c1o2*(uy_sq)-vx2*c1o2);
-      //feqW7_T    = TempD*(c1o6*(ae+one));//+c1o2*(uz_sq)+vx3*c1o2);
-      //feqW7_B    = TempD*(c1o6*(ae+one));//+c1o2*(uz_sq)-vx3*c1o2);
-
-      ////////////////////////////////////////////////////////////////////////////////
-	  //TRT
-      real cs2     = c1o4;
-      //////////////////////////////////////////////////////////////////////////
-      //pointertausch
-      if (isEvenTimestep==false)
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[1] = &DD7[1*numberOfLBnodes];
-         D7.f[2] = &DD7[2*numberOfLBnodes];
-         D7.f[3] = &DD7[3*numberOfLBnodes];
-         D7.f[4] = &DD7[4*numberOfLBnodes];
-         D7.f[5] = &DD7[5*numberOfLBnodes];
-         D7.f[6] = &DD7[6*numberOfLBnodes];
-      }
-      else
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[2] = &DD7[1*numberOfLBnodes];
-         D7.f[1] = &DD7[2*numberOfLBnodes];
-         D7.f[4] = &DD7[3*numberOfLBnodes];
-         D7.f[3] = &DD7[4*numberOfLBnodes];
-         D7.f[6] = &DD7[5*numberOfLBnodes];
-         D7.f[5] = &DD7[6*numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////mit Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=zero;
-      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
-      //}
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////ohne Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[2])[kw]=f7_W;// - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[1])[ke]=f7_E;// - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[4])[ks]=f7_S;// - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[3])[kn]=f7_N;// - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[6])[kb]=f7_B;// - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[5])[kt]=f7_T;// - feq7_T + feqW7_B;
-      //}
-
-
-      //////////////////////////////////////////////////////////////////////////
-      //ohne Q's aber mit TRT
-      real /*feq,*/ q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[2])[kw]= -f7_W + cs2 * TempD;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[1])[ke]= -f7_E + cs2 * TempD;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[4])[ks]= -f7_S + cs2 * TempD;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[3])[kn]= -f7_N + cs2 * TempD;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[6])[kb]= -f7_B + cs2 * TempD;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[5])[kt]= -f7_T + cs2 * TempD;
-      }
-
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QNoSlipADincomp27(
-											 real* DD, 
-											 real* DD27, 
-											 real* temp,
-											 real diffusivity,
-											 int* k_Q, 
-											 real* QQ,
-											 unsigned int numberOfBCnodes, 
-											 real om1, 
-											 unsigned int* neighborX,
-											 unsigned int* neighborY,
-											 unsigned int* neighborZ,
-											 unsigned long long numberOfLBnodes, 
-											 bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      //real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[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[DIR_P00])[ke   ];
-      real f27_E    = (D27.f[DIR_M00])[kw   ];
-      real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      real f27_B    = (D27.f[DIR_00P])[kt   ];
-      real f27_T    = (D27.f[DIR_00M])[kb   ];
-      real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      real f27_ZERO = (D27.f[DIR_000])[kzero];
-      real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-         f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-         f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real TempD = temp[k];
-
-      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=0.1f;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  real q;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADVeloIncomp7(
-											real* DD, 
-											real* DD7, 
-											real* temp,
-											real* velo,
-											real diffusivity,
-											int* k_Q, 
-											real* QQ,
-											unsigned int numberOfBCnodes, 
-											real om1, 
-											unsigned int* neighborX,
-											unsigned int* neighborY,
-											unsigned int* neighborZ,
-											unsigned long long numberOfLBnodes, 
-											bool isEvenTimestep)
-{
-   //Distributions27 D;
-   //if (isEvenTimestep==true)
-   //{
-   //   D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
-   //} 
-   //else
-   //{
-   //   D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
-   //}
-
-   Distributions7 D7;
-   if (isEvenTimestep==true)
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[1] = &DD7[1*numberOfLBnodes];
-      D7.f[2] = &DD7[2*numberOfLBnodes];
-      D7.f[3] = &DD7[3*numberOfLBnodes];
-      D7.f[4] = &DD7[4*numberOfLBnodes];
-      D7.f[5] = &DD7[5*numberOfLBnodes];
-      D7.f[6] = &DD7[6*numberOfLBnodes];
-   }
-   else
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[2] = &DD7[1*numberOfLBnodes];
-      D7.f[1] = &DD7[2*numberOfLBnodes];
-      D7.f[4] = &DD7[3*numberOfLBnodes];
-      D7.f[3] = &DD7[4*numberOfLBnodes];
-      D7.f[6] = &DD7[5*numberOfLBnodes];
-      D7.f[5] = &DD7[6*numberOfLBnodes];
-   }
-
-
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      //////////////////////////////////////////////////////////////////////////////////
-      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB; 
-
-      q_dirE   = &QQ[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * 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];
-      //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 f_W    = (D.f[DIR_P00])[ke   ];
-      //real f_E    = (D.f[DIR_M00])[kw   ];
-      //real f_S    = (D.f[DIR_0P0])[kn   ];
-      //real f_N    = (D.f[DIR_0M0])[ks   ];
-      //real f_B    = (D.f[DIR_00P])[kt   ];
-      //real f_T    = (D.f[DIR_00M])[kb   ];
-      //real f_SW   = (D.f[DIR_PP0])[kne  ];
-      //real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      //real f_NW   = (D.f[DIR_PM0])[kse  ];
-      //real f_SE   = (D.f[DIR_MP0])[knw  ];
-      //real f_BW   = (D.f[DIR_P0P])[kte  ];
-      //real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      //real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      //real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      //real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      //real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      //real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      //real f_BN   = (D.f[DIR_0MP])[kts  ];
-      //real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      //real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      //real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      //real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      //real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      //real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      //real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      //real f_TSE  = (D.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      //real vx1_Inflow   = c0o1;
-      //real vx2_Inflow   = velo[k];
-      //real vx3_Inflow   = c0o1;
-      //real ux_sq_Inflow = vx1_Inflow * vx1_Inflow;
-      //real uy_sq_Inflow = vx2_Inflow * vx2_Inflow;
-      //real uz_sq_Inflow = vx3_Inflow * vx3_Inflow;
-      ////////////////////////////////////////////////////////////////////////////////
-      //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));
-		 ////d�rrrrrty !!!!!!!!!!!!!
-   //      real vx1     =  ten * ((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     =  ten * ((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     =  ten * ((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 cu_sq       =1.5f*(vx1*vx1+vx2*vx2+vx3*vx3);
-      //real ux_sq       = vx1 * vx1;
-      //real uy_sq       = vx2 * vx2;
-      //real uz_sq       = vx3 * vx3;
-
-      real f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
-      //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
-      //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
-      real TempD = temp[k];
-
-      //f7_ZERO =  (D7.f[0])[kzero];
-      f7_W    =  (D7.f[1])[ke   ];
-      f7_E    =  (D7.f[2])[kw   ];
-      f7_S    =  (D7.f[3])[kn   ];
-      f7_N    =  (D7.f[4])[ks   ];
-      f7_B    =  (D7.f[5])[kt   ];
-      f7_T    =  (D7.f[6])[kb   ];
-
-      //real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
-
-      ////////////////////////////////////////////////////////////////////////////////
-	  //BGK
-      //real omegaD     = three - sqrt(three);
-      //real Lam         = -(c1o2-one/omegaD);
-      //real nue_d       = Lam/three;
-      ////real ae          = zero;
-      //real ae          = diffusivity/nue_d - one;
-
-      ////feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      //feq7_E    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
-      //feq7_W    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
-      //feq7_N    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
-      //feq7_S    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
-      //feq7_T    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
-      //feq7_B    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
-
-      ////feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-      //feqW7_E    = TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
-      //feqW7_W    = TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
-      //feqW7_N    = TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
-      //feqW7_S    = TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
-      //feqW7_T    = TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
-      //feqW7_B    = TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
-
-   //      ////////////////////////////////////////////////////////////////////////////////
-		 ////TRT  Yoshida Kernel - based on Ying
-         real cs2         = c1o4;
-   //      real Lam         = diffusivity/(one)/cs2;
-   //      real omegaD      = - one / (Lam + c1o2);
-   //      real ae          = zero;
-   //      ////////////////////////////////////////////////////////////////////////////////
-		 //real Mom000 = f7_ZERO + f7_W + f7_E + f7_N + f7_S + f7_T + f7_B; //1
-   //      real Mom100 = f7_E - f7_W;
-   //      real Mom010 = f7_N - f7_S;
-   //      real Mom001 = f7_T - f7_B;
-   //      real Mom222 = six*f7_ZERO - f7_W - f7_E - f7_N - f7_S - f7_T - f7_B;
-   //      real Mom200 = two*f7_W + two*f7_E - f7_N - f7_S - f7_T - f7_B;
-   //      real Mom022 = f7_N + f7_S - f7_T - f7_B;
-
-   //      real Meq000 = ConcD;
-   //      real Meq100 = ConcD*vx1;
-   //      real Meq010 = ConcD*vx2;
-   //      real Meq001 = ConcD*vx3;
-   //      real Meq222 = c3o4*ConcD;
-   //      real Meq200 = zero;
-   //      real Meq022 = zero;
-
-   //      // relaxation TRT Yoshida
-
-   //      // odd 
-   //      Mom100 = omegaD * (Mom100-Meq100);
-   //      Mom010 = omegaD * (Mom010-Meq010);
-   //      Mom001 = omegaD * (Mom001-Meq001);
-   //      
-   //      // even
-   //      Mom000 = -one*(Mom000-Meq000);
-   //      Mom222 = -one*(Mom222-Meq222);
-   //      Mom200 = -one*(Mom200-Meq200);
-   //      Mom022 = -one*(Mom022-Meq022);
-   //      
-   //      //Back transformation to distributions
-   //      f7_ZERO = f7_ZERO + c1o7*Mom000 + c1o7*Mom222;                                                  //1
-   //      f7_E    = f7_E    + c1o7*Mom000 + c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200;                 //2
-   //      f7_W    = f7_W    + c1o7*Mom000 - c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200;                 //3
-   //      f7_N    = f7_N    + c1o7*Mom000 + c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //4
-   //      f7_S    = f7_S    + c1o7*Mom000 - c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //5
-   //      f7_T    = f7_T    + c1o7*Mom000 + c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //6
-   //      f7_B    = f7_B    + c1o7*Mom000 - c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //7
-
-
-
-
-
-      //////////////////////////////////////////////////////////////////////////
-      //pointertausch
-      if (isEvenTimestep==false)
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[1] = &DD7[1*numberOfLBnodes];
-         D7.f[2] = &DD7[2*numberOfLBnodes];
-         D7.f[3] = &DD7[3*numberOfLBnodes];
-         D7.f[4] = &DD7[4*numberOfLBnodes];
-         D7.f[5] = &DD7[5*numberOfLBnodes];
-         D7.f[6] = &DD7[6*numberOfLBnodes];
-      }
-      else
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[2] = &DD7[1*numberOfLBnodes];
-         D7.f[1] = &DD7[2*numberOfLBnodes];
-         D7.f[4] = &DD7[3*numberOfLBnodes];
-         D7.f[3] = &DD7[4*numberOfLBnodes];
-         D7.f[6] = &DD7[5*numberOfLBnodes];
-         D7.f[5] = &DD7[6*numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////mit Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
-      //}
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////ohne Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
-      //}
-
-      //////////////////////////////////////////////////////////////////////////
-      //ohne Q's aber mit TRT
-      real /*feq,*/ q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[2])[kw]= -f7_W + cs2 * TempD;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[1])[ke]= -f7_E + cs2 * TempD;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[4])[ks]= -f7_S + cs2 * TempD;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[3])[kn]= -f7_N + cs2 * TempD;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[6])[kb]= -f7_B + cs2 * TempD;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[5])[kt]= -f7_T + cs2 * TempD;
-      }
-
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADVeloIncomp27(
-											real* DD, 
-											real* DD27, 
-											real* temp,
-											real* velo,
-											real diffusivity,
-											int* k_Q, 
-											real* QQ,
-											unsigned int numberOfBCnodes, 
-											real om1, 
-											unsigned int* neighborX,
-											unsigned int* neighborY,
-											unsigned int* neighborZ,
-											unsigned long long numberOfLBnodes, 
-											bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      //real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[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[DIR_P00])[ke   ];
-      //real f27_E    = (D27.f[DIR_M00])[kw   ];
-      //real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      //real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      //real f27_B    = (D27.f[DIR_00P])[kt   ];
-      //real f27_T    = (D27.f[DIR_00M])[kb   ];
-      //real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      //real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      //real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      //real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      //real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      //real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      //real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      //real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      //real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      //real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      //real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      //real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      //real f27_ZERO = (D27.f[DIR_000])[kzero];
-      //real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      //real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      //real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      //real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      //real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      //real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      //real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      //real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-      //                  f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-      //                  f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      //real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      //real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      //real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      //real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      //real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      //real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      //real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      //real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      //real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      //real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      //real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      //real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      //real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      //real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      //real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      //real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      //real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      //real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      //real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      //real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      //real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      //real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      //real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      //real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      //real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      //real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real TempD = temp[k];
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      // velocity inflow
-      vx1   = velo[k];//zero;
-      vx2   = c0o1;//velo[k];
-      vx3   = c0o1;
-
-      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real q;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADPressIncomp7( real* DD, 
-										   real* DD7, 
-										   real* temp,
-										   real* velo,
-										   real diffusivity,
-										   int* k_Q, 
-										   real* QQ,
-										   unsigned int numberOfBCnodes, 
-										   real om1, 
-										   unsigned int* neighborX,
-										   unsigned int* neighborY,
-										   unsigned int* neighborZ,
-										   unsigned long long numberOfLBnodes, 
-										   bool isEvenTimestep)
-{
-  /* Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-      D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-      D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-      D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-      D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-      D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-      D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-      D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-      D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-      D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-      D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-      D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-      D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-      D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-      D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-      D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-      D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-      D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-      D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-      D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-      D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-      D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-      D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-      D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-      D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-      D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-      D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-      D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-      D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-      D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-      D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-      D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-      D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-      D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-      D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-      D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-      D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-      D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-      D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-      D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-      D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
-   }*/
-
-   Distributions7 D7;
-   if (isEvenTimestep==true)
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[1] = &DD7[1*numberOfLBnodes];
-      D7.f[2] = &DD7[2*numberOfLBnodes];
-      D7.f[3] = &DD7[3*numberOfLBnodes];
-      D7.f[4] = &DD7[4*numberOfLBnodes];
-      D7.f[5] = &DD7[5*numberOfLBnodes];
-      D7.f[6] = &DD7[6*numberOfLBnodes];
-   }
-   else
-   {
-      D7.f[0] = &DD7[0*numberOfLBnodes];
-      D7.f[2] = &DD7[1*numberOfLBnodes];
-      D7.f[1] = &DD7[2*numberOfLBnodes];
-      D7.f[4] = &DD7[3*numberOfLBnodes];
-      D7.f[3] = &DD7[4*numberOfLBnodes];
-      D7.f[6] = &DD7[5*numberOfLBnodes];
-      D7.f[5] = &DD7[6*numberOfLBnodes];
-   }
-
-
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      //////////////////////////////////////////////////////////////////////////////////
-      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB; 
-
-      q_dirE   = &QQ[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * 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];
-      //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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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));
-		 ////d�rrrrrty !!!!!!!!!!!!!
-   //      real vx1     =  ten * ((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     =  ten * ((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     =  ten * ((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 cu_sq       =1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
-      //real ux_sq       = vx1 * vx1;
-      //real uy_sq       = vx2 * vx2;
-      //real uz_sq       = vx3 * vx3;
-      //////////////////////////////////////////////////////////////////////////
-	  //BGK
-      //real omegaD     = three - sqrt(three);
-      //real Lam         = -(c1o2-one/omegaD);
-      //real nue_d       = Lam/three;
-      ////real ae          = zero;
-      //real ae          = diffusivity/nue_d - one;
-
-      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
-      //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
-      //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
-      //real TempD = temp[k];
-
-
-      f7_ZERO =  (D7.f[0])[kzero];
-      f7_W    =  (D7.f[1])[ke   ];
-      f7_E    =  (D7.f[2])[kw   ];
-      f7_S    =  (D7.f[3])[kn   ];
-      f7_N    =  (D7.f[4])[ks   ];
-      f7_B    =  (D7.f[5])[kt   ];
-      f7_T    =  (D7.f[6])[kb   ];
-
-      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
-
-      ////feq7_ZERO = ConcD*(c1o3*(ae*(-3.0))-(ux_sq+uy_sq+uz_sq));
-      //feq7_E    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
-      //feq7_W    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
-      //feq7_N    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
-      //feq7_S    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
-      //feq7_T    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
-      //feq7_B    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
-
-      ////feq7_ZERO = TempD*(c1o3*(ae*(-3.0f))-(ux_sq+uy_sq+uz_sq));
-      //feqW7_E    = feq7_E;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
-      //feqW7_W    = feq7_W;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
-      //feqW7_N    = feq7_N;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
-      //feqW7_S    = feq7_S;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
-      //feqW7_T    = feq7_T;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
-      //feqW7_B    = feq7_B;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
-
-      //////////////////////////////////////////////////////////////////////////
-	  //TRT  Yoshida Kernel - based on Ying
-      real cs2         = c1o4;
-      real Lam         = diffusivity/(c1o1)/cs2;
-      //real omegaD      = - c1o1 / (Lam + c1o2);
-      real nue_d       = Lam/c3o1;
-
-      //////////////////////////////////////////////////////////////////////////
-      //pointertausch
-      if (isEvenTimestep==false)
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[1] = &DD7[1*numberOfLBnodes];
-         D7.f[2] = &DD7[2*numberOfLBnodes];
-         D7.f[3] = &DD7[3*numberOfLBnodes];
-         D7.f[4] = &DD7[4*numberOfLBnodes];
-         D7.f[5] = &DD7[5*numberOfLBnodes];
-         D7.f[6] = &DD7[6*numberOfLBnodes];
-      }
-      else
-      {
-         D7.f[0] = &DD7[0*numberOfLBnodes];
-         D7.f[2] = &DD7[1*numberOfLBnodes];
-         D7.f[1] = &DD7[2*numberOfLBnodes];
-         D7.f[4] = &DD7[3*numberOfLBnodes];
-         D7.f[3] = &DD7[4*numberOfLBnodes];
-         D7.f[6] = &DD7[5*numberOfLBnodes];
-         D7.f[5] = &DD7[6*numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////mit Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-1.)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-1.)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   //q=0.;
-      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
-      //}
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////ohne Q's
-      //real /*feq,*/ q;
-      //q = q_dirE[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[2])[kw]= 0.1;//test
-      //   //(D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
-      //}
-
-      //q = q_dirW[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[1])[ke]= 0.1;//test
-      //   //(D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
-      //}
-
-      //q = q_dirN[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[4])[ks]= 0.1;//test
-      //   //(D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
-      //}
-
-      //q = q_dirS[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[3])[kn]= 0.1;//test
-      //   //(D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
-      //}
-
-      //q = q_dirT[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[6])[kb]= 0.1;//test
-      //   //(D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
-      //}
-
-      //q = q_dirB[k];
-      //if (q>=zero && q<=one)
-      //{
-      //   (D7.f[5])[kt]= 0.1;//test
-      //   //(D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
-      //}
-
-
-      //////////////////////////////////////////////////////////////////////////
-      //ohne Q's aber mit TRT
-      real /*feq,*/ q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[2])[kw]= f7_W + nue_d * ConcD;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[1])[ke]= f7_E + nue_d * ConcD;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[4])[ks]= f7_S + nue_d * ConcD;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[3])[kn]= f7_N + nue_d * ConcD;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[6])[kb]= f7_B + nue_d * ConcD;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D7.f[5])[kt]= f7_T + nue_d * ConcD;
-      }
-
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QADPressIncomp27(
-											   real* DD,
-											   real* DD27,
-											   real* temp,
-											   real* velo,
-											   real diffusivity,
-											   int* k_Q, 
-											   real* QQ,
-											   unsigned int numberOfBCnodes, 
-											   real om1, 
-											   unsigned int* neighborX,
-											   unsigned int* neighborY,
-											   unsigned int* neighborZ,
-											   unsigned long long numberOfLBnodes, 
-											   bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-
-   Distributions27 D27;
-   if (isEvenTimestep==true)
-   {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k < 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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      //real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[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[DIR_P00])[ke   ];
-      //real f27_E    = (D27.f[DIR_M00])[kw   ];
-      //real f27_S    = (D27.f[DIR_0P0])[kn   ];
-      //real f27_N    = (D27.f[DIR_0M0])[ks   ];
-      //real f27_B    = (D27.f[DIR_00P])[kt   ];
-      //real f27_T    = (D27.f[DIR_00M])[kb   ];
-      //real f27_SW   = (D27.f[DIR_PP0])[kne  ];
-      //real f27_NE   = (D27.f[DIR_MM0])[ksw  ];
-      //real f27_NW   = (D27.f[DIR_PM0])[kse  ];
-      //real f27_SE   = (D27.f[DIR_MP0])[knw  ];
-      //real f27_BW   = (D27.f[DIR_P0P])[kte  ];
-      //real f27_TE   = (D27.f[DIR_M0M])[kbw  ];
-      //real f27_TW   = (D27.f[DIR_P0M])[kbe  ];
-      //real f27_BE   = (D27.f[DIR_M0P])[ktw  ];
-      //real f27_BS   = (D27.f[DIR_0PP])[ktn  ];
-      //real f27_TN   = (D27.f[DIR_0MM])[kbs  ];
-      //real f27_TS   = (D27.f[DIR_0PM])[kbn  ];
-      //real f27_BN   = (D27.f[DIR_0MP])[kts  ];
-      //real f27_ZERO = (D27.f[DIR_000])[kzero];
-      //real f27_BSW  = (D27.f[DIR_PPP])[ktne ];
-      //real f27_BNE  = (D27.f[DIR_MMP])[ktsw ];
-      //real f27_BNW  = (D27.f[DIR_PMP])[ktse ];
-      //real f27_BSE  = (D27.f[DIR_MPP])[ktnw ];
-      //real f27_TSW  = (D27.f[DIR_PPM])[kbne ];
-      //real f27_TNE  = (D27.f[DIR_MMM])[kbsw ];
-      //real f27_TNW  = (D27.f[DIR_PMM])[kbse ];
-      //real f27_TSE  = (D27.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      ////////////////////////////////////////////////////////////////////////////////
-      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
-                        //f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
-                        //f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
-
-      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
-      /*real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);*/
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real TempD = temp[k];
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      // velocity inflow
-      //vx1   = zero;
-      //vx2   = zero;
-      //vx3   = velo[k];
-
-      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
-      real feqW27_E    =  c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq); //feq27_E  ;// 
-      real feqW27_W    =  c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq); //feq27_W  ;// 
-      real feqW27_N    =  c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq); //feq27_N  ;// 
-      real feqW27_S    =  c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); //feq27_S  ;// 
-      real feqW27_T    =  c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); //feq27_T  ;// 
-      real feqW27_B    =  c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); //feq27_B  ;// 
-      real feqW27_NE   =  c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); //feq27_NE ;// 
-      real feqW27_SW   =  c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); //feq27_SW ;// 
-      real feqW27_SE   =  c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); //feq27_SE ;// 
-      real feqW27_NW   =  c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); //feq27_NW ;// 
-      real feqW27_TE   =  c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); //feq27_TE ;// 
-      real feqW27_BW   =  c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); //feq27_BW ;// 
-      real feqW27_BE   =  c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); //feq27_BE ;// 
-      real feqW27_TW   =  c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); //feq27_TW ;// 
-      real feqW27_TN   =  c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); //feq27_TN ;// 
-      real feqW27_BS   =  c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); //feq27_BS ;// 
-      real feqW27_BN   =  c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); //feq27_BN ;// 
-      real feqW27_TS   =  c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); //feq27_TS ;// 
-      real feqW27_TNE  =  c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); //feq27_TNE;// 
-      real feqW27_BSW  =  c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); //feq27_BSW;// 
-      real feqW27_BNE  =  c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); //feq27_BNE;// 
-      real feqW27_TSW  =  c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); //feq27_TSW;// 
-      real feqW27_TSE  =  c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); //feq27_TSE;// 
-      real feqW27_BNW  =  c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); //feq27_BNW;// 
-      real feqW27_BSE  =  c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); //feq27_BSE;// 
-      real feqW27_TNW  =  c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //feq27_TNW;// 
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real omegaD     = c3o1 - sqrt(c3o1);
-      //real Lam        = -(c1o2-one/omegaD);
-      //real nue_d      = Lam/three;
-      //real ae         = zero;
-      //real ae         = diffusivity/nue_d - one;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-         D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-         D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-         D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-         D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-         D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-         D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-         D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-         D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-         D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-         D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-         D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-         D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-         D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-         D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-         D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-         D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-         D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-         D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-         D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-         D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-         D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
-         D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-         D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-         D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-         D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-         D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real q;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-inline __device__ real calcDistributionBC_AD_interpol(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) {
-    real feq = weight * concentration * (c1o1 + c3o1 * v + c9o2 * v * v * concentration - v_sq * concentration);
-    return (c1o1 - q) / (c1o1 + q) * ((f - feq * omegaDiffusivity) / (c1o1 - omegaDiffusivity)) + (q * (f + finf) - c6o1 * weight * (jTangential)) / (c1o1 + q);
-}
-////////////////////////////////////////////////////////////////////////////////
-inline __device__ real calcDistributionBC_AD(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) {
-    return f - c6o1 * weight * jTangential;
-}
-
-
-// has to be excecuted before Fluid BCs
-//////////////////////////////////////////////////////////////////////////////
-__global__ void AD_SlipVelDeviceComp(
-    real *normalX,
-    real *normalY,
-    real *normalZ,
-    real *distributions,
-    real *distributionsAD,
-    int *QindexArray,
-    real *Qarrays,
-    uint numberOfBCnodes,
-    real omegaDiffusivity,
-    uint* neighborX,
-    uint* neighborY,
-    uint* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-    Distributions27 D;
-    if (isEvenTimestep)
-    {
-        D.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes];
-        D.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes];
-        D.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes];
-        D.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes];
-        D.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes];
-        D.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes];
-        D.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes];
-        D.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes];
-        D.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes];
-        D.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes];
-        D.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes];
-        D.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes];
-        D.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes];
-        D.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes];
-        D.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes];
-        D.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes];
-        D.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes];
-        D.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes];
-        D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-        D.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes];
-        D.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes];
-        D.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes];
-        D.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes];
-        D.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes];
-        D.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes];
-        D.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes];
-        D.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes];
-    }
-    else
-    {
-        D.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes];
-        D.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes];
-        D.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes];
-        D.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes];
-        D.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes];
-        D.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes];
-        D.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes];
-        D.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes];
-        D.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes];
-        D.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes];
-        D.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes];
-        D.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes];
-        D.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes];
-        D.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes];
-        D.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes];
-        D.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes];
-        D.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes];
-        D.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes];
-        D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-        D.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes];
-        D.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes];
-        D.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes];
-        D.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes];
-        D.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes];
-        D.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes];
-        D.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes];
-        D.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes];
-    }
-    ////////////////////////////////////////////////////////////////////////////////
-    Distributions27 DAD;
-    if (isEvenTimestep)
-    {
-        DAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-        DAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-        DAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-        DAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-        DAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes];
-        DAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes];
-        DAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-        DAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-        DAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-        DAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-        DAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-        DAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-        DAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-        DAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-        DAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-        DAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-        DAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-        DAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-        DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-        DAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-        DAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-        DAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-        DAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-        DAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-        DAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-        DAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-        DAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes];
-    }
-    else
-    {
-        DAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-        DAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-        DAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-        DAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-        DAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes];
-        DAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes];
-        DAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-        DAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-        DAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-        DAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-        DAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-        DAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-        DAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-        DAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-        DAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-        DAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-        DAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-        DAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-        DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-        DAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-        DAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-        DAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes];
-        DAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-        DAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-        DAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-        DAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-        DAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-    }
-    ////////////////////////////////////////////////////////////////////////////////
-    const unsigned  x = threadIdx.x;  // Globaler x-Index
-    const unsigned  y = blockIdx.x;   // Globaler y-Index
-    const unsigned  z = blockIdx.y;   // Globaler z-Index
-
-    const unsigned nx = blockDim.x;
-    const unsigned ny = gridDim.x;
-
-    const unsigned k = nx * (ny * z + y) + x;
-    //////////////////////////////////////////////////////////////////////////
-
-    if (k < numberOfBCnodes)
-    {
-        ////////////////////////////////////////////////////////////////////////////////
-        real NormX = normalX[k];
-        real NormY = normalY[k];
-        real NormZ = normalZ[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   = &Qarrays[DIR_P00 * numberOfBCnodes];
-        q_dirW   = &Qarrays[DIR_M00 * numberOfBCnodes];
-        q_dirN   = &Qarrays[DIR_0P0 * numberOfBCnodes];
-        q_dirS   = &Qarrays[DIR_0M0 * numberOfBCnodes];
-        q_dirT   = &Qarrays[DIR_00P * numberOfBCnodes];
-        q_dirB   = &Qarrays[DIR_00M * numberOfBCnodes];
-        q_dirNE  = &Qarrays[DIR_PP0 * numberOfBCnodes];
-        q_dirSW  = &Qarrays[DIR_MM0 * numberOfBCnodes];
-        q_dirSE  = &Qarrays[DIR_PM0 * numberOfBCnodes];
-        q_dirNW  = &Qarrays[DIR_MP0 * numberOfBCnodes];
-        q_dirTE  = &Qarrays[DIR_P0P * numberOfBCnodes];
-        q_dirBW  = &Qarrays[DIR_M0M * numberOfBCnodes];
-        q_dirBE  = &Qarrays[DIR_P0M * numberOfBCnodes];
-        q_dirTW  = &Qarrays[DIR_M0P * numberOfBCnodes];
-        q_dirTN  = &Qarrays[DIR_0PP * numberOfBCnodes];
-        q_dirBS  = &Qarrays[DIR_0MM * numberOfBCnodes];
-        q_dirBN  = &Qarrays[DIR_0PM * numberOfBCnodes];
-        q_dirTS  = &Qarrays[DIR_0MP * numberOfBCnodes];
-        q_dirTNE = &Qarrays[DIR_PPP * numberOfBCnodes];
-        q_dirTSW = &Qarrays[DIR_MMP * numberOfBCnodes];
-        q_dirTSE = &Qarrays[DIR_PMP * numberOfBCnodes];
-        q_dirTNW = &Qarrays[DIR_MPP * numberOfBCnodes];
-        q_dirBNE = &Qarrays[DIR_PPM * numberOfBCnodes];
-        q_dirBSW = &Qarrays[DIR_MMM * numberOfBCnodes];
-        q_dirBSE = &Qarrays[DIR_PMM * numberOfBCnodes];
-        q_dirBNW = &Qarrays[DIR_MPM * numberOfBCnodes];
-        ////////////////////////////////////////////////////////////////////////////////
-        //index
-        unsigned int KQK   = QindexArray[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 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[DIR_P00])[ke];
-        f_E   = (D.f[DIR_M00])[kw];
-        f_S   = (D.f[DIR_0P0])[kn];
-        f_N   = (D.f[DIR_0M0])[ks];
-        f_B   = (D.f[DIR_00P])[kt];
-        f_T   = (D.f[DIR_00M])[kb];
-        f_SW  = (D.f[DIR_PP0])[kne];
-        f_NE  = (D.f[DIR_MM0])[ksw];
-        f_NW  = (D.f[DIR_PM0])[kse];
-        f_SE  = (D.f[DIR_MP0])[knw];
-        f_BW  = (D.f[DIR_P0P])[kte];
-        f_TE  = (D.f[DIR_M0M])[kbw];
-        f_TW  = (D.f[DIR_P0M])[kbe];
-        f_BE  = (D.f[DIR_M0P])[ktw];
-        f_BS  = (D.f[DIR_0PP])[ktn];
-        f_TN  = (D.f[DIR_0MM])[kbs];
-        f_TS  = (D.f[DIR_0PM])[kbn];
-        f_BN  = (D.f[DIR_0MP])[kts];
-        f_BSW = (D.f[DIR_PPP])[ktne];
-        f_BNE = (D.f[DIR_MMP])[ktsw];
-        f_BNW = (D.f[DIR_PMP])[ktse];
-        f_BSE = (D.f[DIR_MPP])[ktnw];
-        f_TSW = (D.f[DIR_PPM])[kbne];
-        f_TNE = (D.f[DIR_MMM])[kbsw];
-        f_TNW = (D.f[DIR_PMM])[kbse];
-        f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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);
-
-
-        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 cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho);
-
-        ////////////////////////////////////////////////////////////////////////////////
-        f_W   = (DAD.f[DIR_P00])[ke];
-        f_E   = (DAD.f[DIR_M00])[kw];
-        f_S   = (DAD.f[DIR_0P0])[kn];
-        f_N   = (DAD.f[DIR_0M0])[ks];
-        f_B   = (DAD.f[DIR_00P])[kt];
-        f_T   = (DAD.f[DIR_00M])[kb];
-        f_SW  = (DAD.f[DIR_PP0])[kne];
-        f_NE  = (DAD.f[DIR_MM0])[ksw];
-        f_NW  = (DAD.f[DIR_PM0])[kse];
-        f_SE  = (DAD.f[DIR_MP0])[knw];
-        f_BW  = (DAD.f[DIR_P0P])[kte];
-        f_TE  = (DAD.f[DIR_M0M])[kbw];
-        f_TW  = (DAD.f[DIR_P0M])[kbe];
-        f_BE  = (DAD.f[DIR_M0P])[ktw];
-        f_BS  = (DAD.f[DIR_0PP])[ktn];
-        f_TN  = (DAD.f[DIR_0MM])[kbs];
-        f_TS  = (DAD.f[DIR_0PM])[kbn];
-        f_BN  = (DAD.f[DIR_0MP])[kts];
-        f_BSW = (DAD.f[DIR_PPP])[ktne];
-        f_BNE = (DAD.f[DIR_MMP])[ktsw];
-        f_BNW = (DAD.f[DIR_PMP])[ktse];
-        f_BSE = (DAD.f[DIR_MPP])[ktnw];
-        f_TSW = (DAD.f[DIR_PPM])[kbne];
-        f_TNE = (DAD.f[DIR_MMM])[kbsw];
-        f_TNW = (DAD.f[DIR_PMM])[kbse];
-        f_TSE = (DAD.f[DIR_MPM])[kbnw];
-        //////////////////////////////////////////////////////////////////////////
-        if (!isEvenTimestep)
-        {
-            DAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-            DAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-            DAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-            DAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-            DAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes];
-            DAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes];
-            DAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-            DAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-            DAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-            DAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-            DAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-            DAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-            DAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-            DAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-            DAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-            DAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-            DAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-            DAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-            DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-            DAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-            DAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-            DAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-            DAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-            DAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-            DAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-            DAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-            DAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes];
-        }
-        else
-        {
-            DAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-            DAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-            DAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-            DAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-            DAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes];
-            DAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes];
-            DAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-            DAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-            DAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-            DAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-            DAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-            DAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-            DAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-            DAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-            DAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-            DAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-            DAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-            DAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-            DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-            DAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-            DAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-            DAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes];
-            DAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-            DAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-            DAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-            DAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-            DAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-        }
-        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        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[DIR_000])[kzero]);
-
-        real jx1 =
-            (((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)) - (vx1 * concentration);
-
-        real jx2 =
-            ((-(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 * concentration);
-
-        real jx3 =
-            (((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 * concentration);
-
-        //jx1 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity);
-        //jx2 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity);
-        //jx3 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity);
-
-        real NormJ = jx1 * NormX + jx2 * NormY + jx3 * NormZ;
-
-        real jTan1 = jx1 - NormJ * NormX;
-        real jTan2 = jx2 - NormJ * NormY;
-        real jTan3 = jx3 - NormJ * NormZ;
-
-        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        q = q_dirE[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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
deleted file mode 100644
index 41a50e5dde7dd8e024721653f43652f2e4a17548..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/CP27.cu
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Device code */
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-////////////////////////////////////////////////////////////////////////////////
-__global__ void CalcCP27(real* DD, 
-									int* cpIndex, 
-									int nonCp, 
-									double *cpPress,
-									unsigned int* neighborX,
-									unsigned int* neighborY,
-									unsigned int* neighborZ,
-									unsigned long long numberOfLBnodes, 
-									bool isEvenTimestep)
-{
-	Distributions27 D;
-	if (isEvenTimestep==true)
-	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	} 
-	else
-	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	}
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if(k<nonCp)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		//index
-		unsigned int KQK  = cpIndex[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];
-		////////////////////////////////////////////////////////////////////////////////
-		double PressCP;
-
-		PressCP  =   (D.f[DIR_P00])[ke  ]+ (D.f[DIR_M00])[kw  ]+ 
-                     (D.f[DIR_0P0])[kn  ]+ (D.f[DIR_0M0])[ks  ]+
-                     (D.f[DIR_00P])[kt  ]+ (D.f[DIR_00M])[kb  ]+
-                     (D.f[DIR_PP0])[kne ]+ (D.f[DIR_MM0])[ksw ]+
-                     (D.f[DIR_PM0])[kse ]+ (D.f[DIR_MP0])[knw ]+
-                     (D.f[DIR_P0P])[kte ]+ (D.f[DIR_M0M])[kbw ]+
-                     (D.f[DIR_P0M])[kbe ]+ (D.f[DIR_M0P])[ktw ]+
-                     (D.f[DIR_0PP])[ktn ]+ (D.f[DIR_0MM])[kbs ]+
-                     (D.f[DIR_0PM])[kbn ]+ (D.f[DIR_0MP])[kts ]+
-                     (D.f[DIR_000])[kzero]+ 
-                     (D.f[DIR_PPP])[ktne]+ (D.f[DIR_MMP])[ktsw]+ 
-                     (D.f[DIR_PMP])[ktse]+ (D.f[DIR_MPP])[ktnw]+ 
-                     (D.f[DIR_PPM])[kbne]+ (D.f[DIR_MMM])[kbsw]+ 
-                     (D.f[DIR_PMM])[kbse]+ (D.f[DIR_MPM])[kbnw];
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		cpPress[k] = PressCP;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	}
-}
-
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu b/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu
deleted file mode 100644
index 288ec7ff26bae5b7415e08f4d39aa8cd2ffa4a9b..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu
+++ /dev/null
@@ -1,1072 +0,0 @@
-/* Device code */
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void getSendFsPost27(real* DD,
-										   real* bufferFs,
-										   int* sendIndex,
-                                           int buffmax,
-                                           unsigned int* neighborX,
-                                           unsigned int* neighborY,
-                                           unsigned int* neighborZ,
-                                           unsigned long long 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 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<buffmax)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      //set index
-      unsigned int kIndex  = sendIndex[k];
-      unsigned int kzero   = kIndex;
-      unsigned int ke      = kIndex;
-      unsigned int kw      = neighborX[kIndex];
-      unsigned int kn      = kIndex;
-      unsigned int ks      = neighborY[kIndex];
-      unsigned int kt      = kIndex;
-      unsigned int kb      = neighborZ[kIndex];
-      unsigned int ksw     = neighborY[kw];
-      unsigned int kne     = kIndex;
-      unsigned int kse     = ks;
-      unsigned int knw     = kw;
-      unsigned int kbw     = neighborZ[kw];
-      unsigned int kte     = kIndex;
-      unsigned int kbe     = kb;
-      unsigned int ktw     = kw;
-      unsigned int kbs     = neighborZ[ks];
-      unsigned int ktn     = kIndex;
-      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    = kIndex;
-      unsigned int kbsw    = neighborZ[ksw];
-      ////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Fs
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Buffer Fs
-      Distributions27 Dbuff;
-      Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax];
-      Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax];
-      Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax];
-      Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax];
-      Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax];
-      Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax];
-      Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax];
-      Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax];
-      Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax];
-      Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax];
-      Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax];
-      Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax];
-      Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax];
-      Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax];
-      Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax];
-      Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax];
-      Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax];
-      Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax];
-      Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax];
-      Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax];
-      Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax];
-      Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax];
-      Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax];
-      Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax];
-      Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax];
-      Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax];
-      Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax];
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //copy to buffer
-      //(Dbuff.f[DIR_P00])[k] = (D.f[DIR_P00])[ke   ];
-      //(Dbuff.f[DIR_M00])[k] = (D.f[DIR_M00])[kw   ];
-      //(Dbuff.f[DIR_0P0])[k] = (D.f[DIR_0P0])[kn   ];
-      //(Dbuff.f[DIR_0M0])[k] = (D.f[DIR_0M0])[ks   ];
-      //(Dbuff.f[DIR_00P])[k] = (D.f[DIR_00P])[kt   ];
-      //(Dbuff.f[DIR_00M])[k] = (D.f[DIR_00M])[kb   ];
-      //(Dbuff.f[DIR_PP0])[k] = (D.f[DIR_PP0])[kne  ];
-      //(Dbuff.f[DIR_MM0])[k] = (D.f[DIR_MM0])[ksw  ];
-      //(Dbuff.f[DIR_PM0])[k] = (D.f[DIR_PM0])[kse  ];
-      //(Dbuff.f[DIR_MP0])[k] = (D.f[DIR_MP0])[knw  ];
-      //(Dbuff.f[DIR_P0P])[k] = (D.f[DIR_P0P])[kte  ];
-      //(Dbuff.f[DIR_M0M])[k] = (D.f[DIR_M0M])[kbw  ];
-      //(Dbuff.f[DIR_P0M])[k] = (D.f[DIR_P0M])[kbe  ];
-      //(Dbuff.f[DIR_M0P])[k] = (D.f[DIR_M0P])[ktw  ];
-      //(Dbuff.f[DIR_0PP])[k] = (D.f[DIR_0PP])[ktn  ];
-      //(Dbuff.f[DIR_0MM])[k] = (D.f[DIR_0MM])[kbs  ];
-      //(Dbuff.f[DIR_0PM])[k] = (D.f[DIR_0PM])[kbn  ];
-      //(Dbuff.f[DIR_0MP])[k] = (D.f[DIR_0MP])[kts  ];
-      //(Dbuff.f[DIR_000])[k] = (D.f[DIR_000])[kzero];
-      //(Dbuff.f[DIR_PPP])[k] = (D.f[DIR_PPP])[ktne ];
-      //(Dbuff.f[DIR_MMP])[k] = (D.f[DIR_MMP])[ktsw ];
-      //(Dbuff.f[DIR_PMP])[k] = (D.f[DIR_PMP])[ktse ];
-      //(Dbuff.f[DIR_MPP])[k] = (D.f[DIR_MPP])[ktnw ];
-      //(Dbuff.f[DIR_PPM])[k] = (D.f[DIR_PPM])[kbne ];
-      //(Dbuff.f[DIR_MMM])[k] = (D.f[DIR_MMM])[kbsw ];
-      //(Dbuff.f[DIR_PMM])[k] = (D.f[DIR_PMM])[kbse ];
-      //(Dbuff.f[DIR_MPM])[k] = (D.f[DIR_MPM])[kbnw ];
-      (Dbuff.f[DIR_P00])[k] = (D.f[DIR_M00])[kw   ];
-      (Dbuff.f[DIR_M00])[k] = (D.f[DIR_P00])[ke   ];
-      (Dbuff.f[DIR_0P0])[k] = (D.f[DIR_0M0])[ks   ];
-      (Dbuff.f[DIR_0M0])[k] = (D.f[DIR_0P0])[kn   ];
-      (Dbuff.f[DIR_00P])[k] = (D.f[DIR_00M])[kb   ];
-      (Dbuff.f[DIR_00M])[k] = (D.f[DIR_00P])[kt   ];
-      (Dbuff.f[DIR_PP0])[k] = (D.f[DIR_MM0])[ksw  ];
-      (Dbuff.f[DIR_MM0])[k] = (D.f[DIR_PP0])[kne  ];
-      (Dbuff.f[DIR_PM0])[k] = (D.f[DIR_MP0])[knw  ];
-      (Dbuff.f[DIR_MP0])[k] = (D.f[DIR_PM0])[kse  ];
-      (Dbuff.f[DIR_P0P])[k] = (D.f[DIR_M0M])[kbw  ];
-      (Dbuff.f[DIR_M0M])[k] = (D.f[DIR_P0P])[kte  ];
-      (Dbuff.f[DIR_P0M])[k] = (D.f[DIR_M0P])[ktw  ];
-      (Dbuff.f[DIR_M0P])[k] = (D.f[DIR_P0M])[kbe  ];
-      (Dbuff.f[DIR_0PP])[k] = (D.f[DIR_0MM])[kbs  ];
-      (Dbuff.f[DIR_0MM])[k] = (D.f[DIR_0PP])[ktn  ];
-      (Dbuff.f[DIR_0PM])[k] = (D.f[DIR_0MP])[kts  ];
-      (Dbuff.f[DIR_0MP])[k] = (D.f[DIR_0PM])[kbn  ];
-      (Dbuff.f[DIR_000])[k] = (D.f[DIR_000])[kzero];
-      (Dbuff.f[DIR_PPP])[k] = (D.f[DIR_MMM])[kbsw ];
-      (Dbuff.f[DIR_MMP])[k] = (D.f[DIR_PPM])[kbne ];
-      (Dbuff.f[DIR_PMP])[k] = (D.f[DIR_MPM])[kbnw ];
-      (Dbuff.f[DIR_MPP])[k] = (D.f[DIR_PMM])[kbse ];
-      (Dbuff.f[DIR_PPM])[k] = (D.f[DIR_MMP])[ktsw ];
-      (Dbuff.f[DIR_MMM])[k] = (D.f[DIR_PPP])[ktne ];
-      (Dbuff.f[DIR_PMM])[k] = (D.f[DIR_MPP])[ktnw ];
-      (Dbuff.f[DIR_MPM])[k] = (D.f[DIR_PMP])[ktse ];
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void setRecvFsPost27(real* DD,
-										   real* bufferFs,
-										   int* recvIndex,
-                                           int buffmax,
-                                           unsigned int* neighborX,
-                                           unsigned int* neighborY,
-                                           unsigned int* neighborZ,
-                                           unsigned long long 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 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<buffmax)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      //set index
-      unsigned int kIndex  = recvIndex[k];
-      unsigned int kzero   = kIndex;
-      unsigned int ke      = kIndex;
-      unsigned int kw      = neighborX[kIndex];
-      unsigned int kn      = kIndex;
-      unsigned int ks      = neighborY[kIndex];
-      unsigned int kt      = kIndex;
-      unsigned int kb      = neighborZ[kIndex];
-      unsigned int ksw     = neighborY[kw];
-      unsigned int kne     = kIndex;
-      unsigned int kse     = ks;
-      unsigned int knw     = kw;
-      unsigned int kbw     = neighborZ[kw];
-      unsigned int kte     = kIndex;
-      unsigned int kbe     = kb;
-      unsigned int ktw     = kw;
-      unsigned int kbs     = neighborZ[ks];
-      unsigned int ktn     = kIndex;
-      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    = kIndex;
-      unsigned int kbsw    = neighborZ[ksw];
-      ////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Fs
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Buffer Fs
-      Distributions27 Dbuff;
-      Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax];
-      Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax];
-      Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax];
-      Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax];
-      Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax];
-      Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax];
-      Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax];
-      Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax];
-      Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax];
-      Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax];
-      Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax];
-      Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax];
-      Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax];
-      Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax];
-      Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax];
-      Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax];
-      Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax];
-      Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax];
-      Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax];
-      Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax];
-      Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax];
-      Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax];
-      Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax];
-      Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax];
-      Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax];
-      Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax];
-      Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax];
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //copy from buffer
-      //(D.f[DIR_P00])[ke   ] = (Dbuff.f[DIR_P00])[k];
-      //(D.f[DIR_M00])[kw   ] = (Dbuff.f[DIR_M00])[k];
-      //(D.f[DIR_0P0])[kn   ] = (Dbuff.f[DIR_0P0])[k];
-      //(D.f[DIR_0M0])[ks   ] = (Dbuff.f[DIR_0M0])[k];
-      //(D.f[DIR_00P])[kt   ] = (Dbuff.f[DIR_00P])[k];
-      //(D.f[DIR_00M])[kb   ] = (Dbuff.f[DIR_00M])[k];
-      //(D.f[DIR_PP0])[kne  ] = (Dbuff.f[DIR_PP0])[k];
-      //(D.f[DIR_MM0])[ksw  ] = (Dbuff.f[DIR_MM0])[k];
-      //(D.f[DIR_PM0])[kse  ] = (Dbuff.f[DIR_PM0])[k];
-      //(D.f[DIR_MP0])[knw  ] = (Dbuff.f[DIR_MP0])[k];
-      //(D.f[DIR_P0P])[kte  ] = (Dbuff.f[DIR_P0P])[k];
-      //(D.f[DIR_M0M])[kbw  ] = (Dbuff.f[DIR_M0M])[k];
-      //(D.f[DIR_P0M])[kbe  ] = (Dbuff.f[DIR_P0M])[k];
-      //(D.f[DIR_M0P])[ktw  ] = (Dbuff.f[DIR_M0P])[k];
-      //(D.f[DIR_0PP])[ktn  ] = (Dbuff.f[DIR_0PP])[k];
-      //(D.f[DIR_0MM])[kbs  ] = (Dbuff.f[DIR_0MM])[k];
-      //(D.f[DIR_0PM])[kbn  ] = (Dbuff.f[DIR_0PM])[k];
-      //(D.f[DIR_0MP])[kts  ] = (Dbuff.f[DIR_0MP])[k];
-      //(D.f[DIR_000])[kzero] = (Dbuff.f[DIR_000])[k];
-      //(D.f[DIR_PPP])[ktne ] = (Dbuff.f[DIR_PPP])[k];
-      //(D.f[DIR_MMP])[ktsw ] = (Dbuff.f[DIR_MMP])[k];
-      //(D.f[DIR_PMP])[ktse ] = (Dbuff.f[DIR_PMP])[k];
-      //(D.f[DIR_MPP])[ktnw ] = (Dbuff.f[DIR_MPP])[k];
-      //(D.f[DIR_PPM])[kbne ] = (Dbuff.f[DIR_PPM])[k];
-      //(D.f[DIR_MMM])[kbsw ] = (Dbuff.f[DIR_MMM])[k];
-      //(D.f[DIR_PMM])[kbse ] = (Dbuff.f[DIR_PMM])[k];
-      //(D.f[DIR_MPM])[kbnw ] = (Dbuff.f[DIR_MPM])[k];
-      (D.f[DIR_M00])[kw   ] = (Dbuff.f[DIR_P00])[k];
-      (D.f[DIR_P00])[ke   ] = (Dbuff.f[DIR_M00])[k];
-      (D.f[DIR_0M0])[ks   ] = (Dbuff.f[DIR_0P0])[k];
-      (D.f[DIR_0P0])[kn   ] = (Dbuff.f[DIR_0M0])[k];
-      (D.f[DIR_00M])[kb   ] = (Dbuff.f[DIR_00P])[k];
-      (D.f[DIR_00P])[kt   ] = (Dbuff.f[DIR_00M])[k];
-      (D.f[DIR_MM0])[ksw  ] = (Dbuff.f[DIR_PP0])[k];
-      (D.f[DIR_PP0])[kne  ] = (Dbuff.f[DIR_MM0])[k];
-      (D.f[DIR_MP0])[knw  ] = (Dbuff.f[DIR_PM0])[k];
-      (D.f[DIR_PM0])[kse  ] = (Dbuff.f[DIR_MP0])[k];
-      (D.f[DIR_M0M])[kbw  ] = (Dbuff.f[DIR_P0P])[k];
-      (D.f[DIR_P0P])[kte  ] = (Dbuff.f[DIR_M0M])[k];
-      (D.f[DIR_M0P])[ktw  ] = (Dbuff.f[DIR_P0M])[k];
-      (D.f[DIR_P0M])[kbe  ] = (Dbuff.f[DIR_M0P])[k];
-      (D.f[DIR_0MM])[kbs  ] = (Dbuff.f[DIR_0PP])[k];
-      (D.f[DIR_0PP])[ktn  ] = (Dbuff.f[DIR_0MM])[k];
-      (D.f[DIR_0MP])[kts  ] = (Dbuff.f[DIR_0PM])[k];
-      (D.f[DIR_0PM])[kbn  ] = (Dbuff.f[DIR_0MP])[k];
-      (D.f[DIR_000])[kzero] = (Dbuff.f[DIR_000])[k];
-      (D.f[DIR_MMM])[kbsw ] = (Dbuff.f[DIR_PPP])[k];
-      (D.f[DIR_PPM])[kbne ] = (Dbuff.f[DIR_MMP])[k];
-      (D.f[DIR_MPM])[kbnw ] = (Dbuff.f[DIR_PMP])[k];
-      (D.f[DIR_PMM])[kbse ] = (Dbuff.f[DIR_MPP])[k];
-      (D.f[DIR_MMP])[ktsw ] = (Dbuff.f[DIR_PPM])[k];
-      (D.f[DIR_PPP])[ktne ] = (Dbuff.f[DIR_MMM])[k];
-      (D.f[DIR_MPP])[ktnw ] = (Dbuff.f[DIR_PMM])[k];
-      (D.f[DIR_PMP])[ktse ] = (Dbuff.f[DIR_MPM])[k];
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void getSendFsPre27(real* DD,
-										  real* bufferFs,
-										  int* sendIndex,
-                                          int buffmax,
-                                          unsigned int* neighborX,
-                                          unsigned int* neighborY,
-                                          unsigned int* neighborZ,
-                                          unsigned long long 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 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<buffmax)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      //set index
-      unsigned int kIndex  = sendIndex[k];
-      unsigned int kzero   = kIndex;
-      unsigned int ke      = kIndex;
-      unsigned int kw      = neighborX[kIndex];
-      unsigned int kn      = kIndex;
-      unsigned int ks      = neighborY[kIndex];
-      unsigned int kt      = kIndex;
-      unsigned int kb      = neighborZ[kIndex];
-      unsigned int ksw     = neighborY[kw];
-      unsigned int kne     = kIndex;
-      unsigned int kse     = ks;
-      unsigned int knw     = kw;
-      unsigned int kbw     = neighborZ[kw];
-      unsigned int kte     = kIndex;
-      unsigned int kbe     = kb;
-      unsigned int ktw     = kw;
-      unsigned int kbs     = neighborZ[ks];
-      unsigned int ktn     = kIndex;
-      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    = kIndex;
-      unsigned int kbsw    = neighborZ[ksw];
-      ////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Fs
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Buffer Fs
-      Distributions27 Dbuff;
-      Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax];
-      Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax];
-      Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax];
-      Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax];
-      Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax];
-      Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax];
-      Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax];
-      Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax];
-      Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax];
-      Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax];
-      Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax];
-      Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax];
-      Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax];
-      Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax];
-      Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax];
-      Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax];
-      Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax];
-      Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax];
-      Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax];
-      Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax];
-      Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax];
-      Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax];
-      Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax];
-      Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax];
-      Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax];
-      Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax];
-      Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax];
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //copy to buffer
-      (Dbuff.f[DIR_P00])[k] = (D.f[DIR_P00])[ke   ];
-      (Dbuff.f[DIR_M00])[k] = (D.f[DIR_M00])[kw   ];
-      (Dbuff.f[DIR_0P0])[k] = (D.f[DIR_0P0])[kn   ];
-      (Dbuff.f[DIR_0M0])[k] = (D.f[DIR_0M0])[ks   ];
-      (Dbuff.f[DIR_00P])[k] = (D.f[DIR_00P])[kt   ];
-      (Dbuff.f[DIR_00M])[k] = (D.f[DIR_00M])[kb   ];
-      (Dbuff.f[DIR_PP0])[k] = (D.f[DIR_PP0])[kne  ];
-      (Dbuff.f[DIR_MM0])[k] = (D.f[DIR_MM0])[ksw  ];
-      (Dbuff.f[DIR_PM0])[k] = (D.f[DIR_PM0])[kse  ];
-      (Dbuff.f[DIR_MP0])[k] = (D.f[DIR_MP0])[knw  ];
-      (Dbuff.f[DIR_P0P])[k] = (D.f[DIR_P0P])[kte  ];
-      (Dbuff.f[DIR_M0M])[k] = (D.f[DIR_M0M])[kbw  ];
-      (Dbuff.f[DIR_P0M])[k] = (D.f[DIR_P0M])[kbe  ];
-      (Dbuff.f[DIR_M0P])[k] = (D.f[DIR_M0P])[ktw  ];
-      (Dbuff.f[DIR_0PP])[k] = (D.f[DIR_0PP])[ktn  ];
-      (Dbuff.f[DIR_0MM])[k] = (D.f[DIR_0MM])[kbs  ];
-      (Dbuff.f[DIR_0PM])[k] = (D.f[DIR_0PM])[kbn  ];
-      (Dbuff.f[DIR_0MP])[k] = (D.f[DIR_0MP])[kts  ];
-      (Dbuff.f[DIR_000])[k] = (D.f[DIR_000])[kzero];
-      (Dbuff.f[DIR_PPP])[k] = (D.f[DIR_PPP])[ktne ];
-      (Dbuff.f[DIR_MMP])[k] = (D.f[DIR_MMP])[ktsw ];
-      (Dbuff.f[DIR_PMP])[k] = (D.f[DIR_PMP])[ktse ];
-      (Dbuff.f[DIR_MPP])[k] = (D.f[DIR_MPP])[ktnw ];
-      (Dbuff.f[DIR_PPM])[k] = (D.f[DIR_PPM])[kbne ];
-      (Dbuff.f[DIR_MMM])[k] = (D.f[DIR_MMM])[kbsw ];
-      (Dbuff.f[DIR_PMM])[k] = (D.f[DIR_PMM])[kbse ];
-      (Dbuff.f[DIR_MPM])[k] = (D.f[DIR_MPM])[kbnw ];
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void setRecvFsPre27(real* DD,
-										  real* bufferFs,
-										  int* recvIndex,
-                                          int buffmax,
-                                          unsigned int* neighborX,
-                                          unsigned int* neighborY,
-                                          unsigned int* neighborZ,
-                                          unsigned long long 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 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<buffmax)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      //set index
-      unsigned int kIndex  = recvIndex[k];
-      unsigned int kzero   = kIndex;
-      unsigned int ke      = kIndex;
-      unsigned int kw      = neighborX[kIndex];
-      unsigned int kn      = kIndex;
-      unsigned int ks      = neighborY[kIndex];
-      unsigned int kt      = kIndex;
-      unsigned int kb      = neighborZ[kIndex];
-      unsigned int ksw     = neighborY[kw];
-      unsigned int kne     = kIndex;
-      unsigned int kse     = ks;
-      unsigned int knw     = kw;
-      unsigned int kbw     = neighborZ[kw];
-      unsigned int kte     = kIndex;
-      unsigned int kbe     = kb;
-      unsigned int ktw     = kw;
-      unsigned int kbs     = neighborZ[ks];
-      unsigned int ktn     = kIndex;
-      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    = kIndex;
-      unsigned int kbsw    = neighborZ[ksw];
-      ////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Fs
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //set Pointer for Buffer Fs
-      Distributions27 Dbuff;
-      Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax];
-      Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax];
-      Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax];
-      Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax];
-      Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax];
-      Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax];
-      Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax];
-      Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax];
-      Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax];
-      Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax];
-      Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax];
-      Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax];
-      Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax];
-      Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax];
-      Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax];
-      Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax];
-      Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax];
-      Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax];
-      Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax];
-      Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax];
-      Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax];
-      Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax];
-      Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax];
-      Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax];
-      Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax];
-      Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax];
-      Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax];
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //copy from buffer
-      (D.f[DIR_P00])[ke   ] = (Dbuff.f[DIR_P00])[k];
-      (D.f[DIR_M00])[kw   ] = (Dbuff.f[DIR_M00])[k];
-      (D.f[DIR_0P0])[kn   ] = (Dbuff.f[DIR_0P0])[k];
-      (D.f[DIR_0M0])[ks   ] = (Dbuff.f[DIR_0M0])[k];
-      (D.f[DIR_00P])[kt   ] = (Dbuff.f[DIR_00P])[k];
-      (D.f[DIR_00M])[kb   ] = (Dbuff.f[DIR_00M])[k];
-      (D.f[DIR_PP0])[kne  ] = (Dbuff.f[DIR_PP0])[k];
-      (D.f[DIR_MM0])[ksw  ] = (Dbuff.f[DIR_MM0])[k];
-      (D.f[DIR_PM0])[kse  ] = (Dbuff.f[DIR_PM0])[k];
-      (D.f[DIR_MP0])[knw  ] = (Dbuff.f[DIR_MP0])[k];
-      (D.f[DIR_P0P])[kte  ] = (Dbuff.f[DIR_P0P])[k];
-      (D.f[DIR_M0M])[kbw  ] = (Dbuff.f[DIR_M0M])[k];
-      (D.f[DIR_P0M])[kbe  ] = (Dbuff.f[DIR_P0M])[k];
-      (D.f[DIR_M0P])[ktw  ] = (Dbuff.f[DIR_M0P])[k];
-      (D.f[DIR_0PP])[ktn  ] = (Dbuff.f[DIR_0PP])[k];
-      (D.f[DIR_0MM])[kbs  ] = (Dbuff.f[DIR_0MM])[k];
-      (D.f[DIR_0PM])[kbn  ] = (Dbuff.f[DIR_0PM])[k];
-      (D.f[DIR_0MP])[kts  ] = (Dbuff.f[DIR_0MP])[k];
-      (D.f[DIR_000])[kzero] = (Dbuff.f[DIR_000])[k];
-      (D.f[DIR_PPP])[ktne ] = (Dbuff.f[DIR_PPP])[k];
-      (D.f[DIR_MMP])[ktsw ] = (Dbuff.f[DIR_MMP])[k];
-      (D.f[DIR_PMP])[ktse ] = (Dbuff.f[DIR_PMP])[k];
-      (D.f[DIR_MPP])[ktnw ] = (Dbuff.f[DIR_MPP])[k];
-      (D.f[DIR_PPM])[kbne ] = (Dbuff.f[DIR_PPM])[k];
-      (D.f[DIR_MMM])[kbsw ] = (Dbuff.f[DIR_MMM])[k];
-      (D.f[DIR_PMM])[kbse ] = (Dbuff.f[DIR_PMM])[k];
-      (D.f[DIR_MPM])[kbnw ] = (Dbuff.f[DIR_MPM])[k];
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void getSendGsF3(
-	real* G6,
-	real* bufferGs,
-	int* sendIndex,
-	int buffmax,
-	unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned long long 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 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if (k < buffmax)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		//set index
-		unsigned int kIndex = sendIndex[k];
-		unsigned int kr = kIndex;
-		unsigned int kw = neighborX[kIndex];
-		unsigned int ks = neighborY[kIndex];
-		unsigned int kb = neighborZ[kIndex];
-		////////////////////////////////////////////////////////////////////////////////
-		//set Pointer for Gs
-		Distributions6 G;
-		if (isEvenTimestep)
-		{
-			G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodes];
-			G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodes];
-			G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodes];
-			G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodes];
-			G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodes];
-			G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodes];
-		}
-		else
-		{
-			G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodes];
-			G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodes];
-			G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodes];
-			G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodes];
-			G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodes];
-			G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodes];
-		}
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//set Pointer for Buffer Gs
-		Distributions6 Dbuff;
-		Dbuff.g[DIR_P00] = &bufferGs[DIR_P00 * buffmax];
-		Dbuff.g[DIR_M00] = &bufferGs[DIR_M00 * buffmax];
-		Dbuff.g[DIR_0P0] = &bufferGs[DIR_0P0 * buffmax];
-		Dbuff.g[DIR_0M0] = &bufferGs[DIR_0M0 * buffmax];
-		Dbuff.g[DIR_00P] = &bufferGs[DIR_00P * buffmax];
-		Dbuff.g[DIR_00M] = &bufferGs[DIR_00M * buffmax];
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//write Gs to buffer
-		(Dbuff.g[DIR_P00])[k] = (G.g[DIR_M00])[kw];
-		(Dbuff.g[DIR_M00])[k] = (G.g[DIR_P00])[kr];
-		(Dbuff.g[DIR_0P0])[k] = (G.g[DIR_0M0])[ks];
-		(Dbuff.g[DIR_0M0])[k] = (G.g[DIR_0P0])[kr];
-		(Dbuff.g[DIR_00P])[k] = (G.g[DIR_00M])[kb];
-		(Dbuff.g[DIR_00M])[k] = (G.g[DIR_00P])[kr];
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void setRecvGsF3(
-	real* G6,
-	real* bufferGs,
-	int* recvIndex,
-	int buffmax,
-	unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned long long 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 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if (k < buffmax)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		//set index
-		unsigned int kIndex = recvIndex[k];
-		unsigned int kr = kIndex;
-		unsigned int kw = neighborX[kIndex];
-		unsigned int ks = neighborY[kIndex];
-		unsigned int kb = neighborZ[kIndex];
-		////////////////////////////////////////////////////////////////////////////////
-		//set Pointer for Gs
-		Distributions6 G;
-		if (isEvenTimestep)
-		{
-			G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodes];
-			G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodes];
-			G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodes];
-			G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodes];
-			G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodes];
-			G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodes];
-		}
-		else
-		{
-			G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodes];
-			G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodes];
-			G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodes];
-			G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodes];
-			G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodes];
-			G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodes];
-		}
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//set Pointer for Buffer Gs
-		Distributions6 Dbuff;
-		Dbuff.g[DIR_P00] = &bufferGs[DIR_P00 * buffmax];
-		Dbuff.g[DIR_M00] = &bufferGs[DIR_M00 * buffmax];
-		Dbuff.g[DIR_0P0] = &bufferGs[DIR_0P0 * buffmax];
-		Dbuff.g[DIR_0M0] = &bufferGs[DIR_0M0 * buffmax];
-		Dbuff.g[DIR_00P] = &bufferGs[DIR_00P * buffmax];
-		Dbuff.g[DIR_00M] = &bufferGs[DIR_00M * buffmax];
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//write buffer to Gs
-		(G.g[DIR_M00])[kw] = (Dbuff.g[DIR_P00])[k];
-		(G.g[DIR_P00])[kr] = (Dbuff.g[DIR_M00])[k];
-		(G.g[DIR_0M0])[ks] = (Dbuff.g[DIR_0P0])[k];
-		(G.g[DIR_0P0])[kr] = (Dbuff.g[DIR_0M0])[k];
-		(G.g[DIR_00M])[kb] = (Dbuff.g[DIR_00P])[k];
-		(G.g[DIR_00P])[kr] = (Dbuff.g[DIR_00M])[k];
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu
deleted file mode 100644
index 0013ae977d41cb52ce163a53f2f1342d4d7b4c73..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu
+++ /dev/null
@@ -1,2548 +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 NoSlipBCs27.cu
-//! \ingroup GPU
-//! \author Martin Schoenherr, Anna Wellmann
-//======================================================================================
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-#include "LBM/GPUHelperFunctions/KernelUtilities.h"
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-using namespace vf::gpu;
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QDevice3rdMomentsComp27(
-    real* distributions, 
-    int* subgridDistanceIndices, 
-    real* subgridDistances,
-    unsigned int numberOfBCnodes, 
-    real omega, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k < 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   = &subgridDistances[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &subgridDistances[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &subgridDistances[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &subgridDistances[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &subgridDistances[DIR_00P * numberOfBCnodes];
-      q_dirB   = &subgridDistances[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &subgridDistances[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &subgridDistances[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &subgridDistances[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &subgridDistances[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &subgridDistances[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &subgridDistances[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &subgridDistances[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &subgridDistances[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &subgridDistances[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &subgridDistances[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &subgridDistances[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &subgridDistances[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &subgridDistances[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &subgridDistances[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &subgridDistances[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &subgridDistances[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &subgridDistances[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &subgridDistances[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &subgridDistances[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &subgridDistances[DIR_MPM * numberOfBCnodes];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int numberOfNodesK  = subgridDistanceIndices[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];
-      unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = numberOfNodesK;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = numberOfNodesK;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = numberOfNodesK;
-      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 = numberOfNodesK;
-      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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-
-
-      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-         //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-	  
-	  //ToDo anders klammern !!!!!!
-	  
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 m3 = f_E - f_W - c2o1 * drho * c2o27 * (c3o1*( vx1        ));
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[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[DIR_M00])[kw]=zero;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 m3 = f_W - f_E - c2o1 * drho * c2o27 * (c3o1*(-vx1        ));
-         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P00])[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[DIR_P00])[ke]=zero;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 m3 = f_N - f_S - c2o1 * drho * c2o27 * (c3o1*( vx2        ));
-         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0M0])[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[DIR_0M0])[ks]=zero;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 m3 = f_S - f_N - c2o1 * drho * c2o27 * (c3o1*(   -vx2     ));
-         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0P0])[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[DIR_0P0])[kn]=zero;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 m3 = f_T - f_B - c2o1 * drho * c2o27 * (c3o1*(         vx3));
-         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_00M])[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[DIR_00M])[kb]=one;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 m3 = f_B - f_T - c2o1 * drho * c2o27 * (c3o1*(        -vx3));
-         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_00P])[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[DIR_00P])[kt]=zero;
-      }
-
-      q = q_dirNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_MM0])[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[DIR_MM0])[ksw]=zero;
-      }
-
-      q = q_dirSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_PP0])[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[DIR_PP0])[kne]=zero;
-      }
-
-      q = q_dirSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_MP0])[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[DIR_MP0])[knw]=zero;
-      }
-
-      q = q_dirNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_PM0])[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[DIR_PM0])[kse]=zero;
-      }
-
-      q = q_dirTE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_M0M])[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[DIR_M0M])[kbw]=zero;
-      }
-
-      q = q_dirBW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_P0P])[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[DIR_P0P])[kte]=zero;
-      }
-
-      q = q_dirBE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_M0P])[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[DIR_M0P])[ktw]=zero;
-      }
-
-      q = q_dirTW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_P0M])[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[DIR_P0M])[kbe]=zero;
-      }
-
-      q = q_dirTN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_0MM])[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[DIR_0MM])[kbs]=zero;
-      }
-
-      q = q_dirBS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_0PP])[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[DIR_0PP])[ktn]=zero;
-      }
-
-      q = q_dirBN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_0MP])[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[DIR_0MP])[kts]=zero;
-      }
-
-      q = q_dirTS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_0PM])[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[DIR_0PM])[kbn]=zero;
-      }
-
-      q = q_dirTNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_MMM])[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[DIR_MMM])[kbsw]=zero;
-      }
-
-      q = q_dirBSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_PPP])[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[DIR_PPP])[ktne]=zero;
-      }
-
-      q = q_dirBNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_MMP])[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[DIR_MMP])[ktsw]=zero;
-      }
-
-      q = q_dirTSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_PPM])[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[DIR_PPM])[kbne]=zero;
-      }
-
-      q = q_dirTSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_MPM])[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[DIR_MPM])[kbnw]=zero;
-      }
-
-      q = q_dirBNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_PMP])[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[DIR_PMP])[ktse]=zero;
-      }
-
-      q = q_dirBSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_MPP])[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[DIR_MPP])[ktnw]=zero;
-      }
-
-      q = q_dirTNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-		 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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QDeviceIncompHighNu27(
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes,
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = numberOfNodesK;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = numberOfNodesK;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = numberOfNodesK;
-      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 = numberOfNodesK;
-      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_E   = (D.f[DIR_P00])[ke   ];
-      f_W   = (D.f[DIR_M00])[kw   ];
-      f_N   = (D.f[DIR_0P0])[kn   ];
-      f_S   = (D.f[DIR_0M0])[ks   ];
-      f_T   = (D.f[DIR_00P])[kt   ];
-      f_B   = (D.f[DIR_00M])[kb   ];
-      f_NE  = (D.f[DIR_PP0])[kne  ];
-      f_SW  = (D.f[DIR_MM0])[ksw  ];
-      f_SE  = (D.f[DIR_PM0])[kse  ];
-      f_NW  = (D.f[DIR_MP0])[knw  ];
-      f_TE  = (D.f[DIR_P0P])[kte  ];
-      f_BW  = (D.f[DIR_M0M])[kbw  ];
-      f_BE  = (D.f[DIR_P0M])[kbe  ];
-      f_TW  = (D.f[DIR_M0P])[ktw  ];
-      f_TN  = (D.f[DIR_0PP])[ktn  ];
-      f_BS  = (D.f[DIR_0MM])[kbs  ];
-      f_BN  = (D.f[DIR_0PM])[kbn  ];
-      f_TS  = (D.f[DIR_0MP])[kts  ];
-      f_TNE = (D.f[DIR_PPP])[ktne ];
-      f_TSW = (D.f[DIR_MMP])[ktsw ];
-      f_TSE = (D.f[DIR_PMP])[ktse ];
-      f_TNW = (D.f[DIR_MPP])[ktnw ];
-      f_BNE = (D.f[DIR_PPM])[kbne ];
-      f_BSW = (D.f[DIR_MMM])[kbsw ];
-      f_BSE = (D.f[DIR_PMM])[kbse ];
-      f_BNW = (D.f[DIR_MPM])[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[DIR_000])[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));// / (one + 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));// / (one + 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));// / (one + drho); 
-
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-         //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real VeloX = c0o1;
-      real VeloY = c0o1;
-      real VeloZ = c0o1;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-	  
-	  //ToDo anders klammern !!!!!!
-	  
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) /** (one + drho)*/-cu_sq); 
-         (D.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QDeviceCompHighNu27(
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = numberOfNodesK;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = numberOfNodesK;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = numberOfNodesK;
-      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 = numberOfNodesK;
-      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_E   = (D.f[DIR_P00])[ke   ];
-      f_W   = (D.f[DIR_M00])[kw   ];
-      f_N   = (D.f[DIR_0P0])[kn   ];
-      f_S   = (D.f[DIR_0M0])[ks   ];
-      f_T   = (D.f[DIR_00P])[kt   ];
-      f_B   = (D.f[DIR_00M])[kb   ];
-      f_NE  = (D.f[DIR_PP0])[kne  ];
-      f_SW  = (D.f[DIR_MM0])[ksw  ];
-      f_SE  = (D.f[DIR_PM0])[kse  ];
-      f_NW  = (D.f[DIR_MP0])[knw  ];
-      f_TE  = (D.f[DIR_P0P])[kte  ];
-      f_BW  = (D.f[DIR_M0M])[kbw  ];
-      f_BE  = (D.f[DIR_P0M])[kbe  ];
-      f_TW  = (D.f[DIR_M0P])[ktw  ];
-      f_TN  = (D.f[DIR_0PP])[ktn  ];
-      f_BS  = (D.f[DIR_0MM])[kbs  ];
-      f_BN  = (D.f[DIR_0PM])[kbn  ];
-      f_TS  = (D.f[DIR_0MP])[kts  ];
-      f_TNE = (D.f[DIR_PPP])[ktne ];
-      f_TSW = (D.f[DIR_MMP])[ktsw ];
-      f_TSE = (D.f[DIR_PMP])[ktse ];
-      f_TNW = (D.f[DIR_MPP])[ktnw ];
-      f_BNE = (D.f[DIR_PPM])[kbne ];
-      f_BSW = (D.f[DIR_MMM])[kbsw ];
-      f_BSE = (D.f[DIR_PMM])[kbse ];
-      f_BNW = (D.f[DIR_MPM])[kbnw ];
-      //f_W    = (D.f[DIR_P00])[ke   ];
-      //f_E    = (D.f[DIR_M00])[kw   ];
-      //f_S    = (D.f[DIR_0P0])[kn   ];
-      //f_N    = (D.f[DIR_0M0])[ks   ];
-      //f_B    = (D.f[DIR_00P])[kt   ];
-      //f_T    = (D.f[DIR_00M])[kb   ];
-      //f_SW   = (D.f[DIR_PP0])[kne  ];
-      //f_NE   = (D.f[DIR_MM0])[ksw  ];
-      //f_NW   = (D.f[DIR_PM0])[kse  ];
-      //f_SE   = (D.f[DIR_MP0])[knw  ];
-      //f_BW   = (D.f[DIR_P0P])[kte  ];
-      //f_TE   = (D.f[DIR_M0M])[kbw  ];
-      //f_TW   = (D.f[DIR_P0M])[kbe  ];
-      //f_BE   = (D.f[DIR_M0P])[ktw  ];
-      //f_BS   = (D.f[DIR_0PP])[ktn  ];
-      //f_TN   = (D.f[DIR_0MM])[kbs  ];
-      //f_TS   = (D.f[DIR_0PM])[kbn  ];
-      //f_BN   = (D.f[DIR_0MP])[kts  ];
-      //f_BSW  = (D.f[DIR_PPP])[ktne ];
-      //f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      //f_BNW  = (D.f[DIR_PMP])[ktse ];
-      //f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      //f_TSW  = (D.f[DIR_PPM])[kbne ];
-      //f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      //f_TNW  = (D.f[DIR_PMM])[kbse ];
-      //f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-
-
-      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-         //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real VeloX = c0o1;
-      real VeloY = c0o1;
-      real VeloZ = c0o1;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-	  
-	  //ToDo anders klammern !!!!!!
-	  
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
-         //(D.f[DIR_M00])[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[DIR_M00])[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[DIR_P00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
-         //(D.f[DIR_P00])[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[DIR_P00])[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[DIR_0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
-         //(D.f[DIR_0M0])[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[DIR_0M0])[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[DIR_0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
-         //(D.f[DIR_0P0])[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[DIR_0P0])[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[DIR_00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
-         //(D.f[DIR_00M])[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[DIR_00M])[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[DIR_00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
-         //(D.f[DIR_00P])[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[DIR_00P])[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[DIR_MM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_MM0])[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[DIR_MM0])[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[DIR_PP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_PP0])[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[DIR_PP0])[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[DIR_MP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_MP0])[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[DIR_MP0])[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[DIR_PM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_PM0])[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[DIR_PM0])[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[DIR_M0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_M0M])[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[DIR_M0M])[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[DIR_P0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_P0P])[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[DIR_P0P])[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[DIR_M0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_M0P])[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[DIR_M0P])[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[DIR_P0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_P0M])[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[DIR_P0M])[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[DIR_0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0MM])[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[DIR_0MM])[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[DIR_0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0PP])[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[DIR_0PP])[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[DIR_0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0MP])[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[DIR_0MP])[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[DIR_0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0PM])[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[DIR_0PM])[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[DIR_MMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MMM])[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[DIR_MMM])[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[DIR_PPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PPP])[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[DIR_PPP])[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[DIR_MMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MMP])[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[DIR_MMP])[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[DIR_PPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PPM])[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[DIR_PPM])[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[DIR_MPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MPM])[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[DIR_MPM])[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[DIR_PMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PMP])[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[DIR_PMP])[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[DIR_MPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MPP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QDeviceComp27(
-    real* distributions, 
-    int* subgridDistanceIndices, 
-    real* subgridDistances,
-    unsigned int numberOfBCnodes, 
-    real omega, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //! The no-slip boundary condition is executed in the following steps
-   //!
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local subgrid distances (q's)
-      //!
-      SubgridDistances27 subgridD;
-      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
-      
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
-      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  = indexOfBCnode;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = indexOfBCnode;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = indexOfBCnode;
-      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 = indexOfBCnode;
-      unsigned int kbsw = neighborZ[ksw];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local distributions
-      //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_000])[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); 
-
-      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);
-
-       ////////////////////////////////////////////////////////////////////////////////
-      //! - Update distributions with subgrid distance (q) between zero and one
-      real feq, q, velocityLB;
-      q = (subgridD.q[DIR_P00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
-      {
-         velocityLB = vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_M00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_00P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_00M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega);
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QDevice27(
-    real* distributions, 
-    int* subgridDistanceIndices, 
-    real* subgridDistances,
-    unsigned int numberOfBCnodes, 
-    real omega, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //! The no-slip boundary condition is executed in the following steps
-   //!
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
-   //!
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local subgrid distances (q's)
-      //!
-      SubgridDistances27 subgridD;
-      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
-      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  = indexOfBCnode;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = indexOfBCnode;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = indexOfBCnode;
-      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 = indexOfBCnode;
-      unsigned int kbsw = neighborZ[ksw];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local distributions
-      //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_000])[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));          
-
-      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)); 
-
-      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)); 
-
-      real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_P00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
-      {
-         velocityLB = vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_M00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_00P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_00M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega);
-      }
-
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega);
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void BBDevice27(
-    real* distributions, 
-    int* subgridDistanceIndices, 
-    real* subgridDistances,
-    unsigned int numberOfBCnodes, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //! The no-slip boundary condition is executed in the following steps
-   //!
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-   // run for all indices in size of boundary condition (numberOfBCnodes)
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local subgrid distances (q's)
-      //!
-      SubgridDistances27 subgridD;
-      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
-      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  = indexOfBCnode;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = indexOfBCnode;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = indexOfBCnode;
-      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 = indexOfBCnode;
-      unsigned int kbsw = neighborZ[ksw];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local distributions
-      //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_P00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_M00])[kw  ]=f_E  ;
-      q = (subgridD.q[DIR_M00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_P00])[ke  ]=f_W  ;
-      q = (subgridD.q[DIR_0P0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0M0])[ks  ]=f_N  ;
-      q = (subgridD.q[DIR_0M0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0P0])[kn  ]=f_S  ;
-      q = (subgridD.q[DIR_00P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_00M])[kb  ]=f_T  ;
-      q = (subgridD.q[DIR_00M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_00P])[kt  ]=f_B  ;
-      q = (subgridD.q[DIR_PP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MM0])[ksw ]=f_NE ;
-      q = (subgridD.q[DIR_MM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PP0])[kne ]=f_SW ;
-      q = (subgridD.q[DIR_PM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MP0])[knw ]=f_SE ;
-      q = (subgridD.q[DIR_MP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PM0])[kse ]=f_NW ;
-      q = (subgridD.q[DIR_P0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_M0M])[kbw ]=f_TE ;
-      q = (subgridD.q[DIR_M0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_P0P])[kte ]=f_BW ;
-      q = (subgridD.q[DIR_P0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_M0P])[ktw ]=f_BE ;
-      q = (subgridD.q[DIR_M0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_P0M])[kbe ]=f_TW ;
-      q = (subgridD.q[DIR_0PP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0MM])[kbs ]=f_TN ;
-      q = (subgridD.q[DIR_0MM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0PP])[ktn ]=f_BS ;
-      q = (subgridD.q[DIR_0PM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0MP])[kts ]=f_BN ;
-      q = (subgridD.q[DIR_0MP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0PM])[kbn ]=f_TS ;
-      q = (subgridD.q[DIR_PPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MMM])[kbsw]=f_TNE;
-      q = (subgridD.q[DIR_MMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PPP])[ktne]=f_BSW;
-      q = (subgridD.q[DIR_PPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MMP])[ktsw]=f_BNE;
-      q = (subgridD.q[DIR_MMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PPM])[kbne]=f_TSW;
-      q = (subgridD.q[DIR_PMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MPM])[kbnw]=f_TSE;
-      q = (subgridD.q[DIR_MPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PMP])[ktse]=f_BNW;
-      q = (subgridD.q[DIR_PMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MPP])[ktnw]=f_BSE;
-      q = (subgridD.q[DIR_MPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PMM])[kbse]=f_TNW;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
diff --git a/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu
deleted file mode 100644
index e0ea3c05251e995c55c2b980327059dfa7fd4069..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu
+++ /dev/null
@@ -1,5294 +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 PressBCs27.cu
-//! \ingroup GPU
-//! \author Martin Schoenherr, Anna Wellmann
-//======================================================================================
-#include "LBM/LB.h"
-#include "lbm/constants/D3Q27.h"
-#include "basics/constants/NumericConstants.h"
-#include "lbm/MacroscopicQuantities.h"
-#include "LBM/GPUHelperFunctions/KernelUtilities.h"
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-using namespace vf::gpu;
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QInflowScaleByPressDevice27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int* k_N,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int K1QK  = k_N[k];
-      unsigned int k1zero= K1QK;
-      unsigned int k1e   = K1QK;
-      unsigned int k1w   = neighborX[K1QK];
-      unsigned int k1n   = K1QK;
-      unsigned int k1s   = neighborY[K1QK];
-      unsigned int k1t   = K1QK;
-      unsigned int k1b   = neighborZ[K1QK];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = K1QK;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = K1QK;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = K1QK;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = K1QK;
-      unsigned int k1bsw = neighborZ[k1sw];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real f1_E    = (D.f[DIR_P00])[k1e   ];
-      real f1_W    = (D.f[DIR_M00])[k1w   ];
-      real f1_N    = (D.f[DIR_0P0])[k1n   ];
-      real f1_S    = (D.f[DIR_0M0])[k1s   ];
-      real f1_T    = (D.f[DIR_00P])[k1t   ];
-      real f1_B    = (D.f[DIR_00M])[k1b   ];
-      real f1_NE   = (D.f[DIR_PP0])[k1ne  ];
-      real f1_SW   = (D.f[DIR_MM0])[k1sw  ];
-      real f1_SE   = (D.f[DIR_PM0])[k1se  ];
-      real f1_NW   = (D.f[DIR_MP0])[k1nw  ];
-      real f1_TE   = (D.f[DIR_P0P])[k1te  ];
-      real f1_BW   = (D.f[DIR_M0M])[k1bw  ];
-      real f1_BE   = (D.f[DIR_P0M])[k1be  ];
-      real f1_TW   = (D.f[DIR_M0P])[k1tw  ];
-      real f1_TN   = (D.f[DIR_0PP])[k1tn  ];
-      real f1_BS   = (D.f[DIR_0MM])[k1bs  ];
-      real f1_BN   = (D.f[DIR_0PM])[k1bn  ];
-      real f1_TS   = (D.f[DIR_0MP])[k1ts  ];
-      //real f1_ZERO = (D.f[DIR_000])[k1zero];
-      real f1_TNE  = (D.f[DIR_PPP])[k1tne ];
-      real f1_TSW  = (D.f[DIR_MMP])[k1tsw ];
-      real f1_TSE  = (D.f[DIR_PMP])[k1tse ];
-      real f1_TNW  = (D.f[DIR_MPP])[k1tnw ];
-      real f1_BNE  = (D.f[DIR_PPM])[k1bne ];
-      real f1_BSW  = (D.f[DIR_MMM])[k1bsw ];
-      real f1_BSE  = (D.f[DIR_PMM])[k1bse ];
-      real f1_BNW  = (D.f[DIR_MPM])[k1bnw ];
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real f_E    = (D.f[DIR_P00])[ke   ];
-      real f_W    = (D.f[DIR_M00])[kw   ];
-      real f_N    = (D.f[DIR_0P0])[kn   ];
-      real f_S    = (D.f[DIR_0M0])[ks   ];
-      real f_T    = (D.f[DIR_00P])[kt   ];
-      real f_B    = (D.f[DIR_00M])[kb   ];
-      real f_NE   = (D.f[DIR_PP0])[kne  ];
-      real f_SW   = (D.f[DIR_MM0])[ksw  ];
-      real f_SE   = (D.f[DIR_PM0])[kse  ];
-      real f_NW   = (D.f[DIR_MP0])[knw  ];
-      real f_TE   = (D.f[DIR_P0P])[kte  ];
-      real f_BW   = (D.f[DIR_M0M])[kbw  ];
-      real f_BE   = (D.f[DIR_P0M])[kbe  ];
-      real f_TW   = (D.f[DIR_M0P])[ktw  ];
-      real f_TN   = (D.f[DIR_0PP])[ktn  ];
-      real f_BS   = (D.f[DIR_0MM])[kbs  ];
-      real f_BN   = (D.f[DIR_0PM])[kbn  ];
-      real f_TS   = (D.f[DIR_0MP])[kts  ];
-      //real f_ZERO = (D.f[DIR_000])[kzero];
-      real f_TNE  = (D.f[DIR_PPP])[ktne ];
-      real f_TSW  = (D.f[DIR_MMP])[ktsw ];
-      real f_TSE  = (D.f[DIR_PMP])[ktse ];
-      real f_TNW  = (D.f[DIR_MPP])[ktnw ];
-      real f_BNE  = (D.f[DIR_PPM])[kbne ];
-      real f_BSW  = (D.f[DIR_MMM])[kbsw ];
-      real f_BSE  = (D.f[DIR_PMM])[kbse ];
-      real f_BNW  = (D.f[DIR_MPM])[kbnw ];
-      //////////////////////////////////////////////////////////////////////////
-      // real vx1, vx2, vx3;
-      real drho, drho1;
-      //////////////////////////////////////////////////////////////////////////
-     //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[DIR_000])[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[DIR_000])[kzero]);
-      //////////////////////////////////////////////////////////////////////////
-     //Schallgeschwindigkeit
-     real cs = c1o1 / sqrtf(c3o1);
-      //////////////////////////////////////////////////////////////////////////
-     real rhoInterpol = drho1 * cs + (c1o1 - cs) * drho;
-     //real diffRho = (rhoBC[k] + one) / (rhoInterpol + one);
-     real diffRhoToAdd = rhoBC[k] - rhoInterpol;
-     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-     //no velocity
-     //////////////////////////////////////////
-      f_E    = f1_E   * cs + (c1o1 - cs) * f_E   ;
-      f_W    = f1_W   * cs + (c1o1 - cs) * f_W   ;
-      f_N    = f1_N   * cs + (c1o1 - cs) * f_N   ;
-      f_S    = f1_S   * cs + (c1o1 - cs) * f_S   ;
-      f_T    = f1_T   * cs + (c1o1 - cs) * f_T   ;
-      f_B    = f1_B   * cs + (c1o1 - cs) * f_B   ;
-      f_NE   = f1_NE  * cs + (c1o1 - cs) * f_NE  ;
-      f_SW   = f1_SW  * cs + (c1o1 - cs) * f_SW  ;
-      f_SE   = f1_SE  * cs + (c1o1 - cs) * f_SE  ;
-      f_NW   = f1_NW  * cs + (c1o1 - cs) * f_NW  ;
-      f_TE   = f1_TE  * cs + (c1o1 - cs) * f_TE  ;
-      f_BW   = f1_BW  * cs + (c1o1 - cs) * f_BW  ;
-      f_BE   = f1_BE  * cs + (c1o1 - cs) * f_BE  ;
-      f_TW   = f1_TW  * cs + (c1o1 - cs) * f_TW  ;
-      f_TN   = f1_TN  * cs + (c1o1 - cs) * f_TN  ;
-      f_BS   = f1_BS  * cs + (c1o1 - cs) * f_BS  ;
-      f_BN   = f1_BN  * cs + (c1o1 - cs) * f_BN  ;
-      f_TS   = f1_TS  * cs + (c1o1 - cs) * f_TS  ;
-      f_TNE  = f1_TNE * cs + (c1o1 - cs) * f_TNE ;
-      f_TSW  = f1_TSW * cs + (c1o1 - cs) * f_TSW ;
-      f_TSE  = f1_TSE * cs + (c1o1 - cs) * f_TSE ;
-      f_TNW  = f1_TNW * cs + (c1o1 - cs) * f_TNW ;
-      f_BNE  = f1_BNE * cs + (c1o1 - cs) * f_BNE ;
-      f_BSW  = f1_BSW * cs + (c1o1 - cs) * f_BSW ;
-      f_BSE  = f1_BSE * cs + (c1o1 - cs) * f_BSE ;
-      f_BNW  = f1_BNW * cs + (c1o1 - cs) * f_BNW ;
-     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-     //scale by press
-     //////////////////////////////////////////
-     //f_E    = (f_E   + c2over27 ) * diffRho - c2over27 ;
-   //   f_W    = (f_W   + c2over27 ) * diffRho - c2over27 ;
-   //   f_N    = (f_N   + c2over27 ) * diffRho - c2over27 ;
-   //   f_S    = (f_S   + c2over27 ) * diffRho - c2over27 ;
-   //   f_T    = (f_T   + c2over27 ) * diffRho - c2over27 ;
-   //   f_B    = (f_B   + c2over27 ) * diffRho - c2over27 ;
-     //f_NE   = (f_NE  + c1over54 ) * diffRho - c1over54 ;
-   //   f_SW   = (f_SW  + c1over54 ) * diffRho - c1over54 ;
-   //   f_SE   = (f_SE  + c1over54 ) * diffRho - c1over54 ;
-   //   f_NW   = (f_NW  + c1over54 ) * diffRho - c1over54 ;
-   //   f_TE   = (f_TE  + c1over54 ) * diffRho - c1over54 ;
-   //   f_BW   = (f_BW  + c1over54 ) * diffRho - c1over54 ;
-   //   f_BE   = (f_BE  + c1over54 ) * diffRho - c1over54 ;
-   //   f_TW   = (f_TW  + c1over54 ) * diffRho - c1over54 ;
-   //   f_TN   = (f_TN  + c1over54 ) * diffRho - c1over54 ;
-   //   f_BS   = (f_BS  + c1over54 ) * diffRho - c1over54 ;
-   //   f_BN   = (f_BN  + c1over54 ) * diffRho - c1over54 ;
-   //   f_TS   = (f_TS  + c1over54 ) * diffRho - c1over54 ;
-   //   f_TNE  = (f_TNE + c1over216) * diffRho - c1over216;
-   //   f_TSW  = (f_TSW + c1over216) * diffRho - c1over216;
-   //   f_TSE  = (f_TSE + c1over216) * diffRho - c1over216;
-   //   f_TNW  = (f_TNW + c1over216) * diffRho - c1over216;
-   //   f_BNE  = (f_BNE + c1over216) * diffRho - c1over216;
-   //   f_BSW  = (f_BSW + c1over216) * diffRho - c1over216;
-   //   f_BSE  = (f_BSE + c1over216) * diffRho - c1over216;
-   //   f_BNW  = (f_BNW + c1over216) * diffRho - c1over216;
-     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-     // add press
-     //////////////////////////////////////////
-     f_E    = (f_E   + c2o27  * diffRhoToAdd);
-      f_W    = (f_W   + c2o27  * diffRhoToAdd);
-      f_N    = (f_N   + c2o27  * diffRhoToAdd);
-      f_S    = (f_S   + c2o27  * diffRhoToAdd);
-      f_T    = (f_T   + c2o27  * diffRhoToAdd);
-      f_B    = (f_B   + c2o27  * diffRhoToAdd);
-     f_NE   = (f_NE  + c1o54  * diffRhoToAdd);
-      f_SW   = (f_SW  + c1o54  * diffRhoToAdd);
-      f_SE   = (f_SE  + c1o54  * diffRhoToAdd);
-      f_NW   = (f_NW  + c1o54  * diffRhoToAdd);
-      f_TE   = (f_TE  + c1o54  * diffRhoToAdd);
-      f_BW   = (f_BW  + c1o54  * diffRhoToAdd);
-      f_BE   = (f_BE  + c1o54  * diffRhoToAdd);
-      f_TW   = (f_TW  + c1o54  * diffRhoToAdd);
-      f_TN   = (f_TN  + c1o54  * diffRhoToAdd);
-      f_BS   = (f_BS  + c1o54  * diffRhoToAdd);
-      f_BN   = (f_BN  + c1o54  * diffRhoToAdd);
-      f_TS   = (f_TS  + c1o54  * diffRhoToAdd);
-      f_TNE  = (f_TNE + c1o216 * diffRhoToAdd);
-      f_TSW  = (f_TSW + c1o216 * diffRhoToAdd);
-      f_TSE  = (f_TSE + c1o216 * diffRhoToAdd);
-      f_TNW  = (f_TNW + c1o216 * diffRhoToAdd);
-      f_BNE  = (f_BNE + c1o216 * diffRhoToAdd);
-      f_BSW  = (f_BSW + c1o216 * diffRhoToAdd);
-      f_BSE  = (f_BSE + c1o216 * diffRhoToAdd);
-      f_BNW  = (f_BNW + c1o216 * diffRhoToAdd);
-     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-     //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////
-      //__syncthreads();
-     // -X
-     //(D.f[DIR_P00])[ke   ] = f_E   ;
-     //(D.f[DIR_PM0])[kse  ] = f_SE  ;
-     //(D.f[DIR_PP0])[kne  ] = f_NE  ;
-     //(D.f[DIR_P0M])[kbe  ] = f_BE  ;
-     //(D.f[DIR_P0P])[kte  ] = f_TE  ;
-     //(D.f[DIR_PMP])[ktse ] = f_TSE ;
-     //(D.f[DIR_PPP])[ktne ] = f_TNE ;
-     //(D.f[DIR_PMM])[kbse ] = f_BSE ;
-     //(D.f[DIR_PPM])[kbne ] = f_BNE ;
-     // X
-     (D.f[DIR_M00])[kw   ] = f_W   ;
-     (D.f[DIR_MM0])[ksw  ] = f_SW  ;
-     (D.f[DIR_MP0])[knw  ] = f_NW  ;
-     (D.f[DIR_M0M])[kbw  ] = f_BW  ;
-     (D.f[DIR_M0P])[ktw  ] = f_TW  ;
-     (D.f[DIR_MMP])[ktsw ] = f_TSW ;
-     (D.f[DIR_MPP])[ktnw ] = f_TNW ;
-     (D.f[DIR_MMM])[kbsw ] = f_BSW ;
-     (D.f[DIR_MPM])[kbnw ] = f_BNW ;
-     // Y
-     //(D.f[DIR_0M0])[ks   ] = f_S   ;
-     //(D.f[DIR_PM0])[kse  ] = f_SE  ;
-     //(D.f[DIR_MM0])[ksw  ] = f_SW  ;
-     //(D.f[DIR_0MP])[kts  ] = f_TS  ;
-     //(D.f[DIR_0MM])[kbs  ] = f_BS  ;
-     //(D.f[DIR_PMP])[ktse ] = f_TSE ;
-     //(D.f[DIR_MMP])[ktsw ] = f_TSW ;
-     //(D.f[DIR_PMM])[kbse ] = f_BSE ;
-     //(D.f[DIR_MMM])[kbsw ] = f_BSW ;
-     // Z
-     //(D.f[DIR_00M])[kb   ] = f_B   ;
-     //(D.f[DIR_P0M])[kbe  ] = f_BE  ;
-     //(D.f[DIR_M0M])[kbw  ] = f_BW  ;
-     //(D.f[DIR_0PM])[kbn  ] = f_BN  ;
-     //(D.f[DIR_0MM])[kbs  ] = f_BS  ;
-     //(D.f[DIR_PPM])[kbne ] = f_BNE ;
-     //(D.f[DIR_MPM])[kbnw ] = f_BNW ;
-     //(D.f[DIR_PMM])[kbse ] = f_BSE ;
-     //(D.f[DIR_MMM])[kbsw ] = f_BSW ;
-      //////////////////////////////////////////////////////////////////////////
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceIncompNEQ27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int* k_N,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int K1QK  = k_N[k];
-      unsigned int k1zero= K1QK;
-      unsigned int k1e   = K1QK;
-      unsigned int k1w   = neighborX[K1QK];
-      unsigned int k1n   = K1QK;
-      unsigned int k1s   = neighborY[K1QK];
-      unsigned int k1t   = K1QK;
-      unsigned int k1b   = neighborZ[K1QK];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = K1QK;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = K1QK;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = K1QK;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = K1QK;
-      unsigned int k1bsw = neighborZ[k1sw];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true) //// ACHTUNG PREColl !!!!!!!!!!!!!!
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[k1e   ];
-      f1_E    = (D.f[DIR_M00])[k1w   ];
-      f1_S    = (D.f[DIR_0P0])[k1n   ];
-      f1_N    = (D.f[DIR_0M0])[k1s   ];
-      f1_B    = (D.f[DIR_00P])[k1t   ];
-      f1_T    = (D.f[DIR_00M])[k1b   ];
-      f1_SW   = (D.f[DIR_PP0])[k1ne  ];
-      f1_NE   = (D.f[DIR_MM0])[k1sw  ];
-      f1_NW   = (D.f[DIR_PM0])[k1se  ];
-      f1_SE   = (D.f[DIR_MP0])[k1nw  ];
-      f1_BW   = (D.f[DIR_P0P])[k1te  ];
-      f1_TE   = (D.f[DIR_M0M])[k1bw  ];
-      f1_TW   = (D.f[DIR_P0M])[k1be  ];
-      f1_BE   = (D.f[DIR_M0P])[k1tw  ];
-      f1_BS   = (D.f[DIR_0PP])[k1tn  ];
-      f1_TN   = (D.f[DIR_0MM])[k1bs  ];
-      f1_TS   = (D.f[DIR_0PM])[k1bn  ];
-      f1_BN   = (D.f[DIR_0MP])[k1ts  ];
-      f1_ZERO = (D.f[DIR_000])[k1zero];
-      f1_BSW  = (D.f[DIR_PPP])[k1tne ];
-      f1_BNE  = (D.f[DIR_MMP])[k1tsw ];
-      f1_BNW  = (D.f[DIR_PMP])[k1tse ];
-      f1_BSE  = (D.f[DIR_MPP])[k1tnw ];
-      f1_TSW  = (D.f[DIR_PPM])[k1bne ];
-      f1_TNE  = (D.f[DIR_MMM])[k1bsw ];
-      f1_TNW  = (D.f[DIR_PMM])[k1bse ];
-      f1_TSE  = (D.f[DIR_MPM])[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);
-
-
-      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 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 cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-      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));
-      f1_N     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
-      f1_S     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
-      f1_T     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
-      f1_B     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
-      f1_NE    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-      f1_SW    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-      f1_SE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-      f1_NW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-      f1_TE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-      f1_BW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-      f1_BE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-      f1_TW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-      f1_TN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-      f1_BS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-      f1_BN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-      f1_TS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-      f1_TNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-      f1_BSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-      f1_BNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-      f1_TSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-      f1_TSE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-      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];
-
-     //if(vx1 < zero){
-       // vx1 *= 0.9;
-     //}
-     //if(vx2 < zero){
-       // vx2 *= c1o10;//0.9;
-     //}
-
-      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));
-      f1_N     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
-      f1_S     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
-      f1_T     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
-      f1_B     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
-      f1_NE    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-      f1_SW    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-      f1_SE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-      f1_NW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-      f1_TE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-      f1_BW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-      f1_BE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-      f1_TW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-      f1_TN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-      f1_BS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-      f1_BN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-      f1_TS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-      f1_TNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-      f1_BSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-      f1_BNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-      f1_TSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-      f1_TSE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-      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 = (drho1 + rhoBC[k])/2.f;
-     //drho1 = drho1 - rhoBC[k];
-      //////////////////////////////////////////////////////////////////////////
-
-      __syncthreads();
-
-      (D.f[DIR_P00])[ke   ] = f1_W   ;
-      (D.f[DIR_M00])[kw   ] = f1_E   ;
-      (D.f[DIR_0P0])[kn   ] = f1_S   ;
-      (D.f[DIR_0M0])[ks   ] = f1_N   ;
-      (D.f[DIR_00P])[kt   ] = f1_B   ;
-      (D.f[DIR_00M])[kb   ] = f1_T   ;
-      (D.f[DIR_PP0])[kne  ] = f1_SW  ;
-      (D.f[DIR_MM0])[ksw  ] = f1_NE  ;
-      (D.f[DIR_PM0])[kse  ] = f1_NW  ;
-      (D.f[DIR_MP0])[knw  ] = f1_SE  ;
-      (D.f[DIR_P0P])[kte  ] = f1_BW  ;
-      (D.f[DIR_M0M])[kbw  ] = f1_TE  ;
-      (D.f[DIR_P0M])[kbe  ] = f1_TW  ;
-      (D.f[DIR_M0P])[ktw  ] = f1_BE  ;
-      (D.f[DIR_0PP])[ktn  ] = f1_BS  ;
-      (D.f[DIR_0MM])[kbs  ] = f1_TN  ;
-      (D.f[DIR_0PM])[kbn  ] = f1_TS  ;
-      (D.f[DIR_0MP])[kts  ] = f1_BN  ;
-      (D.f[DIR_000])[kzero] = f1_ZERO;
-      (D.f[DIR_PPP])[ktne ] = f1_BSW ;
-      (D.f[DIR_MMP])[ktsw ] = f1_BNE ;
-      (D.f[DIR_PMP])[ktse ] = f1_BNW ;
-      (D.f[DIR_MPP])[ktnw ] = f1_BSE ;
-      (D.f[DIR_PPM])[kbne ] = f1_TSW ;
-      (D.f[DIR_MMM])[kbsw ] = f1_TNE ;
-      (D.f[DIR_PMM])[kbse ] = f1_TNW ;
-      (D.f[DIR_MPM])[kbnw ] = f1_TSE ;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceNEQ27(
-    real* rhoBC,
-    real* distributions,
-    int* bcNodeIndices,
-    int* bcNeighborIndices,
-    int numberOfBCnodes,
-    real omega1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   //! The pressure boundary condition is executed in the following steps
-   //!
-
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
-   //!
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local pressure
-      //!
-      real rhoBClocal = rhoBC[nodeIndex];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      unsigned int KQK  = bcNodeIndices[nodeIndex];
-      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 neighbor indices (necessary for indirect addressing) for neighboring node
-      //!
-      unsigned int K1QK  = bcNeighborIndices[nodeIndex];
-      unsigned int k1zero= K1QK;
-      unsigned int k1e   = K1QK;
-      unsigned int k1w   = neighborX[K1QK];
-      unsigned int k1n   = K1QK;
-      unsigned int k1s   = neighborY[K1QK];
-      unsigned int k1t   = K1QK;
-      unsigned int k1b   = neighborZ[K1QK];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = K1QK;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = K1QK;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = K1QK;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = K1QK;
-      unsigned int k1bsw = neighborZ[k1sw];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local distributions for neighboring node
-      //!
-      real f1_W    = (dist.f[DIR_P00])[k1e   ];
-      real f1_E    = (dist.f[DIR_M00])[k1w   ];
-      real f1_S    = (dist.f[DIR_0P0])[k1n   ];
-      real f1_N    = (dist.f[DIR_0M0])[k1s   ];
-      real f1_B    = (dist.f[DIR_00P])[k1t   ];
-      real f1_T    = (dist.f[DIR_00M])[k1b   ];
-      real f1_SW   = (dist.f[DIR_PP0])[k1ne  ];
-      real f1_NE   = (dist.f[DIR_MM0])[k1sw  ];
-      real f1_NW   = (dist.f[DIR_PM0])[k1se  ];
-      real f1_SE   = (dist.f[DIR_MP0])[k1nw  ];
-      real f1_BW   = (dist.f[DIR_P0P])[k1te  ];
-      real f1_TE   = (dist.f[DIR_M0M])[k1bw  ];
-      real f1_TW   = (dist.f[DIR_P0M])[k1be  ];
-      real f1_BE   = (dist.f[DIR_M0P])[k1tw  ];
-      real f1_BS   = (dist.f[DIR_0PP])[k1tn  ];
-      real f1_TN   = (dist.f[DIR_0MM])[k1bs  ];
-      real f1_TS   = (dist.f[DIR_0PM])[k1bn  ];
-      real f1_BN   = (dist.f[DIR_0MP])[k1ts  ];
-      real f1_ZERO = (dist.f[DIR_000])[k1zero];
-      real f1_BSW  = (dist.f[DIR_PPP])[k1tne ];
-      real f1_BNE  = (dist.f[DIR_MMP])[k1tsw ];
-      real f1_BNW  = (dist.f[DIR_PMP])[k1tse ];
-      real f1_BSE  = (dist.f[DIR_MPP])[k1tnw ];
-      real f1_TSW  = (dist.f[DIR_PPM])[k1bne ];
-      real f1_TNE  = (dist.f[DIR_MMM])[k1bsw ];
-      real f1_TNW  = (dist.f[DIR_PMM])[k1bse ];
-      real f1_TSE  = (dist.f[DIR_MPM])[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[DIR_000])[kzero]);
-
-      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 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);
-
-      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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! 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));
-      f1_N     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
-      f1_S     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
-      f1_T     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
-      f1_B     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
-      f1_NE    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-      f1_SW    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-      f1_SE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-      f1_NW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-      f1_TE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-      f1_BW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-      f1_BE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-      f1_TW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-      f1_TN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-      f1_BS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-      f1_BN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-      f1_TS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-      f1_TNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-      f1_BSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-      f1_BNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-      f1_TSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-      f1_TSE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-      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));
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! 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));
-      f1_N     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
-      f1_S     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
-      f1_T     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
-      f1_B     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
-      f1_NE    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-      f1_SW    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-      f1_SE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-      f1_NW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-      f1_TE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-      f1_BW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-      f1_BE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-      f1_TW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-      f1_TN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-      f1_BS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-      f1_BN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-      f1_TS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-      f1_TNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-      f1_BSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-      f1_BNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-      f1_TSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-      f1_TSE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-      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));
-
-      //////////////////////////////////////////////////////////////////////////
-
-      __syncthreads();
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! write the new distributions to the bc nodes
-      //!
-      (dist.f[DIR_P00])[ke   ] = f1_W   ;
-      (dist.f[DIR_M00])[kw   ] = f1_E   ;
-      (dist.f[DIR_0P0])[kn   ] = f1_S   ;
-      (dist.f[DIR_0M0])[ks   ] = f1_N   ;
-      (dist.f[DIR_00P])[kt   ] = f1_B   ;
-      (dist.f[DIR_00M])[kb   ] = f1_T   ;
-      (dist.f[DIR_PP0])[kne  ] = f1_SW  ;
-      (dist.f[DIR_MM0])[ksw  ] = f1_NE  ;
-      (dist.f[DIR_PM0])[kse  ] = f1_NW  ;
-      (dist.f[DIR_MP0])[knw  ] = f1_SE  ;
-      (dist.f[DIR_P0P])[kte  ] = f1_BW  ;
-      (dist.f[DIR_M0M])[kbw  ] = f1_TE  ;
-      (dist.f[DIR_P0M])[kbe  ] = f1_TW  ;
-      (dist.f[DIR_M0P])[ktw  ] = f1_BE  ;
-      (dist.f[DIR_0PP])[ktn  ] = f1_BS  ;
-      (dist.f[DIR_0MM])[kbs  ] = f1_TN  ;
-      (dist.f[DIR_0PM])[kbn  ] = f1_TS  ;
-      (dist.f[DIR_0MP])[kts  ] = f1_BN  ;
-      (dist.f[DIR_000])[kzero] = f1_ZERO;
-      (dist.f[DIR_PPP])[ktne ] = f1_BSW ;
-      (dist.f[DIR_MMP])[ktsw ] = f1_BNE ;
-      (dist.f[DIR_PMP])[ktse ] = f1_BNW ;
-      (dist.f[DIR_MPP])[ktnw ] = f1_BSE ;
-      (dist.f[DIR_PPM])[kbne ] = f1_TSW ;
-      (dist.f[DIR_MMM])[kbsw ] = f1_TNE ;
-      (dist.f[DIR_PMM])[kbse ] = f1_TNW ;
-      (dist.f[DIR_MPM])[kbnw ] = f1_TSE ;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-__global__ void LB_BC_Press_East27(
-    int nx,
-    int ny,
-    int tz,
-    unsigned int* bcMatD,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* DD,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   //thread-index
-   int ty = blockIdx.x;
-   int tx = threadIdx.x;
-
-   int  k, k1, nxny;                   // Zugriff auf arrays im device
-
-   int  x = tx + STARTOFFX;  // Globaler x-Index
-   int  y = ty + STARTOFFY;  // Globaler y-Index
-   int  z = tz + STARTOFFZ;  // Globaler z-Index
-
-   k = nx*(ny*z + y) + x;
-   nxny = nx*ny;
-   k1 = k-nxny;
-
-   if( bcMatD[k] == GEO_PRESS && bcMatD[k1] == GEO_FLUID)
-   {
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////
-      ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int kzero= k;
-      unsigned int ke   = k;
-      unsigned int kw   = neighborX[k];
-      unsigned int kn   = k;
-      unsigned int ks   = neighborY[k];
-      unsigned int kt   = k;
-      unsigned int kb   = neighborZ[k];
-      unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = k;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = k;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = k;
-      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 = k;
-      unsigned int kbsw = neighborZ[ksw];
-      //unsigned int kzero= k;
-      //unsigned int ke   = k;
-      //unsigned int kw   = k + 1;
-      //unsigned int kn   = k;
-      //unsigned int ks   = k + nx;
-      //unsigned int kt   = k;
-      //unsigned int kb   = k + nxny;
-      //unsigned int ksw  = k + nx + 1;
-      //unsigned int kne  = k;
-      //unsigned int kse  = k + nx;
-      //unsigned int knw  = k + 1;
-      //unsigned int kbw  = k + nxny + 1;
-      //unsigned int kte  = k;
-      //unsigned int kbe  = k + nxny;
-      //unsigned int ktw  = k + 1;
-      //unsigned int kbs  = k + nxny + nx;
-      //unsigned int ktn  = k;
-      //unsigned int kbn  = k + nxny;
-      //unsigned int kts  = k + nx;
-      //unsigned int ktse = k + nx;
-      //unsigned int kbnw = k + nxny + 1;
-      //unsigned int ktnw = k + 1;
-      //unsigned int kbse = k + nxny + nx;
-      //unsigned int ktsw = k + nx + 1;
-      //unsigned int kbne = k + nxny;
-      //unsigned int ktne = k;
-      //unsigned int kbsw = k + nxny + nx + 1;
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int k1zero= k1;
-      unsigned int k1e   = k1;
-      unsigned int k1w   = neighborX[k1];
-      unsigned int k1n   = k1;
-      unsigned int k1s   = neighborY[k1];
-      unsigned int k1t   = k1;
-      unsigned int k1b   = neighborZ[k1];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = k1;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = k1;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = k1;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = k1;
-      unsigned int k1bsw = neighborZ[k1sw];
-      //unsigned int k1zero= k1;
-      //unsigned int k1e   = k1;
-      //unsigned int k1w   = k1 + 1;
-      //unsigned int k1n   = k1;
-      //unsigned int k1s   = k1 + nx;
-      //unsigned int k1t   = k1;
-      //unsigned int k1b   = k1 + nxny;
-      //unsigned int k1sw  = k1 + nx + 1;
-      //unsigned int k1ne  = k1;
-      //unsigned int k1se  = k1 + nx;
-      //unsigned int k1nw  = k1 + 1;
-      //unsigned int k1bw  = k1 + nxny + 1;
-      //unsigned int k1te  = k1;
-      //unsigned int k1be  = k1 + nxny;
-      //unsigned int k1tw  = k1 + 1;
-      //unsigned int k1bs  = k1 + nxny + nx;
-      //unsigned int k1tn  = k1;
-      //unsigned int k1bn  = k1 + nxny;
-      //unsigned int k1ts  = k1 + nx;
-      //unsigned int k1tse = k1 + nx;
-      //unsigned int k1bnw = k1 + nxny + 1;
-      //unsigned int k1tnw = k1 + 1;
-      //unsigned int k1bse = k1 + nxny + nx;
-      //unsigned int k1tsw = k1 + nx + 1;
-      //unsigned int k1bne = k1 + nxny;
-      //unsigned int k1tne = k1;
-      //unsigned int k1bsw = k1 + nxny + nx + 1;
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[k1e   ];
-      f1_E    = (D.f[DIR_M00])[k1w   ];
-      f1_S    = (D.f[DIR_0P0])[k1n   ];
-      f1_N    = (D.f[DIR_0M0])[k1s   ];
-      f1_B    = (D.f[DIR_00P])[k1t   ];
-      f1_T    = (D.f[DIR_00M])[k1b   ];
-      f1_SW   = (D.f[DIR_PP0])[k1ne  ];
-      f1_NE   = (D.f[DIR_MM0])[k1sw  ];
-      f1_NW   = (D.f[DIR_PM0])[k1se  ];
-      f1_SE   = (D.f[DIR_MP0])[k1nw  ];
-      f1_BW   = (D.f[DIR_P0P])[k1te  ];
-      f1_TE   = (D.f[DIR_M0M])[k1bw  ];
-      f1_TW   = (D.f[DIR_P0M])[k1be  ];
-      f1_BE   = (D.f[DIR_M0P])[k1tw  ];
-      f1_BS   = (D.f[DIR_0PP])[k1tn  ];
-      f1_TN   = (D.f[DIR_0MM])[k1bs  ];
-      f1_TS   = (D.f[DIR_0PM])[k1bn  ];
-      f1_BN   = (D.f[DIR_0MP])[k1ts  ];
-      f1_ZERO = (D.f[DIR_000])[k1zero];
-      f1_BSW  = (D.f[DIR_PPP])[k1tne ];
-      f1_BNE  = (D.f[DIR_MMP])[k1tsw ];
-      f1_BNW  = (D.f[DIR_PMP])[k1tse ];
-      f1_BSE  = (D.f[DIR_MPP])[k1tnw ];
-      f1_TSW  = (D.f[DIR_PPM])[k1bne ];
-      f1_TNE  = (D.f[DIR_MMM])[k1bsw ];
-      f1_TNW  = (D.f[DIR_PMM])[k1bse ];
-      f1_TSE  = (D.f[DIR_MPM])[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[DIR_P00])[ke   ] = f1_W   -c2o27*drho1;
-      (D.f[DIR_M00])[kw   ] = f1_E   -c2o27*drho1;
-      (D.f[DIR_0P0])[kn   ] = f1_S   -c2o27*drho1;
-      (D.f[DIR_0M0])[ks   ] = f1_N   -c2o27*drho1;
-      (D.f[DIR_00P])[kt   ] = f1_B   -c2o27*drho1;
-      (D.f[DIR_00M])[kb   ] = f1_T   -c2o27*drho1;
-      (D.f[DIR_PP0])[kne  ] = f1_SW  -c1o54*drho1;
-      (D.f[DIR_MM0])[ksw  ] = f1_NE  -c1o54*drho1;
-      (D.f[DIR_PM0])[kse  ] = f1_NW  -c1o54*drho1;
-      (D.f[DIR_MP0])[knw  ] = f1_SE  -c1o54*drho1;
-      (D.f[DIR_P0P])[kte  ] = f1_BW  -c1o54*drho1;
-      (D.f[DIR_M0M])[kbw  ] = f1_TE  -c1o54*drho1;
-      (D.f[DIR_P0M])[kbe  ] = f1_TW  -c1o54*drho1;
-      (D.f[DIR_M0P])[ktw  ] = f1_BE  -c1o54*drho1;
-      (D.f[DIR_0PP])[ktn  ] = f1_BS  -c1o54*drho1;
-      (D.f[DIR_0MM])[kbs  ] = f1_TN  -c1o54*drho1;
-      (D.f[DIR_0PM])[kbn  ] = f1_TS  -c1o54*drho1;
-      (D.f[DIR_0MP])[kts  ] = f1_BN  -c1o54*drho1;
-      (D.f[DIR_000])[kzero] = f1_ZERO-c8o27*drho1;
-      (D.f[DIR_PPP])[ktne ] = f1_BSW -c1o216*drho1;
-      (D.f[DIR_MMP])[ktsw ] = f1_BNE -c1o216*drho1;
-      (D.f[DIR_PMP])[ktse ] = f1_BNW -c1o216*drho1;
-      (D.f[DIR_MPP])[ktnw ] = f1_BSE -c1o216*drho1;
-      (D.f[DIR_PPM])[kbne ] = f1_TSW -c1o216*drho1;
-      (D.f[DIR_MMM])[kbsw ] = f1_TNE -c1o216*drho1;
-      (D.f[DIR_PMM])[kbse ] = f1_TNW -c1o216*drho1;
-      (D.f[DIR_MPM])[kbnw ] = f1_TSE -c1o216*drho1;
-   }
-   __syncthreads();
-}
-//////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDevice27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    real* QQ,
-    unsigned int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   }
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index
-   const unsigned  y = blockIdx.x;   // Globaler y-Index
-   const unsigned  z = blockIdx.y;   // Globaler z-Index
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
-      ////////////////////////////////////////////////////////////////////////////////
-      real q, vx1, vx2, vx3, drho;
-      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);
-
-
-      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);
-
-      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);
-      //////////////////////////////////////////////////////////////////////////
-      ////////////////////////////////////////////////////////////////////////////////
-      drho = rhoBC[k];
-      //deltaRho = (rhoBC[k] + one) / (deltaRho + one);
-      ////////////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_M00])[kw]=c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-         //(D.f[DIR_P00])[ke]=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_P00])[ke]=c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-         //(D.f[DIR_M00])[kw]=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0M0])[ks]=c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-         //(D.f[DIR_0P0])[kn]=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0P0])[kn]=c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-         //(D.f[DIR_0M0])[ks]=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_00M])[kb]=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-         //(D.f[DIR_00P])[kt]=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_00P])[kt]=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-         //(D.f[DIR_00M])[kb]=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
-      }
-
-      q = q_dirNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MM0])[ksw]=c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-         //(D.f[DIR_PP0])[kne]=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      }
-
-      q = q_dirSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PP0])[kne]=c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-         //(D.f[DIR_MM0])[ksw]=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      }
-
-      q = q_dirSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MP0])[knw]=c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-         //(D.f[DIR_PM0])[kse]=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      }
-
-      q = q_dirNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PM0])[kse]=c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-         //(D.f[DIR_MP0])[knw]=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      }
-
-      q = q_dirTE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_M0M])[kbw]=c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-         //(D.f[DIR_P0P])[kte]=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      }
-
-      q = q_dirBW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_P0P])[kte]=c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-         //(D.f[DIR_M0M])[kbw]=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      }
-
-      q = q_dirBE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_M0P])[ktw]=c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-         //(D.f[DIR_P0M])[kbe]=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      }
-
-      q = q_dirTW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_P0M])[kbe]=c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-         //(D.f[DIR_M0P])[ktw]=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      }
-
-      q = q_dirTN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0MM])[kbs]=c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-         //(D.f[DIR_0PP])[ktn]=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      }
-
-      q = q_dirBS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0PP])[ktn]=c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-         //(D.f[DIR_0MM])[kbs]=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      }
-
-      q = q_dirBN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0MP])[kts]=c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-         //(D.f[DIR_0PM])[kbn]=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      }
-
-      q = q_dirTS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0PM])[kbn]=c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-         //(D.f[DIR_0MP])[kts]=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      }
-
-      q = q_dirTNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MMM])[kbsw]=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-         //(D.f[DIR_PPP])[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[DIR_PPP])[ktne]=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-         //(D.f[DIR_MMM])[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[DIR_MMP])[ktsw]=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-         //(D.f[DIR_PPM])[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[DIR_PPM])[kbne]=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-         //(D.f[DIR_MMP])[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[DIR_MPM])[kbnw]=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-         //(D.f[DIR_PMP])[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[DIR_PMP])[ktse]=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-         //(D.f[DIR_MPM])[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[DIR_MPP])[ktnw]=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-         //(D.f[DIR_PMM])[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[DIR_PMM])[kbse]=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-         //(D.f[DIR_MPP])[ktnw]=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceAntiBB27(
-    real* rhoBC,
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD,
-    int* k_Q,
-    real* QQ,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   }
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index
-   const unsigned  y = blockIdx.x;   // Globaler y-Index
-   const unsigned  z = blockIdx.y;   // Globaler z-Index
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
-      f_ZERO = (D.f[DIR_000])[kzero];
-      ////////////////////////////////////////////////////////////////////////////////
-      //real vx1, vx2, vx3, drho;
-      //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);
-
-
-      //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);
-
-      //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);
-      //////////////////////////////////////////////////////////////////////////
-      real drho    = f_ZERO+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;
-      drho = drho - rhoBC[k];
-     drho *= 0.01f;
-      ////////////////////////////////////////////////////////////////////////////////
-     real q;
-      //deltaRho = (rhoBC[k] + one) / (deltaRho + one);
-      ////////////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_M00])[kw]=f_W-c2o27*drho;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_P00])[ke]=f_E-c2o27*drho;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0M0])[ks]=f_S-c2o27*drho;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0P0])[kn]=f_N-c2o27*drho;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_00M])[kb]=f_B-c2o27*drho;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_00P])[kt]=f_T-c2o27*drho;
-      }
-
-      q = q_dirNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MM0])[ksw]=f_SW-c1o54*drho;
-      }
-
-      q = q_dirSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PP0])[kne]=f_NE-c1o54*drho;
-      }
-
-      q = q_dirSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MP0])[knw]=f_NW-c1o54*drho;
-      }
-
-      q = q_dirNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PM0])[kse]=f_SE-c1o54*drho;
-      }
-
-      q = q_dirTE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_M0M])[kbw]=f_BW-c1o54*drho;
-      }
-
-      q = q_dirBW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_P0P])[kte]=f_TE-c1o54*drho;
-      }
-
-      q = q_dirBE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_M0P])[ktw]=f_TW-c1o54*drho;
-      }
-
-      q = q_dirTW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_P0M])[kbe]=f_BE-c1o54*drho;
-      }
-
-      q = q_dirTN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0MM])[kbs]=f_BS-c1o54*drho;
-      }
-
-      q = q_dirBS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0PP])[ktn]=f_TN-c1o54*drho;
-      }
-
-      q = q_dirBN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0MP])[kts]=f_TS-c1o54*drho;
-      }
-
-      q = q_dirTS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_0PM])[kbn]=f_BN-c1o54*drho;
-      }
-
-      q = q_dirTNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MMM])[kbsw]=f_BSW-c1o216*drho;
-      }
-
-      q = q_dirBSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PPP])[ktne]=f_TNE-c1o216*drho;
-      }
-
-      q = q_dirBNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MMP])[ktsw]=f_TSW-c1o216*drho;
-      }
-
-      q = q_dirTSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PPM])[kbne]=f_BNE-c1o216*drho;
-      }
-
-      q = q_dirTSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MPM])[kbnw]=f_BNW-c1o216*drho;
-      }
-
-      q = q_dirBNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PMP])[ktse]=f_TSE-c1o216*drho;
-      }
-
-      q = q_dirBSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_MPP])[ktnw]=f_TNW-c1o216*drho;
-      }
-
-      q = q_dirTNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[DIR_PMM])[kbse]=f_BSE-c1o216*drho;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceFixBackflow27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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 deltaRho;
-      ////////////////////////////////////////////////////////////////////////////////
-      deltaRho = rhoBC[k];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         (D.f[DIR_M00])[kw]       = c2o27  * deltaRho;
-         (D.f[DIR_P00])[ke]       = c2o27  * deltaRho;
-         (D.f[DIR_0M0])[ks]       = c2o27  * deltaRho;
-         (D.f[DIR_0P0])[kn]       = c2o27  * deltaRho;
-         (D.f[DIR_00M])[kb]       = c2o27  * deltaRho;
-         (D.f[DIR_00P])[kt]       = c2o27  * deltaRho;
-         (D.f[DIR_MM0])[ksw]     = c1o54  * deltaRho;
-         (D.f[DIR_PP0])[kne]     = c1o54  * deltaRho;
-         (D.f[DIR_MP0])[knw]     = c1o54  * deltaRho;
-         (D.f[DIR_PM0])[kse]     = c1o54  * deltaRho;
-         (D.f[DIR_M0M])[kbw]     = c1o54  * deltaRho;
-         (D.f[DIR_P0P])[kte]     = c1o54  * deltaRho;
-         (D.f[DIR_M0P])[ktw]     = c1o54  * deltaRho;
-         (D.f[DIR_P0M])[kbe]     = c1o54  * deltaRho;
-         (D.f[DIR_0MM])[kbs]     = c1o54  * deltaRho;
-         (D.f[DIR_0PP])[ktn]     = c1o54  * deltaRho;
-         (D.f[DIR_0MP])[kts]     = c1o54  * deltaRho;
-         (D.f[DIR_0PM])[kbn]     = c1o54  * deltaRho;
-         (D.f[DIR_MMM])[kbsw]   = c1o216 * deltaRho;
-         (D.f[DIR_PPP])[ktne]   = c1o216 * deltaRho;
-         (D.f[DIR_MMP])[ktsw]   = c1o216 * deltaRho;
-         (D.f[DIR_PPM])[kbne]   = c1o216 * deltaRho;
-         (D.f[DIR_MPM])[kbnw]   = c1o216 * deltaRho;
-         (D.f[DIR_PMP])[ktse]   = c1o216 * deltaRho;
-         (D.f[DIR_MPP])[ktnw]   = c1o216 * deltaRho;
-         (D.f[DIR_PMM])[kbse]   = c1o216 * deltaRho;
-         (D.f[DIR_000])[kzero] = c8o27  * deltaRho;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceDirDepBot27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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 rho;
-      ////////////////////////////////////////////////////////////////////////////////
-      rho = rhoBC[k];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[ke   ];
-      f_W    = (D.f[DIR_M00])[kw   ];
-      f_N    = (D.f[DIR_0P0])[kn   ];
-      f_S    = (D.f[DIR_0M0])[ks   ];
-      f_T    = (D.f[DIR_00P])[kt   ];
-      f_NE   = (D.f[DIR_PP0])[kne  ];
-      f_SW   = (D.f[DIR_MM0])[ksw  ];
-      f_SE   = (D.f[DIR_PM0])[kse  ];
-      f_NW   = (D.f[DIR_MP0])[knw  ];
-      f_TE   = (D.f[DIR_P0P])[kte  ];
-      f_TW   = (D.f[DIR_M0P])[ktw  ];
-      f_TN   = (D.f[DIR_0PP])[ktn  ];
-      f_TS   = (D.f[DIR_0MP])[kts  ];
-      f_ZERO = (D.f[DIR_000])[kzero];
-      f_TNE  = (D.f[DIR_PPP])[ktne ];
-      f_TSW  = (D.f[DIR_MMP])[ktsw ];
-      f_TSE  = (D.f[DIR_PMP])[ktse ];
-      f_TNW  = (D.f[DIR_MPP])[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;
-      //f_BW  = ( two*rho+      f_SW-      four*f_TSW+     f_W-    four*f_TW+      f_NW-      four*f_TNW- two*f_S-    four*f_TS- two*f_ZERO-four*f_T- two*f_N-    four*f_TN- five*f_SE-      four*f_TSE-five*f_E+fourteen*f_TE- five*f_NE-      four*f_TNE)/eighteen;
-      //f_BE  = ( two*rho- five*f_SW-      four*f_TSW-five*f_W+fourteen*f_TW- five*f_NW-      four*f_TNW- two*f_S-    four*f_TS- two*f_ZERO-four*f_T- two*f_N-    four*f_TN+      f_SE-      four*f_TSE+     f_E-    four*f_TE+      f_NE-      four*f_TNE)/eighteen;
-      //f_BS  = ( two*rho+      f_SW-      four*f_TSW- two*f_W-    four*f_TW- five*f_NW-      four*f_TNW+     f_S-    four*f_TS- two*f_ZERO-four*f_T-five*f_N+fourteen*f_TN+      f_SE-      four*f_TSE- two*f_E-    four*f_TE- five*f_NE-      four*f_TNE)/eighteen;
-      //f_BN  = ( two*rho- five*f_SW-      four*f_TSW- two*f_W-    four*f_TW+      f_NW-      four*f_TNW-five*f_S+fourteen*f_TS- two*f_ZERO-four*f_T+     f_N-    four*f_TN- five*f_SE-      four*f_TSE- two*f_E-    four*f_TE+      f_NE-      four*f_TNE)/eighteen;
-      //f_BSW = ( two*rho+ four*f_SW-      four*f_TSW+     f_W-    four*f_TW-  two*f_NW-      four*f_TNW+     f_S-    four*f_TS- two*f_ZERO-four*f_T-five*f_N-    four*f_TN-  two*f_SE-      four*f_TSE-five*f_E-    four*f_TE-eight*f_NE+sixtyeight*f_TNE)/seventytwo;
-      //f_BNE = ( two*rho-eight*f_SW+sixtyeight*f_TSW-five*f_W-    four*f_TW-  two*f_NW-      four*f_TNW-five*f_S-    four*f_TS- two*f_ZERO-four*f_T+     f_N-    four*f_TN-  two*f_SE-      four*f_TSE+     f_E-    four*f_TE+ four*f_NE-      four*f_TNE)/seventytwo;
-      //f_BNW = ( two*rho-  two*f_SW-      four*f_TSW+     f_W-    four*f_TW+ four*f_NW-      four*f_TNW-five*f_S-    four*f_TS- two*f_ZERO-four*f_T+     f_N-    four*f_TN-eight*f_SE+sixtyeight*f_TSE-five*f_E-    four*f_TE-  two*f_NE-      four*f_TNE)/seventytwo;
-      //f_BSE = ( two*rho-  two*f_SW-      four*f_TSW-five*f_W-    four*f_TW-eight*f_NW+sixtyeight*f_TNW+     f_S-    four*f_TS- two*f_ZERO-four*f_T-five*f_N-    four*f_TN+ four*f_SE-      four*f_TSE+     f_E-    four*f_TE-  two*f_NE-      four*f_TNE)/seventytwo;
-
-      //real drho   =    f_ZERO+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;
-      //real vx1     =  (f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW);
-      //real vx2     =  (f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW);
-      //real vx3     =  (f_T -f_B +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);
-
-      //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-      //(D.f[DIR_000])[kzero] = c8over27*  (drho-cusq);
-      //(D.f[DIR_P00])[ke]    = c2over27*  (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);
-      //(D.f[DIR_M00])[kw]    = c2over27*  (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);
-      //(D.f[DIR_0P0])[kn]     = c2over27*  (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
-      //(D.f[DIR_0M0])[ks]    = c2over27*  (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
-      //(D.f[DIR_00P])[kt]    = c2over27*  (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
-      //(D.f[DIR_00M])[kb]    = c2over27*  (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
-      //(D.f[DIR_PP0])[kne]   = c1over54*  (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
-      //(D.f[DIR_MM0])[ksw]   = c1over54*  (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
-      //(D.f[DIR_PM0])[kse]   =  c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
-      //(D.f[DIR_MP0])[knw]   =  c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
-      //(D.f[DIR_P0P])[kte]   =  c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
-      //(D.f[DIR_M0M])[kbw]   =  c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
-      //(D.f[DIR_P0M])[kbe]   =  c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
-      //(D.f[DIR_M0P])[ktw]   =  c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
-      //(D.f[DIR_0PP])[ktn]   =  c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
-      //(D.f[DIR_0MM])[kbs]   =  c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
-      //(D.f[DIR_0PM])[kbn]   =  c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
-      //(D.f[DIR_0MP])[kts]   =  c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
-      //(D.f[DIR_PPP])[ktne]  =  c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
-      //(D.f[DIR_MMM])[kbsw]  =  c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
-      //(D.f[DIR_PPM])[kbne]  =  c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
-      //(D.f[DIR_MMP])[ktsw]  =  c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
-      //(D.f[DIR_PMP])[ktse]  =  c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
-      //(D.f[DIR_MPM])[kbnw]  =  c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
-      //(D.f[DIR_PMM])[kbse]  =  c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
-      //(D.f[DIR_MPP])[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[DIR_00M])[kb]     = (f_T+c2o27)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c2o27;
-      (D.f[DIR_M0M])[kbw]   = (f_TW+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[DIR_P0M])[kbe]   = (f_TE+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[DIR_0MM])[kbs]   = (f_TS+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[DIR_0PM])[kbn]   = (f_TN+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[DIR_MMM])[kbsw] = (f_TSW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-      (D.f[DIR_PPM])[kbne] = (f_TNE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-      (D.f[DIR_MPM])[kbnw] = (f_TNW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-      (D.f[DIR_PMM])[kbse] = (f_TSE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real cs)
-{
-   return f1[dir] * cs + (c1o1 - cs) * f[dir];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressNoRhoDevice27(
-    real* rhoBC,
-    real* distributions,
-    int* k_Q,
-    int* k_N,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep,
-    int direction)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-
-   if(nodeIndex >= numberOfBCnodes) return;
-
-   ////////////////////////////////////////////////////////////////////////////////
-   //index
-   unsigned int KQK  = k_Q[nodeIndex];
-   // 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];
-   ////////////////////////////////////////////////////////////////////////////////
-   //index1
-   unsigned int K1QK  = k_N[nodeIndex];
-   //unsigned int k1zero= K1QK;
-   unsigned int k1e   = K1QK;
-   unsigned int k1w   = neighborX[K1QK];
-   unsigned int k1n   = K1QK;
-   unsigned int k1s   = neighborY[K1QK];
-   unsigned int k1t   = K1QK;
-   unsigned int k1b   = neighborZ[K1QK];
-   unsigned int k1sw  = neighborY[k1w];
-   unsigned int k1ne  = K1QK;
-   unsigned int k1se  = k1s;
-   unsigned int k1nw  = k1w;
-   unsigned int k1bw  = neighborZ[k1w];
-   unsigned int k1te  = K1QK;
-   unsigned int k1be  = k1b;
-   unsigned int k1tw  = k1w;
-   unsigned int k1bs  = neighborZ[k1s];
-   unsigned int k1tn  = K1QK;
-   unsigned int k1bn  = k1b;
-   unsigned int k1ts  = k1s;
-   unsigned int k1tse = k1s;
-   unsigned int k1bnw = k1bw;
-   unsigned int k1tnw = k1w;
-   unsigned int k1bse = k1bs;
-   unsigned int k1tsw = k1sw;
-   unsigned int k1bne = k1b;
-   unsigned int k1tne = K1QK;
-   unsigned int k1bsw = neighborZ[k1sw];
-   ////////////////////////////////////////////////////////////////////////////////
-   Distributions27 dist;
-   getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
-   real f[27], f1[27];
-   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   f1[DIR_P00] = (dist.f[DIR_P00])[k1e   ];
-   f1[DIR_M00] = (dist.f[DIR_M00])[k1w   ];
-   f1[DIR_0P0] = (dist.f[DIR_0P0])[k1n   ];
-   f1[DIR_0M0] = (dist.f[DIR_0M0])[k1s   ];
-   f1[DIR_00P] = (dist.f[DIR_00P])[k1t   ];
-   f1[DIR_00M] = (dist.f[DIR_00M])[k1b   ];
-   f1[DIR_PP0] = (dist.f[DIR_PP0])[k1ne  ];
-   f1[DIR_MM0] = (dist.f[DIR_MM0])[k1sw  ];
-   f1[DIR_PM0] = (dist.f[DIR_PM0])[k1se  ];
-   f1[DIR_MP0] = (dist.f[DIR_MP0])[k1nw  ];
-   f1[DIR_P0P] = (dist.f[DIR_P0P])[k1te  ];
-   f1[DIR_M0M] = (dist.f[DIR_M0M])[k1bw  ];
-   f1[DIR_P0M] = (dist.f[DIR_P0M])[k1be  ];
-   f1[DIR_M0P] = (dist.f[DIR_M0P])[k1tw  ];
-   f1[DIR_0PP] = (dist.f[DIR_0PP])[k1tn  ];
-   f1[DIR_0MM] = (dist.f[DIR_0MM])[k1bs  ];
-   f1[DIR_0PM] = (dist.f[DIR_0PM])[k1bn  ];
-   f1[DIR_0MP] = (dist.f[DIR_0MP])[k1ts  ];
-   // f1[DIR_000] = (dist.f[DIR_000])[k1zero];
-   f1[DIR_PPP] = (dist.f[DIR_PPP])[k1tne ];
-   f1[DIR_MMP] = (dist.f[DIR_MMP])[k1tsw ];
-   f1[DIR_PMP] = (dist.f[DIR_PMP])[k1tse ];
-   f1[DIR_MPP] = (dist.f[DIR_MPP])[k1tnw ];
-   f1[DIR_PPM] = (dist.f[DIR_PPM])[k1bne ];
-   f1[DIR_MMM] = (dist.f[DIR_MMM])[k1bsw ];
-   f1[DIR_PMM] = (dist.f[DIR_PMM])[k1bse ];
-   f1[DIR_MPM] = (dist.f[DIR_MPM])[k1bnw ];
-   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   f[DIR_P00] = (dist.f[DIR_P00])[ke   ];
-   f[DIR_M00] = (dist.f[DIR_M00])[kw   ];
-   f[DIR_0P0] = (dist.f[DIR_0P0])[kn   ];
-   f[DIR_0M0] = (dist.f[DIR_0M0])[ks   ];
-   f[DIR_00P] = (dist.f[DIR_00P])[kt   ];
-   f[DIR_00M] = (dist.f[DIR_00M])[kb   ];
-   f[DIR_PP0] = (dist.f[DIR_PP0])[kne  ];
-   f[DIR_MM0] = (dist.f[DIR_MM0])[ksw  ];
-   f[DIR_PM0] = (dist.f[DIR_PM0])[kse  ];
-   f[DIR_MP0] = (dist.f[DIR_MP0])[knw  ];
-   f[DIR_P0P] = (dist.f[DIR_P0P])[kte  ];
-   f[DIR_M0M] = (dist.f[DIR_M0M])[kbw  ];
-   f[DIR_P0M] = (dist.f[DIR_P0M])[kbe  ];
-   f[DIR_M0P] = (dist.f[DIR_M0P])[ktw  ];
-   f[DIR_0PP] = (dist.f[DIR_0PP])[ktn  ];
-   f[DIR_0MM] = (dist.f[DIR_0MM])[kbs  ];
-   f[DIR_0PM] = (dist.f[DIR_0PM])[kbn  ];
-   f[DIR_0MP] = (dist.f[DIR_0MP])[kts  ];
-   // f[DIR_000] = (dist.f[DIR_000])[kzero];
-   f[DIR_PPP] = (dist.f[DIR_PPP])[ktne ];
-   f[DIR_MMP] = (dist.f[DIR_MMP])[ktsw ];
-   f[DIR_PMP] = (dist.f[DIR_PMP])[ktse ];
-   f[DIR_MPP] = (dist.f[DIR_MPP])[ktnw ];
-   f[DIR_PPM] = (dist.f[DIR_PPM])[kbne ];
-   f[DIR_MMM] = (dist.f[DIR_MMM])[kbsw ];
-   f[DIR_PMM] = (dist.f[DIR_PMM])[kbse ];
-   f[DIR_MPM] = (dist.f[DIR_MPM])[kbnw ];
-   //////////////////////////////////////////////////////////////////////////
-
-
-   real cs = c1o1 / sqrtf(c3o1);
-
-   //////////////////////////////////////////////////////////////////////////
-   getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
-   switch(direction)
-   {
-      case MZZ:
-         (dist.f[DIR_P00])[ke   ] = computeOutflowDistribution(f, f1, DIR_P00, cs);
-         (dist.f[DIR_PM0])[kse  ] = computeOutflowDistribution(f, f1, DIR_PM0, cs);
-         (dist.f[DIR_PP0])[kne  ] = computeOutflowDistribution(f, f1, DIR_PP0, cs);
-         (dist.f[DIR_P0M])[kbe  ] = computeOutflowDistribution(f, f1, DIR_P0M, cs);
-         (dist.f[DIR_P0P])[kte  ] = computeOutflowDistribution(f, f1, DIR_P0P, cs);
-         (dist.f[DIR_PMP])[ktse ] = computeOutflowDistribution(f, f1, DIR_PMP, cs);
-         (dist.f[DIR_PPP])[ktne ] = computeOutflowDistribution(f, f1, DIR_PPP, cs);
-         (dist.f[DIR_PMM])[kbse ] = computeOutflowDistribution(f, f1, DIR_PMM, cs);
-         (dist.f[DIR_PPM])[kbne ] = computeOutflowDistribution(f, f1, DIR_PPM, cs);
-         break;
-
-      case PZZ:
-         (dist.f[DIR_M00])[kw   ] = computeOutflowDistribution(f, f1, DIR_M00, cs);
-         (dist.f[DIR_MM0])[ksw  ] = computeOutflowDistribution(f, f1, DIR_MM0, cs);
-         (dist.f[DIR_MP0])[knw  ] = computeOutflowDistribution(f, f1, DIR_MP0, cs);
-         (dist.f[DIR_M0M])[kbw  ] = computeOutflowDistribution(f, f1, DIR_M0M, cs);
-         (dist.f[DIR_M0P])[ktw  ] = computeOutflowDistribution(f, f1, DIR_M0P, cs);
-         (dist.f[DIR_MMP])[ktsw ] = computeOutflowDistribution(f, f1, DIR_MMP, cs);
-         (dist.f[DIR_MPP])[ktnw ] = computeOutflowDistribution(f, f1, DIR_MPP, cs);
-         (dist.f[DIR_MMM])[kbsw ] = computeOutflowDistribution(f, f1, DIR_MMM, cs);
-         (dist.f[DIR_MPM])[kbnw ] = computeOutflowDistribution(f, f1, DIR_MPM, cs);
-         break;
-
-      case ZMZ:
-         (dist.f[DIR_0P0])[kn   ] = computeOutflowDistribution(f, f1, DIR_0P0, cs);
-         (dist.f[DIR_PP0])[kne  ] = computeOutflowDistribution(f, f1, DIR_PP0, cs);
-         (dist.f[DIR_MP0])[knw  ] = computeOutflowDistribution(f, f1, DIR_MP0, cs);
-         (dist.f[DIR_0PP])[ktn  ] = computeOutflowDistribution(f, f1, DIR_0PP, cs);
-         (dist.f[DIR_0PM])[kbn  ] = computeOutflowDistribution(f, f1, DIR_0PM, cs);
-         (dist.f[DIR_PPP])[ktne ] = computeOutflowDistribution(f, f1, DIR_PPP, cs);
-         (dist.f[DIR_MPP])[ktnw ] = computeOutflowDistribution(f, f1, DIR_MPP, cs);
-         (dist.f[DIR_PPM])[kbne ] = computeOutflowDistribution(f, f1, DIR_PPM, cs);
-         (dist.f[DIR_MPM])[kbnw ] = computeOutflowDistribution(f, f1, DIR_MPM, cs);
-         break;
-
-      case ZPZ:
-         (dist.f[DIR_0M0])[ks   ] = computeOutflowDistribution(f, f1, DIR_0M0, cs);
-         (dist.f[DIR_PM0])[kse  ] = computeOutflowDistribution(f, f1, DIR_PM0, cs);
-         (dist.f[DIR_MM0])[ksw  ] = computeOutflowDistribution(f, f1, DIR_MM0, cs);
-         (dist.f[DIR_0MP])[kts  ] = computeOutflowDistribution(f, f1, DIR_0MP, cs);
-         (dist.f[DIR_0MM])[kbs  ] = computeOutflowDistribution(f, f1, DIR_0MM, cs);
-         (dist.f[DIR_PMP])[ktse ] = computeOutflowDistribution(f, f1, DIR_PMP, cs);
-         (dist.f[DIR_MMP])[ktsw ] = computeOutflowDistribution(f, f1, DIR_MMP, cs);
-         (dist.f[DIR_PMM])[kbse ] = computeOutflowDistribution(f, f1, DIR_PMM, cs);
-         (dist.f[DIR_MMM])[kbsw ] = computeOutflowDistribution(f, f1, DIR_MMM, cs);
-         break;
-
-      case ZZM:
-         (dist.f[DIR_00P])[kt   ] = computeOutflowDistribution(f, f1, DIR_00P, cs);
-         (dist.f[DIR_P0P])[kte  ] = computeOutflowDistribution(f, f1, DIR_P0P, cs);
-         (dist.f[DIR_M0P])[ktw  ] = computeOutflowDistribution(f, f1, DIR_M0P, cs);
-         (dist.f[DIR_0PP])[ktn  ] = computeOutflowDistribution(f, f1, DIR_0PP, cs);
-         (dist.f[DIR_0MP])[kts  ] = computeOutflowDistribution(f, f1, DIR_0MP, cs);
-         (dist.f[DIR_PPP])[ktne ] = computeOutflowDistribution(f, f1, DIR_PPP, cs);
-         (dist.f[DIR_MPP])[ktnw ] = computeOutflowDistribution(f, f1, DIR_MPP, cs);
-         (dist.f[DIR_PMP])[ktse ] = computeOutflowDistribution(f, f1, DIR_PMP, cs);
-         (dist.f[DIR_MMP])[ktsw ] = computeOutflowDistribution(f, f1, DIR_MMP, cs);
-         break;
-
-      case ZZP:
-         (dist.f[DIR_00M])[kb   ] = computeOutflowDistribution(f, f1, DIR_00M, cs);
-         (dist.f[DIR_P0M])[kbe  ] = computeOutflowDistribution(f, f1, DIR_P0M, cs);
-         (dist.f[DIR_M0M])[kbw  ] = computeOutflowDistribution(f, f1, DIR_M0M, cs);
-         (dist.f[DIR_0PM])[kbn  ] = computeOutflowDistribution(f, f1, DIR_0PM, cs);
-         (dist.f[DIR_0MM])[kbs  ] = computeOutflowDistribution(f, f1, DIR_0MM, cs);
-         (dist.f[DIR_PPM])[kbne ] = computeOutflowDistribution(f, f1, DIR_PPM, cs);
-         (dist.f[DIR_MPM])[kbnw ] = computeOutflowDistribution(f, f1, DIR_MPM, cs);
-         (dist.f[DIR_PMM])[kbse ] = computeOutflowDistribution(f, f1, DIR_PMM, cs);
-         (dist.f[DIR_MMM])[kbsw ] = computeOutflowDistribution(f, f1, DIR_MMM, cs);
-         break;
-      default:
-         break;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real rhoCorrection, const real cs, const real weight)
-{
-   return f1[dir  ] * cs + (c1o1 - cs) * f[dir  ] - weight *rhoCorrection;
-}
-
-__global__ void QPressZeroRhoOutflowDevice27(
-    real* rhoBC,
-    real* distributions,
-    int* k_Q,
-    int* k_N,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep,
-    int direction,
-    real densityCorrectionFactor)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-
-   if( nodeIndex >= numberOfBCnodes ) return;
-
-   ////////////////////////////////////////////////////////////////////////////////
-   //index
-
-   uint k_000 = k_Q[nodeIndex];
-   uint k_M00 = neighborX[k_000];
-   uint k_0M0 = neighborY[k_000];
-   uint k_00M = neighborZ[k_000];
-   uint k_MM0 = neighborY[k_M00];
-   uint k_M0M = neighborZ[k_M00];
-   uint k_0MM = neighborZ[k_0M0];
-   uint k_MMM = neighborZ[k_MM0];
-
-   ////////////////////////////////////////////////////////////////////////////////
-   //index of neighbor
-   uint kN_000 = k_N[nodeIndex];
-   uint kN_M00 = neighborX[k_000];
-   uint kN_0M0 = neighborY[k_000];
-   uint kN_00M = neighborZ[k_000];
-   uint kN_MM0 = neighborY[k_M00];
-   uint kN_M0M = neighborZ[k_M00];
-   uint kN_0MM = neighborZ[k_0M0];
-   uint kN_MMM = neighborZ[k_MM0];
-   ////////////////////////////////////////////////////////////////////////////////
-   Distributions27 dist;
-   getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
-   real f[27], fN[27];
-   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   f[DIR_000] = (dist.f[DIR_000])[k_000];
-   f[DIR_P00] = (dist.f[DIR_P00])[k_000];
-   f[DIR_M00] = (dist.f[DIR_M00])[k_M00];
-   f[DIR_0P0] = (dist.f[DIR_0P0])[k_000];
-   f[DIR_0M0] = (dist.f[DIR_0M0])[k_0M0];
-   f[DIR_00P] = (dist.f[DIR_00P])[k_000];
-   f[DIR_00M] = (dist.f[DIR_00M])[k_00M];
-   f[DIR_PP0] = (dist.f[DIR_PP0])[k_000];
-   f[DIR_MM0] = (dist.f[DIR_MM0])[k_MM0];
-   f[DIR_PM0] = (dist.f[DIR_PM0])[k_0M0];
-   f[DIR_MP0] = (dist.f[DIR_MP0])[k_M00];
-   f[DIR_P0P] = (dist.f[DIR_P0P])[k_000];
-   f[DIR_M0M] = (dist.f[DIR_M0M])[k_M0M];
-   f[DIR_P0M] = (dist.f[DIR_P0M])[k_00M];
-   f[DIR_M0P] = (dist.f[DIR_M0P])[k_M00];
-   f[DIR_0PP] = (dist.f[DIR_0PP])[k_000];
-   f[DIR_0MM] = (dist.f[DIR_0MM])[k_0MM];
-   f[DIR_0PM] = (dist.f[DIR_0PM])[k_00M];
-   f[DIR_0MP] = (dist.f[DIR_0MP])[k_0M0];
-   f[DIR_PPP] = (dist.f[DIR_PPP])[k_000];
-   f[DIR_MPP] = (dist.f[DIR_MPP])[k_M00];
-   f[DIR_PMP] = (dist.f[DIR_PMP])[k_0M0];
-   f[DIR_MMP] = (dist.f[DIR_MMP])[k_MM0];
-   f[DIR_PPM] = (dist.f[DIR_PPM])[k_00M];
-   f[DIR_MPM] = (dist.f[DIR_MPM])[k_M0M];
-   f[DIR_PMM] = (dist.f[DIR_PMM])[k_0MM];
-   f[DIR_MMM] = (dist.f[DIR_MMM])[k_MMM];
-   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   fN[DIR_000] = (dist.f[DIR_000])[kN_000];
-   fN[DIR_P00] = (dist.f[DIR_P00])[kN_000];
-   fN[DIR_M00] = (dist.f[DIR_M00])[kN_M00];
-   fN[DIR_0P0] = (dist.f[DIR_0P0])[kN_000];
-   fN[DIR_0M0] = (dist.f[DIR_0M0])[kN_0M0];
-   fN[DIR_00P] = (dist.f[DIR_00P])[kN_000];
-   fN[DIR_00M] = (dist.f[DIR_00M])[kN_00M];
-   fN[DIR_PP0] = (dist.f[DIR_PP0])[kN_000];
-   fN[DIR_MM0] = (dist.f[DIR_MM0])[kN_MM0];
-   fN[DIR_PM0] = (dist.f[DIR_PM0])[kN_0M0];
-   fN[DIR_MP0] = (dist.f[DIR_MP0])[kN_M00];
-   fN[DIR_P0P] = (dist.f[DIR_P0P])[kN_000];
-   fN[DIR_M0M] = (dist.f[DIR_M0M])[kN_M0M];
-   fN[DIR_P0M] = (dist.f[DIR_P0M])[kN_00M];
-   fN[DIR_M0P] = (dist.f[DIR_M0P])[kN_M00];
-   fN[DIR_0PP] = (dist.f[DIR_0PP])[kN_000];
-   fN[DIR_0MM] = (dist.f[DIR_0MM])[kN_0MM];
-   fN[DIR_0PM] = (dist.f[DIR_0PM])[kN_00M];
-   fN[DIR_0MP] = (dist.f[DIR_0MP])[kN_0M0];
-   fN[DIR_PPP] = (dist.f[DIR_PPP])[kN_000];
-   fN[DIR_MPP] = (dist.f[DIR_MPP])[kN_M00];
-   fN[DIR_PMP] = (dist.f[DIR_PMP])[kN_0M0];
-   fN[DIR_MMP] = (dist.f[DIR_MMP])[kN_MM0];
-   fN[DIR_PPM] = (dist.f[DIR_PPM])[kN_00M];
-   fN[DIR_MPM] = (dist.f[DIR_MPM])[kN_M0M];
-   fN[DIR_PMM] = (dist.f[DIR_PMM])[kN_0MM];
-   fN[DIR_MMM] = (dist.f[DIR_MMM])[kN_MMM];
-   //////////////////////////////////////////////////////////////////////////
-   real drho = vf::lbm::getDensity(f);
-
-   real rhoCorrection = densityCorrectionFactor*drho;
-
-   real cs = c1o1 / sqrtf(c3o1);
-
-   getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
-
-   switch(direction)
-   {
-      case MZZ:
-         (dist.f[DIR_P00])[k_000] = computeOutflowDistribution(f, fN, DIR_P00  , rhoCorrection, cs, c2o27);
-         (dist.f[DIR_PM0])[k_0M0] = computeOutflowDistribution(f, fN, DIR_PM0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_PP0])[k_000] = computeOutflowDistribution(f, fN, DIR_PP0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_P0M])[k_00M] = computeOutflowDistribution(f, fN, DIR_P0M, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_P0P])[k_000] = computeOutflowDistribution(f, fN, DIR_P0P, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_PMP])[k_0M0] = computeOutflowDistribution(f, fN, DIR_PMP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PPP])[k_000] = computeOutflowDistribution(f, fN, DIR_PPP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PMM])[k_0MM] = computeOutflowDistribution(f, fN, DIR_PMM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PPM])[k_00M] = computeOutflowDistribution(f, fN, DIR_PPM, rhoCorrection, cs, c1o216);
-         break;
-
-      case PZZ:
-         (dist.f[DIR_M00])[k_M00] = computeOutflowDistribution(f, fN, DIR_M00, rhoCorrection, cs, c2o27);
-         (dist.f[DIR_MM0])[k_MM0] = computeOutflowDistribution(f, fN, DIR_MM0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_MP0])[k_M00] = computeOutflowDistribution(f, fN, DIR_MP0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_M0M])[k_M0M] = computeOutflowDistribution(f, fN, DIR_M0M, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_M0P])[k_M00] = computeOutflowDistribution(f, fN, DIR_M0P, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_MMP])[k_MM0] = computeOutflowDistribution(f, fN, DIR_MMP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MPP])[k_M00] = computeOutflowDistribution(f, fN, DIR_MPP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MMM])[k_MMM] = computeOutflowDistribution(f, fN, DIR_MMM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MPM])[k_M0M] = computeOutflowDistribution(f, fN, DIR_MPM, rhoCorrection, cs, c1o216);
-         break;
-
-      case ZMZ:
-         (dist.f[DIR_0P0])[k_000] = computeOutflowDistribution(f, fN, DIR_0P0, rhoCorrection, cs, c2o27);
-         (dist.f[DIR_PP0])[k_000] = computeOutflowDistribution(f, fN, DIR_PP0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_MP0])[k_M00] = computeOutflowDistribution(f, fN, DIR_MP0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0PP])[k_000] = computeOutflowDistribution(f, fN, DIR_0PP, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0PM])[k_00M] = computeOutflowDistribution(f, fN, DIR_0PM, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_PPP])[k_000] = computeOutflowDistribution(f, fN, DIR_PPP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MPP])[k_M00] = computeOutflowDistribution(f, fN, DIR_MPP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PPM])[k_00M] = computeOutflowDistribution(f, fN, DIR_PPM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MPM])[k_M0M] = computeOutflowDistribution(f, fN, DIR_MPM, rhoCorrection, cs, c1o216);
-         break;
-
-      case ZPZ:
-         (dist.f[DIR_0M0])[k_0M0] =computeOutflowDistribution(f, fN, DIR_0M0, rhoCorrection, cs, c2o27);
-         (dist.f[DIR_PM0])[k_0M0] =computeOutflowDistribution(f, fN, DIR_PM0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_MM0])[k_MM0] =computeOutflowDistribution(f, fN, DIR_MM0, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0MP])[k_0M0] =computeOutflowDistribution(f, fN, DIR_0MP, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0MM])[k_0MM] =computeOutflowDistribution(f, fN, DIR_0MM, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_PMP])[k_0M0] =computeOutflowDistribution(f, fN, DIR_PMP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MMP])[k_MM0] =computeOutflowDistribution(f, fN, DIR_MMP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PMM])[k_0MM] =computeOutflowDistribution(f, fN, DIR_PMM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MMM])[k_MMM] =computeOutflowDistribution(f, fN, DIR_MMM, rhoCorrection, cs, c1o216);
-         break;
-
-      case ZZM:
-         (dist.f[DIR_00P])[k_000] = computeOutflowDistribution(f, fN, DIR_00P, rhoCorrection, cs, c2o27);
-         (dist.f[DIR_P0P])[k_000] = computeOutflowDistribution(f, fN, DIR_P0P, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_M0P])[k_M00] = computeOutflowDistribution(f, fN, DIR_M0P, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0PP])[k_000] = computeOutflowDistribution(f, fN, DIR_0PP, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0MP])[k_0M0] = computeOutflowDistribution(f, fN, DIR_0MP, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_PPP])[k_000] = computeOutflowDistribution(f, fN, DIR_PPP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MPP])[k_M00] = computeOutflowDistribution(f, fN, DIR_MPP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PMP])[k_0M0] = computeOutflowDistribution(f, fN, DIR_PMP, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MMP])[k_MM0] = computeOutflowDistribution(f, fN, DIR_MMP, rhoCorrection, cs, c1o216);
-         break;
-
-      case ZZP:
-         (dist.f[DIR_00M])[k_00M] = computeOutflowDistribution(f, fN, DIR_00M, rhoCorrection, cs, c2o27);
-         (dist.f[DIR_P0M])[k_00M] = computeOutflowDistribution(f, fN, DIR_P0M, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_M0M])[k_M0M] = computeOutflowDistribution(f, fN, DIR_M0M, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0PM])[k_00M] = computeOutflowDistribution(f, fN, DIR_0PM, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_0MM])[k_0MM] = computeOutflowDistribution(f, fN, DIR_0MM, rhoCorrection, cs, c1o54);
-         (dist.f[DIR_PPM])[k_00M] = computeOutflowDistribution(f, fN, DIR_PPM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MPM])[k_M0M] = computeOutflowDistribution(f, fN, DIR_MPM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_PMM])[k_0MM] = computeOutflowDistribution(f, fN, DIR_PMM, rhoCorrection, cs, c1o216);
-         (dist.f[DIR_MMM])[k_MMM] = computeOutflowDistribution(f, fN, DIR_MMM, rhoCorrection, cs, c1o216);
-         break;
-      default:
-         break;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceOld27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int* k_N,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int K1QK  = k_N[k];
-      unsigned int k1zero= K1QK;
-      unsigned int k1e   = K1QK;
-      unsigned int k1w   = neighborX[K1QK];
-      unsigned int k1n   = K1QK;
-      unsigned int k1s   = neighborY[K1QK];
-      unsigned int k1t   = K1QK;
-      unsigned int k1b   = neighborZ[K1QK];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = K1QK;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = K1QK;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = K1QK;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = K1QK;
-      unsigned int k1bsw = neighborZ[k1sw];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[k1e   ];
-      f1_E    = (D.f[DIR_M00])[k1w   ];
-      f1_S    = (D.f[DIR_0P0])[k1n   ];
-      f1_N    = (D.f[DIR_0M0])[k1s   ];
-      f1_B    = (D.f[DIR_00P])[k1t   ];
-      f1_T    = (D.f[DIR_00M])[k1b   ];
-      f1_SW   = (D.f[DIR_PP0])[k1ne  ];
-      f1_NE   = (D.f[DIR_MM0])[k1sw  ];
-      f1_NW   = (D.f[DIR_PM0])[k1se  ];
-      f1_SE   = (D.f[DIR_MP0])[k1nw  ];
-      f1_BW   = (D.f[DIR_P0P])[k1te  ];
-      f1_TE   = (D.f[DIR_M0M])[k1bw  ];
-      f1_TW   = (D.f[DIR_P0M])[k1be  ];
-      f1_BE   = (D.f[DIR_M0P])[k1tw  ];
-      f1_BS   = (D.f[DIR_0PP])[k1tn  ];
-      f1_TN   = (D.f[DIR_0MM])[k1bs  ];
-      f1_TS   = (D.f[DIR_0PM])[k1bn  ];
-      f1_BN   = (D.f[DIR_0MP])[k1ts  ];
-      f1_ZERO = (D.f[DIR_000])[k1zero];
-      f1_BSW  = (D.f[DIR_PPP])[k1tne ];
-      f1_BNE  = (D.f[DIR_MMP])[k1tsw ];
-      f1_BNW  = (D.f[DIR_PMP])[k1tse ];
-      f1_BSE  = (D.f[DIR_MPP])[k1tnw ];
-      f1_TSW  = (D.f[DIR_PPM])[k1bne ];
-      f1_TNE  = (D.f[DIR_MMM])[k1bsw ];
-      f1_TNW  = (D.f[DIR_PMM])[k1bse ];
-      f1_TSE  = (D.f[DIR_MPM])[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;
-
-     //drho1 = (drho1 + rhoBC[k])/2.f;
-     drho1 = drho1 - rhoBC[k];
-      //////////////////////////////////////////////////////////////////////////
-
-      __syncthreads();
-
-      (D.f[DIR_P00])[ke   ] = f1_W   -c2o27*drho1;   //  c1o100;  // zero;  //
-      (D.f[DIR_M00])[kw   ] = f1_E   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0P0])[kn   ] = f1_S   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0M0])[ks   ] = f1_N   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_00P])[kt   ] = f1_B   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_00M])[kb   ] = f1_T   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PP0])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MM0])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PM0])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MP0])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_P0P])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_M0M])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_P0M])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_M0P])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0PP])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0MM])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0PM])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0MP])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_000])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PPP])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MMP])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PMP])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MPP])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PPM])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MMM])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PMM])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MPM])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceEQZ27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int* k_N,
-    real* kTestRE,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int K1QK  = k_N[k];
-      unsigned int k1zero= K1QK;
-      unsigned int k1e   = K1QK;
-      unsigned int k1w   = neighborX[K1QK];
-      unsigned int k1n   = K1QK;
-      unsigned int k1s   = neighborY[K1QK];
-      unsigned int k1t   = K1QK;
-      unsigned int k1b   = neighborZ[K1QK];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = K1QK;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = K1QK;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = K1QK;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = K1QK;
-      unsigned int k1bsw = neighborZ[k1sw];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////
-    //   Distributions27 kDistTest;
-    //      kDistTest.f[DIR_P00] = &kTestRE[DIR_P00 * numberOfBCnodes];
-    //      kDistTest.f[DIR_M00] = &kTestRE[DIR_M00 * numberOfBCnodes];
-    //      kDistTest.f[DIR_0P0] = &kTestRE[DIR_0P0 * numberOfBCnodes];
-    //      kDistTest.f[DIR_0M0] = &kTestRE[DIR_0M0 * numberOfBCnodes];
-    //      kDistTest.f[DIR_00P] = &kTestRE[DIR_00P * numberOfBCnodes];
-    //      kDistTest.f[DIR_00M] = &kTestRE[DIR_00M * numberOfBCnodes];
-    //      kDistTest.f[DIR_PP0] = &kTestRE[DIR_PP0 * numberOfBCnodes];
-    //      kDistTest.f[DIR_MM0] = &kTestRE[DIR_MM0 * numberOfBCnodes];
-    //      kDistTest.f[DIR_PM0] = &kTestRE[DIR_PM0 * numberOfBCnodes];
-    //      kDistTest.f[DIR_MP0] = &kTestRE[DIR_MP0 * numberOfBCnodes];
-    //      kDistTest.f[DIR_P0P] = &kTestRE[DIR_P0P * numberOfBCnodes];
-    //      kDistTest.f[DIR_M0M] = &kTestRE[DIR_M0M * numberOfBCnodes];
-    //      kDistTest.f[DIR_P0M] = &kTestRE[DIR_P0M * numberOfBCnodes];
-    //      kDistTest.f[DIR_M0P] = &kTestRE[DIR_M0P * numberOfBCnodes];
-    //      kDistTest.f[DIR_0PP] = &kTestRE[DIR_0PP * numberOfBCnodes];
-    //      kDistTest.f[DIR_0MM] = &kTestRE[DIR_0MM * numberOfBCnodes];
-    //      kDistTest.f[DIR_0PM] = &kTestRE[DIR_0PM * numberOfBCnodes];
-    //      kDistTest.f[DIR_0MP] = &kTestRE[DIR_0MP * numberOfBCnodes];
-    //      kDistTest.f[DIR_000] = &kTestRE[DIR_000 * numberOfBCnodes];
-    //      kDistTest.f[DIR_PPP] = &kTestRE[DIR_PPP * numberOfBCnodes];
-    //      kDistTest.f[DIR_MMP] = &kTestRE[DIR_MMP * numberOfBCnodes];
-    //      kDistTest.f[DIR_PMP] = &kTestRE[DIR_PMP * numberOfBCnodes];
-    //      kDistTest.f[DIR_MPP] = &kTestRE[DIR_MPP * numberOfBCnodes];
-    //      kDistTest.f[DIR_PPM] = &kTestRE[DIR_PPM * numberOfBCnodes];
-    //      kDistTest.f[DIR_MMM] = &kTestRE[DIR_MMM * numberOfBCnodes];
-    //      kDistTest.f[DIR_PMM] = &kTestRE[DIR_PMM * numberOfBCnodes];
-    //      kDistTest.f[DIR_MPM] = &kTestRE[DIR_MPM * 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[DIR_P00])[k1e   ];
-   //   //f1_E    = (D.f[DIR_M00])[k1w   ];
-   //   //f1_S    = (D.f[DIR_0P0])[k1n   ];
-   //   //f1_N    = (D.f[DIR_0M0])[k1s   ];
-   //   //f1_B    = (D.f[DIR_00P])[k1t   ];
-   //   //f1_T    = (D.f[DIR_00M])[k1b   ];
-   //   //f1_SW   = (D.f[DIR_PP0])[k1ne  ];
-   //   //f1_NE   = (D.f[DIR_MM0])[k1sw  ];
-   //   //f1_NW   = (D.f[DIR_PM0])[k1se  ];
-   //   //f1_SE   = (D.f[DIR_MP0])[k1nw  ];
-   //   //f1_BW   = (D.f[DIR_P0P])[k1te  ];
-   //   //f1_TE   = (D.f[DIR_M0M])[k1bw  ];
-   //   //f1_TW   = (D.f[DIR_P0M])[k1be  ];
-   //   //f1_BE   = (D.f[DIR_M0P])[k1tw  ];
-   //   //f1_BS   = (D.f[DIR_0PP])[k1tn  ];
-   //   //f1_TN   = (D.f[DIR_0MM])[k1bs  ];
-   //   //f1_TS   = (D.f[DIR_0PM])[k1bn  ];
-   //   //f1_BN   = (D.f[DIR_0MP])[k1ts  ];
-   //   //f1_ZERO = (D.f[DIR_000])[k1zero];
-   //   //f1_BSW  = (D.f[DIR_PPP])[k1tne ];
-   //   //f1_BNE  = (D.f[DIR_MMP])[k1tsw ];
-   //   //f1_BNW  = (D.f[DIR_PMP])[k1tse ];
-   //   //f1_BSE  = (D.f[DIR_MPP])[k1tnw ];
-   //   //f1_TSW  = (D.f[DIR_PPM])[k1bne ];
-   //   //f1_TNE  = (D.f[DIR_MMM])[k1bsw ];
-   //   //f1_TNW  = (D.f[DIR_PMM])[k1bse ];
-   //   //f1_TSE  = (D.f[DIR_MPM])[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[DIR_P00])[k1e   ];
-   //   f1_W    = (D.f[DIR_M00])[k1w   ];
-   //   f1_N    = (D.f[DIR_0P0])[k1n   ];
-   //   f1_S    = (D.f[DIR_0M0])[k1s   ];
-   //   f1_T    = (D.f[DIR_00P])[k1t   ];
-   //   f1_B    = (D.f[DIR_00M])[k1b   ];
-   //   f1_NE   = (D.f[DIR_PP0])[k1ne  ];
-   //   f1_SW   = (D.f[DIR_MM0])[k1sw  ];
-   //   f1_SE   = (D.f[DIR_PM0])[k1se  ];
-   //   f1_NW   = (D.f[DIR_MP0])[k1nw  ];
-   //   f1_TE   = (D.f[DIR_P0P])[k1te  ];
-   //   f1_BW   = (D.f[DIR_M0M])[k1bw  ];
-   //   f1_BE   = (D.f[DIR_P0M])[k1be  ];
-   //   f1_TW   = (D.f[DIR_M0P])[k1tw  ];
-   //   f1_TN   = (D.f[DIR_0PP])[k1tn  ];
-   //   f1_BS   = (D.f[DIR_0MM])[k1bs  ];
-   //   f1_BN   = (D.f[DIR_0PM])[k1bn  ];
-   //   f1_TS   = (D.f[DIR_0MP])[k1ts  ];
-   //   f1_ZERO = (D.f[DIR_000])[k1zero];
-   //   f1_TNE  = (D.f[DIR_PPP])[k1tne ];
-   //   f1_TSW  = (D.f[DIR_MMP])[k1tsw ];
-   //   f1_TSE  = (D.f[DIR_PMP])[k1tse ];
-   //   f1_TNW  = (D.f[DIR_MPP])[k1tnw ];
-   //   f1_BNE  = (D.f[DIR_PPM])[k1bne ];
-   //   f1_BSW  = (D.f[DIR_MMM])[k1bsw ];
-   //   f1_BSE  = (D.f[DIR_PMM])[k1bse ];
-   //   f1_BNW  = (D.f[DIR_MPM])[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_TNE-f1_BSW)+(f1_BSE-f1_TNW)+(f1_BNE-f1_TSW)+(f1_TSE-f1_BNW)) + (((f1_NE-f1_SW)+(f1_TE-f1_BW))+((f1_SE-f1_NW)+(f1_BE-f1_TW))) + (f1_E-f1_W)) / (one + drho1);
-     //real vx2      = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_BNE-f1_TSW)+(f1_BNW-f1_TSE)) + (((f1_NE-f1_SW)+(f1_TN-f1_BS))+((f1_BN-f1_TS)+(f1_NW-f1_SE))) + (f1_N-f1_S)) / (one + drho1);
-     //real vx3      = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_TSW-f1_BNE)+(f1_TSE-f1_BNW)) + (((f1_TE-f1_BW)+(f1_TN-f1_BS))+((f1_TW-f1_BE)+(f1_TS-f1_BN))) + (f1_T-f1_B)) / (one + drho1);
-   //   //////////////////////////////////////////////////////////////////////////
-     ////real omega = om1;
-   //   real cusq  = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-   //   //////////////////////////////////////////////////////////////////////////
-     ////T�st MK
-     ////if(vx1 < zero) vx1 = zero;
-   //   //////////////////////////////////////////////////////////////////////////
-     ////becomes higher with neighbor source and lower with local source
-   //   //real fZERO = c8over27*  (rhoBC[k]-(one + rhoBC[k])*(cusq))                                                           ;
-   //   //real fE    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq));
-   //   //real fW    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq));
-   //   //real fN    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq));
-   //   //real fS    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq));
-   //   //real fT    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq));
-   //   //real fB    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq));
-   //   //real fNE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq));
-   //   //real fSW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
-   //   //real fSE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq));
-   //   //real fNW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
-   //   //real fTE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq));
-   //   //real fBW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
-   //   //real fBE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq));
-   //   //real fTW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
-   //   //real fTN   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq));
-   //   //real fBS   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
-   //   //real fBN   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq));
-   //   //real fTS   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
-   //   //real fTNE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
-   //   //real fBSW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
-   //   //real fBNE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
-   //   //real fTSW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
-   //   //real fTSE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
-   //   //real fBNW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
-   //   //real fBSE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
-   //   //real fTNW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
-   //   //////////////////////////////////////////////////////////////////////////
-     //// based on VirtualFluids (kucher + fard)
-   //   real fZERO = c8over27  * rhoBC[k] * (one                                                                      - cusq);
-   //   real fE    = c2over27  * rhoBC[k] * (one + three * ( vx1        ) + c9over2 * ( vx1        ) * ( vx1        ) - cusq);
-   //   real fW    = c2over27  * rhoBC[k] * (one + three * (-vx1        ) + c9over2 * (-vx1        ) * (-vx1        ) - cusq);
-   //   real fN    = c2over27  * rhoBC[k] * (one + three * (     vx2    ) + c9over2 * (     vx2    ) * (     vx2    ) - cusq);
-   //   real fS    = c2over27  * rhoBC[k] * (one + three * (    -vx2    ) + c9over2 * (    -vx2    ) * (    -vx2    ) - cusq);
-   //   real fT    = c2over27  * rhoBC[k] * (one + three * (         vx3) + c9over2 * (         vx3) * (         vx3) - cusq);
-   //   real fB    = c2over27  * rhoBC[k] * (one + three * (        -vx3) + c9over2 * (        -vx3) * (        -vx3) - cusq);
-   //   real fNE   = c1over54  * rhoBC[k] * (one + three * ( vx1+vx2    ) + c9over2 * ( vx1+vx2    ) * ( vx1+vx2    ) - cusq);
-   //   real fSW   = c1over54  * rhoBC[k] * (one + three * (-vx1-vx2    ) + c9over2 * (-vx1-vx2    ) * (-vx1-vx2    ) - cusq);
-   //   real fSE   = c1over54  * rhoBC[k] * (one + three * ( vx1-vx2    ) + c9over2 * ( vx1-vx2    ) * ( vx1-vx2    ) - cusq);
-   //   real fNW   = c1over54  * rhoBC[k] * (one + three * (-vx1+vx2    ) + c9over2 * (-vx1+vx2    ) * (-vx1+vx2    ) - cusq);
-   //   real fTE   = c1over54  * rhoBC[k] * (one + three * ( vx1    +vx3) + c9over2 * ( vx1    +vx3) * ( vx1    +vx3) - cusq);
-   //   real fBW   = c1over54  * rhoBC[k] * (one + three * (-vx1    -vx3) + c9over2 * (-vx1    -vx3) * (-vx1    -vx3) - cusq);
-   //   real fBE   = c1over54  * rhoBC[k] * (one + three * ( vx1    -vx3) + c9over2 * ( vx1    -vx3) * ( vx1    -vx3) - cusq);
-   //   real fTW   = c1over54  * rhoBC[k] * (one + three * (-vx1    +vx3) + c9over2 * (-vx1    +vx3) * (-vx1    +vx3) - cusq);
-   //   real fTN   = c1over54  * rhoBC[k] * (one + three * (     vx2+vx3) + c9over2 * (     vx2+vx3) * (     vx2+vx3) - cusq);
-   //   real fBS   = c1over54  * rhoBC[k] * (one + three * (    -vx2-vx3) + c9over2 * (    -vx2-vx3) * (    -vx2-vx3) - cusq);
-   //   real fBN   = c1over54  * rhoBC[k] * (one + three * (     vx2-vx3) + c9over2 * (     vx2-vx3) * (     vx2-vx3) - cusq);
-   //   real fTS   = c1over54  * rhoBC[k] * (one + three * (    -vx2+vx3) + c9over2 * (    -vx2+vx3) * (    -vx2+vx3) - cusq);
-   //   real fTNE  = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq);
-   //   real fBSW  = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq);
-   //   real fBNE  = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq);
-   //   real fTSW  = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq);
-   //   real fTSE  = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq);
-   //   real fBNW  = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq);
-   //   real fBSE  = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq);
-   //   real fTNW  = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq);
-   ////   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-     //////test
-   ////   real fZERO = c8over27  * ((drho1 + rhoBC[k]) / two) * (one                                                                      - cusq);
-   ////   real fE    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1        ) + c9over2 * ( vx1        ) * ( vx1        ) - cusq);
-   ////   real fW    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1        ) + c9over2 * (-vx1        ) * (-vx1        ) - cusq);
-   ////   real fN    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (     vx2    ) + c9over2 * (     vx2    ) * (     vx2    ) - cusq);
-   ////   real fS    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (    -vx2    ) + c9over2 * (    -vx2    ) * (    -vx2    ) - cusq);
-   ////   real fT    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (         vx3) + c9over2 * (         vx3) * (         vx3) - cusq);
-   ////   real fB    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (        -vx3) + c9over2 * (        -vx3) * (        -vx3) - cusq);
-   ////   real fNE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2    ) + c9over2 * ( vx1+vx2    ) * ( vx1+vx2    ) - cusq);
-   ////   real fSW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2    ) + c9over2 * (-vx1-vx2    ) * (-vx1-vx2    ) - cusq);
-   ////   real fSE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2    ) + c9over2 * ( vx1-vx2    ) * ( vx1-vx2    ) - cusq);
-   ////   real fNW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2    ) + c9over2 * (-vx1+vx2    ) * (-vx1+vx2    ) - cusq);
-   ////   real fTE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1    +vx3) + c9over2 * ( vx1    +vx3) * ( vx1    +vx3) - cusq);
-   ////   real fBW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1    -vx3) + c9over2 * (-vx1    -vx3) * (-vx1    -vx3) - cusq);
-   ////   real fBE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1    -vx3) + c9over2 * ( vx1    -vx3) * ( vx1    -vx3) - cusq);
-   ////   real fTW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1    +vx3) + c9over2 * (-vx1    +vx3) * (-vx1    +vx3) - cusq);
-   ////   real fTN   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (     vx2+vx3) + c9over2 * (     vx2+vx3) * (     vx2+vx3) - cusq);
-   ////   real fBS   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (    -vx2-vx3) + c9over2 * (    -vx2-vx3) * (    -vx2-vx3) - cusq);
-   ////   real fBN   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (     vx2-vx3) + c9over2 * (     vx2-vx3) * (     vx2-vx3) - cusq);
-   ////   real fTS   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (    -vx2+vx3) + c9over2 * (    -vx2+vx3) * (    -vx2+vx3) - cusq);
-   ////   real fTNE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq);
-   ////   real fBSW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq);
-   ////   real fBNE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq);
-   ////   real fTSW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq);
-   ////   real fTSE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq);
-   ////   real fBNW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq);
-   ////   real fBSE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq);
-   ////   real fTNW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq);
-
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            // based on BGK Plus Comp
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //double mfabb = (D.f[DIR_P00])[k1e   ];
-         //double mfcbb = (D.f[DIR_M00])[k1w   ];
-         //double mfbab = (D.f[DIR_0P0])[k1n   ];
-         //double mfbcb = (D.f[DIR_0M0])[k1s   ];
-         //double mfbba = (D.f[DIR_00P])[k1t   ];
-         //double mfbbc = (D.f[DIR_00M])[k1b   ];
-         //double mfaab = (D.f[DIR_PP0])[k1ne  ];
-         //double mfccb = (D.f[DIR_MM0])[k1sw  ];
-         //double mfacb = (D.f[DIR_PM0])[k1se  ];
-         //double mfcab = (D.f[DIR_MP0])[k1nw  ];
-         //double mfaba = (D.f[DIR_P0P])[k1te  ];
-         //double mfcbc = (D.f[DIR_M0M])[k1bw  ];
-         //double mfabc = (D.f[DIR_P0M])[k1be  ];
-         //double mfcba = (D.f[DIR_M0P])[k1tw  ];
-         //double mfbaa = (D.f[DIR_0PP])[k1tn  ];
-         //double mfbcc = (D.f[DIR_0MM])[k1bs  ];
-         //double mfbac = (D.f[DIR_0PM])[k1bn  ];
-         //double mfbca = (D.f[DIR_0MP])[k1ts  ];
-         //double mfbbb = (D.f[DIR_000])[k1zero];
-         //double mfaaa = (D.f[DIR_PPP])[k1tne ];
-         //double mfcca = (D.f[DIR_MMP])[k1tsw ];
-         //double mfaca = (D.f[DIR_PMP])[k1tse ];
-         //double mfcaa = (D.f[DIR_MPP])[k1tnw ];
-         //double mfaac = (D.f[DIR_PPM])[k1bne ];
-         //double mfccc = (D.f[DIR_MMM])[k1bsw ];
-         //double mfacc = (D.f[DIR_PMM])[k1bse ];
-         //double mfcac = (D.f[DIR_MPM])[k1bnw ];
-         real mfabb = (D.f[DIR_P00])[k1e   ];
-         real mfcbb = (D.f[DIR_M00])[k1w   ];
-         real mfbab = (D.f[DIR_0P0])[k1n   ];
-         real mfbcb = (D.f[DIR_0M0])[k1s   ];
-         real mfbba = (D.f[DIR_00P])[k1t   ];
-         real mfbbc = (D.f[DIR_00M])[k1b   ];
-         real mfaab = (D.f[DIR_PP0])[k1ne  ];
-         real mfccb = (D.f[DIR_MM0])[k1sw  ];
-         real mfacb = (D.f[DIR_PM0])[k1se  ];
-         real mfcab = (D.f[DIR_MP0])[k1nw  ];
-         real mfaba = (D.f[DIR_P0P])[k1te  ];
-         real mfcbc = (D.f[DIR_M0M])[k1bw  ];
-         real mfabc = (D.f[DIR_P0M])[k1be  ];
-         real mfcba = (D.f[DIR_M0P])[k1tw  ];
-         real mfbaa = (D.f[DIR_0PP])[k1tn  ];
-         real mfbcc = (D.f[DIR_0MM])[k1bs  ];
-         real mfbac = (D.f[DIR_0PM])[k1bn  ];
-         real mfbca = (D.f[DIR_0MP])[k1ts  ];
-         real mfbbb = (D.f[DIR_000])[k1zero];
-         real mfaaa = (D.f[DIR_PPP])[k1tne ];
-         real mfcca = (D.f[DIR_MMP])[k1tsw ];
-         real mfaca = (D.f[DIR_PMP])[k1tse ];
-         real mfcaa = (D.f[DIR_MPP])[k1tnw ];
-         real mfaac = (D.f[DIR_PPM])[k1bne ];
-         real mfccc = (D.f[DIR_MMM])[k1bsw ];
-         real mfacc = (D.f[DIR_PMM])[k1bse ];
-         real mfcac = (D.f[DIR_MPM])[k1bnw ];
-
-         //real mfcbb = (D.f[DIR_P00])[ke   ];
-         //real mfabb = (D.f[DIR_M00])[kw   ];
-         //real mfbcb = (D.f[DIR_0P0])[kn   ];
-         //real mfbab = (D.f[DIR_0M0])[ks   ];
-         //real mfbbc = (D.f[DIR_00P])[kt   ];
-         //real mfbba = (D.f[DIR_00M])[kb   ];
-         //real mfccb = (D.f[DIR_PP0])[kne  ];
-         //real mfaab = (D.f[DIR_MM0])[ksw  ];
-         //real mfcab = (D.f[DIR_PM0])[kse  ];
-         //real mfacb = (D.f[DIR_MP0])[knw  ];
-         //real mfcbc = (D.f[DIR_P0P])[kte  ];
-         //real mfaba = (D.f[DIR_M0M])[kbw  ];
-         //real mfcba = (D.f[DIR_P0M])[kbe  ];
-         //real mfabc = (D.f[DIR_M0P])[ktw  ];
-         //real mfbcc = (D.f[DIR_0PP])[ktn  ];
-         //real mfbaa = (D.f[DIR_0MM])[kbs  ];
-         //real mfbca = (D.f[DIR_0PM])[kbn  ];
-         //real mfbac = (D.f[DIR_0MP])[kts  ];
-         //real mfbbb = (D.f[DIR_000])[kzero];
-         //real mfccc = (D.f[DIR_PPP])[ktne ];
-         //real mfaac = (D.f[DIR_MMP])[ktsw ];
-         //real mfcac = (D.f[DIR_PMP])[ktse ];
-         //real mfacc = (D.f[DIR_MPP])[ktnw ];
-         //real mfcca = (D.f[DIR_PPM])[kbne ];
-         //real mfaaa = (D.f[DIR_MMM])[kbsw ];
-         //real mfcaa = (D.f[DIR_PMM])[kbse ];
-         //real mfaca = (D.f[DIR_MPM])[kbnw ];
-         ////////////////////////////////////////////////////////////////////////////////////
-         //real rho   = (((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) +
-         //				(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
-         //				((mfabb+mfcbb) + (mfbab+mfbcb)) + (mfbba+mfbbc)) + mfbbb) + one;//!!!!Achtung + one
-         ////////////////////////////////////////////////////////////////////////////////////
-         real rho = rhoBC[k];
-         ////////////////////////////////////////////////////////////////////////////////////
-         real OoRho = c1o1 / (rho * 1.5f);
-         ////////////////////////////////////////////////////////////////////////////////////
-         real vvx    = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) +
-                       (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
-                         (mfcbb-mfabb)) * OoRho;
-         real vvy    =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) +
-                         (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
-                           (mfbcb-mfbab)) * OoRho;
-         real vvz    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) +
-                         (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
-                           (mfbbc-mfbba)) * OoRho;
-         /////////////////////////
-         //Test Values
-         //double vvx    = 0.016;
-         //double vvy    = zero;
-         //double vvz    = zero;
-         ////////////////////////////////////////////////////////////////////////////////////////
-         ////round off error test
-         //if(vvx!=zero){
-         //	(kDistTest.f[DIR_P00])[k] = mfabb;
-         //	(kDistTest.f[DIR_M00])[k] = mfcbb;
-         //	(kDistTest.f[DIR_0P0])[k] = mfbab;
-         //	(kDistTest.f[DIR_0M0])[k] = mfbcb;
-         //	(kDistTest.f[DIR_00P])[k] = mfbba;
-         //	(kDistTest.f[DIR_00M])[k] = mfbbc;
-         //	(kDistTest.f[DIR_PP0])[k] = mfaab;
-         //	(kDistTest.f[DIR_MM0])[k] = mfccb;
-         //	(kDistTest.f[DIR_PM0])[k] = mfacb;
-         //	(kDistTest.f[DIR_MP0])[k] = mfcab;
-         //	(kDistTest.f[DIR_P0P])[k] = mfaba;
-         //	(kDistTest.f[DIR_M0M])[k] = mfcbc;
-         //	(kDistTest.f[DIR_P0M])[k] = mfabc;
-         //	(kDistTest.f[DIR_M0P])[k] = mfcba;
-         //	(kDistTest.f[DIR_0PP])[k] = mfbaa;
-         //	(kDistTest.f[DIR_0MM])[k] = mfbcc;
-         //	(kDistTest.f[DIR_0PM])[k] = mfbac;
-         //	(kDistTest.f[DIR_0MP])[k] = mfbca;
-         //	(kDistTest.f[DIR_000])[k] = KQK;
-         //	(kDistTest.f[DIR_PPP])[k] = mfaaa;
-         //	(kDistTest.f[DIR_MMP])[k] = mfcca;
-         //	(kDistTest.f[DIR_PMP])[k] = mfaca;
-         //	(kDistTest.f[DIR_MPP])[k] = mfcaa;
-         //	(kDistTest.f[DIR_PPM])[k] = mfaac;
-         //	(kDistTest.f[DIR_MMM])[k] = mfccc;
-         //	(kDistTest.f[DIR_PMM])[k] = mfacc;
-         //	(kDistTest.f[DIR_MPM])[k] = mfcac;
-         //}else{
-         //	(kDistTest.f[DIR_P00])[k] = zero;
-         //	(kDistTest.f[DIR_M00])[k] = zero;
-         //	(kDistTest.f[DIR_0P0])[k] = zero;
-         //	(kDistTest.f[DIR_0M0])[k] = zero;
-         //	(kDistTest.f[DIR_00P])[k] = zero;
-         //	(kDistTest.f[DIR_00M])[k] = zero;
-         //	(kDistTest.f[DIR_PP0])[k] = zero;
-         //	(kDistTest.f[DIR_MM0])[k] = zero;
-         //	(kDistTest.f[DIR_PM0])[k] = zero;
-         //	(kDistTest.f[DIR_MP0])[k] = zero;
-         //	(kDistTest.f[DIR_P0P])[k] = zero;
-         //	(kDistTest.f[DIR_M0M])[k] = zero;
-         //	(kDistTest.f[DIR_P0M])[k] = zero;
-         //	(kDistTest.f[DIR_M0P])[k] = zero;
-         //	(kDistTest.f[DIR_0PP])[k] = zero;
-         //	(kDistTest.f[DIR_0MM])[k] = zero;
-         //	(kDistTest.f[DIR_0PM])[k] = zero;
-         //	(kDistTest.f[DIR_0MP])[k] = zero;
-         //	(kDistTest.f[DIR_000])[k] = zero;
-         //	(kDistTest.f[DIR_PPP])[k] = zero;
-         //	(kDistTest.f[DIR_MMP])[k] = zero;
-         //	(kDistTest.f[DIR_PMP])[k] = zero;
-         //	(kDistTest.f[DIR_MPP])[k] = zero;
-         //	(kDistTest.f[DIR_PPM])[k] = zero;
-         //	(kDistTest.f[DIR_MMM])[k] = zero;
-         //	(kDistTest.f[DIR_PMM])[k] = zero;
-         //	(kDistTest.f[DIR_MPM])[k] = zero;
-         //}
-
-         //////////////////////////////////////////////////////////////////////////////////////
-         //// first bad fix for negative x velocity
-         ////if(vvx > zero) vvx = zero;
-         //////////////////////////////////////////////////////////////////////////////////////
-         ////// second bad fix for negative x velocity
-         ////if(vvx > zero){
-         ////	vvx = -vvx;
-         ////	vvy = -vvy;
-         ////	vvz = -vvz;
-         ////}
-         ////////////////////////////////////////////////////////////////////////////////////
-         double vx2    = vvx * vvx;
-         double vy2    = vvy * vvy;
-         double vz2    = vvz * vvz;
-         //////////////////////////////////////////////////////////////////////////////////
-         //original
-            real XXb    = -c2o3 + vx2;
-            real XXc    = -c1o2 * (XXb + c1o1 + vvx);
-            real XXa    = XXc + vvx;
-            real YYb    = -c2o3 + vy2;
-            real YYc    = -c1o2 * (YYb + c1o1 + vvy);
-            real YYa    = YYc + vvy;
-            real ZZb    = -c2o3 + vz2;
-            real ZZc    = -c1o2 * (ZZb + c1o1 + vvz);
-            real ZZa    = ZZc + vvz;
-         //////////////////////////////////////////////////////////////////////////////////
-         //unkonditioniert
-            mfcbb = -(rhoBC[k] + c1o1) * XXc * YYb * ZZb - c2o27;
-         mfabb = -(rhoBC[k] + c1o1) * XXa * YYb * ZZb - c2o27;
-         mfbcb = -(rhoBC[k] + c1o1) * XXb * YYc * ZZb - c2o27;
-         mfbab = -(rhoBC[k] + c1o1) * XXb * YYa * ZZb - c2o27;
-         mfbbc = -(rhoBC[k] + c1o1) * XXb * YYb * ZZc - c2o27;
-         mfbba = -(rhoBC[k] + c1o1) * XXb * YYb * ZZa - c2o27;
-         mfccb = -(rhoBC[k] + c1o1) * XXc * YYc * ZZb - c1o54;
-         mfaab = -(rhoBC[k] + c1o1) * XXa * YYa * ZZb - c1o54;
-         mfcab = -(rhoBC[k] + c1o1) * XXc * YYa * ZZb - c1o54;
-         mfacb = -(rhoBC[k] + c1o1) * XXa * YYc * ZZb - c1o54;
-         mfcbc = -(rhoBC[k] + c1o1) * XXc * YYb * ZZc - c1o54;
-         mfaba = -(rhoBC[k] + c1o1) * XXa * YYb * ZZa - c1o54;
-         mfcba = -(rhoBC[k] + c1o1) * XXc * YYb * ZZa - c1o54;
-         mfabc = -(rhoBC[k] + c1o1) * XXa * YYb * ZZc - c1o54;
-         mfbcc = -(rhoBC[k] + c1o1) * XXb * YYc * ZZc - c1o54;
-         mfbaa = -(rhoBC[k] + c1o1) * XXb * YYa * ZZa - c1o54;
-         mfbca = -(rhoBC[k] + c1o1) * XXb * YYc * ZZa - c1o54;
-         mfbac = -(rhoBC[k] + c1o1) * XXb * YYa * ZZc - c1o54;
-         mfbbb = -(rhoBC[k] + c1o1) * XXb * YYb * ZZb - c8o27;
-         mfccc = -(rhoBC[k] + c1o1) * XXc * YYc * ZZc - c1o216;
-         mfaac = -(rhoBC[k] + c1o1) * XXa * YYa * ZZc - c1o216;
-         mfcac = -(rhoBC[k] + c1o1) * XXc * YYa * ZZc - c1o216;
-         mfacc = -(rhoBC[k] + c1o1) * XXa * YYc * ZZc - c1o216;
-         mfcca = -(rhoBC[k] + c1o1) * XXc * YYc * ZZa - c1o216;
-         mfaaa = -(rhoBC[k] + c1o1) * XXa * YYa * ZZa - c1o216;
-         mfcaa = -(rhoBC[k] + c1o1) * XXc * YYa * ZZa - c1o216;
-         mfaca = -(rhoBC[k] + c1o1) * XXa * YYc * ZZa - c1o216;
-         //////////////////////////////////////////////////////////
-         ////konditioniert
-         //double OneOver216RhoPlusOne = c1over216*(rhoBC[k]+one);
-         //double OnoOver216Rho        = c1over216*rhoBC[k];
-         //mfcbb = OnoOver216Rho*sixteen + OneOver216RhoPlusOne*twelve*(-(two*vy2) - two*vz2 + three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-two + three*vy2)*(-two + three*vz2));
-         //mfabb = OnoOver216Rho*sixteen - OneOver216RhoPlusOne*twelve*(two*vy2 + two*vz2 - three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-four + six*vy2 + six*vz2 - nine*vy2*vz2));
-         //mfbcb = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(one + three*vvy + three*vy2)*(-two + three*vz2));
-         //mfbab = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvy*(-two + three*vx2)*(-two + three*vz2) - one*vx2*(one + three*vy2)*(-two + three*vz2) + two*(-(two*vy2) + vz2 + three*vy2*vz2)));
-         //mfbbc = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(-two + three*vy2)*(one + three*vvz + three*vz2));
-         //mfbba = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz*(-two + three*vx2)*(-two + three*vy2) - one*vx2*(-two + three*vy2)*(one + three*vz2) + two*(vy2 - two*vz2 + three*vy2*vz2)));
-         //mfccb = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2))));
-         //mfaab = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2))));
-         //mfcab = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2)));
-         //mfacb = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2)));
-         //mfcbc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2))));
-         //mfaba = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2))));
-         //mfcba = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2)));
-         //mfabc = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2)));
-         //mfbcc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2))));
-         //mfbaa = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2))));
-         //mfbca = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2)));
-         //mfbac = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2)));
-         //mfbbb = eight*(eight*OnoOver216Rho + OneOver216RhoPlusOne*three*(four*vy2 + four*vz2 - six*vy2*vz2 + vx2*(-two + three*vy2)*(-two + three*vz2)));
-         //mfccc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2));
-         //mfaac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2));
-         //mfcac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2));
-         //mfacc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2));
-         //mfcca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2));
-         //mfaaa = OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz - one*vx2 + three*vvz*vx2 - one*vy2 + three*vvz*vy2 - three*vx2*vy2 + nine*vvz*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2));
-         //mfcaa = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2));
-         //mfaca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2));
-
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //if (isEvenTimestep==true)
-      //{
-      //   D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-      //   D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-      //   D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-      //   D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-      //   D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-      //   D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-      //   D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-      //   D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-      //   D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-      //   D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-      //   D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-      //   D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-      //   D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-      //   D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-      //   D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-      //   D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-      //   D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-      //   D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-      //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-      //   D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-      //   D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-      //   D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-      //   D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-      //   D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-      //   D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-      //   D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-      //   D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
-      //}
-      //else
-      //{
-      //   D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-      //   D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-      //   D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-      //   D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-      //   D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-      //   D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-      //   D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-      //   D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-      //   D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-      //   D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-      //   D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-      //   D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-      //   D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-      //   D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-      //   D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-      //   D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-      //   D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-      //   D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-      //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-      //   D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-      //   D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-      //   D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-      //   D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-      //   D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-      //   D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-      //   D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-      //   D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
-      //}
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //__syncthreads();
-
-         (D.f[DIR_P00])[ke   ] = mfabb;//mfcbb;
-         (D.f[DIR_M00])[kw   ] = mfcbb;//mfabb;
-         (D.f[DIR_0P0])[kn   ] = mfbab;//mfbcb;
-         (D.f[DIR_0M0])[ks   ] = mfbcb;//mfbab;
-         (D.f[DIR_00P])[kt   ] = mfbba;//mfbbc;
-         (D.f[DIR_00M])[kb   ] = mfbbc;//mfbba;
-         (D.f[DIR_PP0])[kne  ] = mfaab;//mfccb;
-         (D.f[DIR_MM0])[ksw  ] = mfccb;//mfaab;
-         (D.f[DIR_PM0])[kse  ] = mfacb;//mfcab;
-         (D.f[DIR_MP0])[knw  ] = mfcab;//mfacb;
-         (D.f[DIR_P0P])[kte  ] = mfaba;//mfcbc;
-         (D.f[DIR_M0M])[kbw  ] = mfcbc;//mfaba;
-         (D.f[DIR_P0M])[kbe  ] = mfabc;//mfcba;
-         (D.f[DIR_M0P])[ktw  ] = mfcba;//mfabc;
-         (D.f[DIR_0PP])[ktn  ] = mfbaa;//mfbcc;
-         (D.f[DIR_0MM])[kbs  ] = mfbcc;//mfbaa;
-         (D.f[DIR_0PM])[kbn  ] = mfbac;//mfbca;
-         (D.f[DIR_0MP])[kts  ] = mfbca;//mfbac;
-         (D.f[DIR_000])[kzero] = mfbbb;//mfbbb;
-         (D.f[DIR_PPP])[ktne ] = mfaaa;//mfccc;
-         (D.f[DIR_MMP])[ktsw ] = mfcca;//mfaac;
-         (D.f[DIR_PMP])[ktse ] = mfaca;//mfcac;
-         (D.f[DIR_MPP])[ktnw ] = mfcaa;//mfacc;
-         (D.f[DIR_PPM])[kbne ] = mfaac;//mfcca;
-         (D.f[DIR_MMM])[kbsw ] = mfccc;//mfaaa;
-         (D.f[DIR_PMM])[kbse ] = mfacc;//mfcaa;
-         (D.f[DIR_MPM])[kbnw ] = mfcac;//mfaca;
-         //(D.f[DIR_P00])[ke   ] = mfcbb;
-         //(D.f[DIR_M00])[kw   ] = mfabb;
-         //(D.f[DIR_0P0])[kn   ] = mfbcb;
-         //(D.f[DIR_0M0])[ks   ] = mfbab;
-         //(D.f[DIR_00P])[kt   ] = mfbbc;
-         //(D.f[DIR_00M])[kb   ] = mfbba;
-         //(D.f[DIR_PP0])[kne  ] = mfccb;
-         //(D.f[DIR_MM0])[ksw  ] = mfaab;
-         //(D.f[DIR_PM0])[kse  ] = mfcab;
-         //(D.f[DIR_MP0])[knw  ] = mfacb;
-         //(D.f[DIR_P0P])[kte  ] = mfcbc;
-         //(D.f[DIR_M0M])[kbw  ] = mfaba;
-         //(D.f[DIR_P0M])[kbe  ] = mfcba;
-         //(D.f[DIR_M0P])[ktw  ] = mfabc;
-         //(D.f[DIR_0PP])[ktn  ] = mfbcc;
-         //(D.f[DIR_0MM])[kbs  ] = mfbaa;
-         //(D.f[DIR_0PM])[kbn  ] = mfbca;
-         //(D.f[DIR_0MP])[kts  ] = mfbac;
-         //(D.f[DIR_000])[kzero] = mfbbb;
-         //(D.f[DIR_PPP])[ktne ] = mfccc;
-         //(D.f[DIR_MMP])[ktsw ] = mfaac;
-         //(D.f[DIR_PMP])[ktse ] = mfcac;
-         //(D.f[DIR_MPP])[ktnw ] = mfacc;
-         //(D.f[DIR_PPM])[kbne ] = mfcca;
-         //(D.f[DIR_MMM])[kbsw ] = mfaaa;
-         //(D.f[DIR_PMM])[kbse ] = mfcaa;
-         //(D.f[DIR_MPM])[kbnw ] = mfaca;
-
-      //(D.f[DIR_P00])[ke   ] = fE ;  //f1_E ;   //fW;    //fE ;
-      //(D.f[DIR_M00])[kw   ] = fW ;  //f1_W ;   //fE;    //fW ;
-      //(D.f[DIR_0P0])[kn   ] = fN ;  //f1_N ;   //fS;    //fN ;
-      //(D.f[DIR_0M0])[ks   ] = fS ;  //f1_S ;   //fN;    //fS ;
-      //(D.f[DIR_00P])[kt   ] = fT ;  //f1_T ;   //fB;    //fT ;
-      //(D.f[DIR_00M])[kb   ] = fB ;  //f1_B ;   //fT;    //fB ;
-      //(D.f[DIR_PP0])[kne  ] = fNE;  //f1_NE;   //fSW;   //fNE;
-      //(D.f[DIR_MM0])[ksw  ] = fSW;  //f1_SW;   //fNE;   //fSW;
-      //(D.f[DIR_PM0])[kse  ] = fSE;  //f1_SE;   //fNW;   //fSE;
-      //(D.f[DIR_MP0])[knw  ] = fNW;  //f1_NW;   //fSE;   //fNW;
-      //(D.f[DIR_P0P])[kte  ] = fTE;  //f1_TE;   //fBW;   //fTE;
-      //(D.f[DIR_M0M])[kbw  ] = fBW;  //f1_BW;   //fTE;   //fBW;
-      //(D.f[DIR_P0M])[kbe  ] = fBE;  //f1_BE;   //fTW;   //fBE;
-      //(D.f[DIR_M0P])[ktw  ] = fTW;  //f1_TW;   //fBE;   //fTW;
-      //(D.f[DIR_0PP])[ktn  ] = fTN;  //f1_TN;   //fBS;   //fTN;
-      //(D.f[DIR_0MM])[kbs  ] = fBS;  //f1_BS;   //fTN;   //fBS;
-      //(D.f[DIR_0PM])[kbn  ] = fBN;  //f1_BN;   //fTS;   //fBN;
-      //(D.f[DIR_0MP])[kts  ] = fTS;  //f1_TS;   //fBN;   //fTS;
-      //(D.f[DIR_000])[kzero] = fZERO;//f1_ZERO; //fZERO; //fZERO;
-      //(D.f[DIR_PPP])[ktne ] = fTNE; //f1_TNE;  //fBSW;  //fTNE;
-      //(D.f[DIR_MMM])[kbsw ] = fBSW; //f1_BSW;  //fTNE;  //fBSW;
-      //(D.f[DIR_PPM])[kbne ] = fBNE; //f1_BNE;  //fTSW;  //fBNE;
-      //(D.f[DIR_MMP])[ktsw ] = fTSW; //f1_TSW;  //fBNE;  //fTSW;
-      //(D.f[DIR_PMP])[ktse ] = fTSE; //f1_TSE;  //fBNW;  //fTSE;
-      //(D.f[DIR_MPM])[kbnw ] = fBNW; //f1_BNW;  //fTSE;  //fBNW;
-      //(D.f[DIR_PMM])[kbse ] = fBSE; //f1_BSE;  //fTNW;  //fBSE;
-      //(D.f[DIR_MPP])[ktnw ] = fTNW; //f1_TNW;  //fBSE;  //fTNW;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceZero27(
-    real* DD,
-    int* k_Q,
-    unsigned int numberOfBCnodes,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //__syncthreads();
-     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      (D.f[DIR_P00])[ke   ] =c0o1;
-      (D.f[DIR_M00])[kw   ] =c0o1;
-      (D.f[DIR_0P0])[kn   ] =c0o1;
-      (D.f[DIR_0M0])[ks   ] =c0o1;
-      (D.f[DIR_00P])[kt   ] =c0o1;
-      (D.f[DIR_00M])[kb   ] =c0o1;
-      (D.f[DIR_PP0])[kne  ] =c0o1;
-      (D.f[DIR_MM0])[ksw  ] =c0o1;
-      (D.f[DIR_PM0])[kse  ] =c0o1;
-      (D.f[DIR_MP0])[knw  ] =c0o1;
-      (D.f[DIR_P0P])[kte  ] =c0o1;
-      (D.f[DIR_M0M])[kbw  ] =c0o1;
-      (D.f[DIR_P0M])[kbe  ] =c0o1;
-      (D.f[DIR_M0P])[ktw  ] =c0o1;
-      (D.f[DIR_0PP])[ktn  ] =c0o1;
-      (D.f[DIR_0MM])[kbs  ] =c0o1;
-      (D.f[DIR_0PM])[kbn  ] =c0o1;
-      (D.f[DIR_0MP])[kts  ] =c0o1;
-      (D.f[DIR_000])[kzero] =c0o1;
-      (D.f[DIR_PPP])[ktne ] =c0o1;
-      (D.f[DIR_MMP])[ktsw ] =c0o1;
-      (D.f[DIR_PMP])[ktse ] =c0o1;
-      (D.f[DIR_MPP])[ktnw ] =c0o1;
-      (D.f[DIR_PPM])[kbne ] =c0o1;
-      (D.f[DIR_MMM])[kbsw ] =c0o1;
-      (D.f[DIR_PMM])[kbse ] =c0o1;
-      (D.f[DIR_MPM])[kbnw ] =c0o1;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QPressDeviceFake27(
-    real* rhoBC,
-    real* DD,
-    int* k_Q,
-    int* k_N,
-    int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int K1QK  = k_N[k];
-      unsigned int k1zero= K1QK;
-      unsigned int k1e   = K1QK;
-      unsigned int k1w   = neighborX[K1QK];
-      unsigned int k1n   = K1QK;
-      unsigned int k1s   = neighborY[K1QK];
-      unsigned int k1t   = K1QK;
-      unsigned int k1b   = neighborZ[K1QK];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = K1QK;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = K1QK;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = K1QK;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = K1QK;
-      unsigned int k1bsw = neighborZ[k1sw];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[k1e   ];
-      f1_E    = (D.f[DIR_M00])[k1w   ];
-      f1_S    = (D.f[DIR_0P0])[k1n   ];
-      f1_N    = (D.f[DIR_0M0])[k1s   ];
-      f1_B    = (D.f[DIR_00P])[k1t   ];
-      f1_T    = (D.f[DIR_00M])[k1b   ];
-      f1_SW   = (D.f[DIR_PP0])[k1ne  ];
-      f1_NE   = (D.f[DIR_MM0])[k1sw  ];
-      f1_NW   = (D.f[DIR_PM0])[k1se  ];
-      f1_SE   = (D.f[DIR_MP0])[k1nw  ];
-      f1_BW   = (D.f[DIR_P0P])[k1te  ];
-      f1_TE   = (D.f[DIR_M0M])[k1bw  ];
-      f1_TW   = (D.f[DIR_P0M])[k1be  ];
-      f1_BE   = (D.f[DIR_M0P])[k1tw  ];
-      f1_BS   = (D.f[DIR_0PP])[k1tn  ];
-      f1_TN   = (D.f[DIR_0MM])[k1bs  ];
-      f1_TS   = (D.f[DIR_0PM])[k1bn  ];
-      f1_BN   = (D.f[DIR_0MP])[k1ts  ];
-      f1_ZERO = (D.f[DIR_000])[k1zero];
-      f1_BSW  = (D.f[DIR_PPP])[k1tne ];
-      f1_BNE  = (D.f[DIR_MMP])[k1tsw ];
-      f1_BNW  = (D.f[DIR_PMP])[k1tse ];
-      f1_BSE  = (D.f[DIR_MPP])[k1tnw ];
-      f1_TSW  = (D.f[DIR_PPM])[k1bne ];
-      f1_TNE  = (D.f[DIR_MMM])[k1bsw ];
-      f1_TNW  = (D.f[DIR_PMM])[k1bse ];
-      f1_TSE  = (D.f[DIR_MPM])[k1bnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      real vx1, vx2, vx3;
-      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);
-
-
-      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);
-
-      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-      //////////////////////////////////////////////////////////////////////////
-      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;
-
-     //drho1 = (drho1 + rhoBC[k])/2.f;
-     drho1 = drho1 - rhoBC[k];
-
-      __syncthreads();
-
-      (D.f[DIR_P00])[ke   ] = c2o27* (rhoBC[k]+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      (D.f[DIR_M00])[kw   ] = c2o27* (rhoBC[k]+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      (D.f[DIR_0P0])[kn   ] = c2o27* (rhoBC[k]+c3o1*(    -vx2    )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      (D.f[DIR_0M0])[ks   ] = c2o27* (rhoBC[k]+c3o1*(     vx2    )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      (D.f[DIR_00P])[kt   ] = c2o27* (rhoBC[k]+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      (D.f[DIR_00M])[kb   ] = c2o27* (rhoBC[k]+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      (D.f[DIR_PP0])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MM0])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PM0])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MP0])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_P0P])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_M0M])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_P0M])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_M0P])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0PP])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0MM])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0PM])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_0MP])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_000])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PPP])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MMP])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PMP])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MPP])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PPM])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MMM])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_PMM])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[DIR_MPM])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////
-__global__ void QPressDevice27_IntBB(
-    real* rho,
-    real* DD,
-    int* k_Q,
-    real* QQ,
-    unsigned int numberOfBCnodes,
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   }
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index
-   const unsigned  y = blockIdx.x;   // Globaler y-Index
-   const unsigned  z = blockIdx.y;   // Globaler z-Index
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k < numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      //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)
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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);
-
-
-      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      real rhoDiff = drho - rho[k];
-      real VeloX = vx1;
-      real VeloY = vx2;
-      real VeloZ = vx3;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho+c9o2*( vx1        )*( vx1        )-cu_sq);
-         (D.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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/SchlafferBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu
deleted file mode 100644
index 70e938db5df2bae442034ce0303081e8b175e5f6..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu
+++ /dev/null
@@ -1,590 +0,0 @@
-/* Device code */
-#include "LBM/LB.h"
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void PressSchlaff27(real* rhoBC,
-                                          real* DD,
-                                          real* vx0,
-                                          real* vy0,
-                                          real* vz0,
-                                          real* deltaVz0,
-                                          int* k_Q,
-                                          int* k_N,
-                                          int numberOfBCnodes,
-                                          real om1,
-                                          unsigned int* neighborX,
-                                          unsigned int* neighborY,
-                                          unsigned int* neighborZ,
-                                          unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[ke   ];
-      f1_W    = (D.f[DIR_M00])[kw   ];
-      f1_N    = (D.f[DIR_0P0])[kn   ];
-      f1_S    = (D.f[DIR_0M0])[ks   ];
-      f1_T    = (D.f[DIR_00P])[kt   ];
-      f1_B    = (D.f[DIR_00M])[kb   ];
-      f1_NE   = (D.f[DIR_PP0])[kne  ];
-      f1_SW   = (D.f[DIR_MM0])[ksw  ];
-      f1_SE   = (D.f[DIR_PM0])[kse  ];
-      f1_NW   = (D.f[DIR_MP0])[knw  ];
-      f1_TE   = (D.f[DIR_P0P])[kte  ];
-      f1_BW   = (D.f[DIR_M0M])[kbw  ];
-      f1_BE   = (D.f[DIR_P0M])[kbe  ];
-      f1_TW   = (D.f[DIR_M0P])[ktw  ];
-      f1_TN   = (D.f[DIR_0PP])[ktn  ];
-      f1_BS   = (D.f[DIR_0MM])[kbs  ];
-      f1_BN   = (D.f[DIR_0PM])[kbn  ];
-      f1_TS   = (D.f[DIR_0MP])[kts  ];
-      f1_ZERO = (D.f[DIR_000])[kzero];
-      f1_TNE  = (D.f[DIR_PPP])[ktne ];
-      f1_TSW  = (D.f[DIR_MMP])[ktsw ];
-      f1_TSE  = (D.f[DIR_PMP])[ktse ];
-      f1_TNW  = (D.f[DIR_MPP])[ktnw ];
-      f1_BNE  = (D.f[DIR_PPM])[kbne ];
-      f1_BSW  = (D.f[DIR_MMM])[kbsw ];
-      f1_BSE  = (D.f[DIR_PMM])[kbse ];
-      f1_BNW  = (D.f[DIR_MPM])[kbnw ];
-      //////////////////////////////////////////////////////////////////////////
-      real cs       = c1o1/sqrt(c3o1);
-      real csp1     = cs + c1o1;
-      real csp1Sq  = (c1o1 + cs)*(c1o1 + cs);
-      real relFac   = c21o20; // 0.9...1.0
-      //////////////////////////////////////////////////////////////////////////
-      // For adaption:
-      //     Pressure limits with rho0 = 1:
-      //      2.2e-10 ~  0.94 dB
-      //      6.2e-10 ~   9.9 dB
-      //      6.2e-9  ~  29.9 dB
-      //      2.0e-7  ~  60.1 dB   /Vel
-      //      2.0e-5  ~ 100.1 dB   /press
-      const double dPlimit  = Op0000002;
-      const double dRlimit  = dPlimit * c3o1;// three = c1oCs2;
-      const double uSlimit  = dRlimit * c1o1;// one = c1oRho0;
-      //////////////////////////////////////////////////////////////////////////
-      real VX = vx0[k];
-      real VY = vy0[k];
-      real VZ = vz0[k];
-      //////////////////////////////////////////////////////////////////////////
-
-      real temp = c2o1*(f1_TNE + f1_TSE + f1_TSW + f1_TNW) + c2o1*(f1_TE + f1_TW + f1_TN + f1_TS) + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*f1_T + f1_E + f1_W + f1_N + f1_S + f1_ZERO;
-
-      real vs_z = relFac * (VZ+cs) * ( csp1 - sqrt(csp1Sq + c2o1*VZ - c2o1*temp) );    //old =  relFac * cs * ( csp1 - sqrt(csp1Sq + two*VZ - two*temp) );
-
-      // 3. Compute density of compensated velocity:
-      real tempDeltaV = deltaVz0[k];
-      real rholoc = temp - c1o1 * (VZ + tempDeltaV + vs_z);
-
-      // 4. Compute density deviation:
-      real drho = rholoc - rhoBC[k];
-
-      // 5. Adapt Speed:
-      real dv = tempDeltaV + vs_z;
-
-      if( drho > dRlimit) {
-         VZ += dv + uSlimit;
-         tempDeltaV += uSlimit;
-      }
-      else if( drho < -dRlimit) {
-         VZ += dv - uSlimit;
-         tempDeltaV -= uSlimit;
-      }
-      else {
-         VZ += dv + drho;
-         tempDeltaV += drho;
-      }
-
-      //VZ = vz0[k] + vs_z;
-      // 6. Set unknown distributions:
-      f1_B   = f1_T   - c4o9  * VZ;
-      f1_BW  = f1_TE  - c1o9  * (VX + VZ);
-      f1_BE  = f1_TW  + c1o9  * (VX - VZ);
-      f1_BS  = f1_TN  - c1o9  * (VY + VZ);
-      f1_BN  = f1_TS  + c1o9  * (VY - VZ);
-      f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ);
-      f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ);
-      f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ);
-      f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ);
-
-      deltaVz0[k] = tempDeltaV;
-
-      (D.f[DIR_00M])[kb   ] = f1_B   ;
-      (D.f[DIR_M0M])[kbw  ] = f1_BW  ;
-      (D.f[DIR_P0M])[kbe  ] = f1_BE  ;
-      (D.f[DIR_0MM])[kbs  ] = f1_BS  ;
-      (D.f[DIR_0PM])[kbn  ] = f1_BN  ;
-      (D.f[DIR_PPM])[kbne ] = f1_BNE ;
-      (D.f[DIR_MMM])[kbsw ] = f1_BSW ;
-      (D.f[DIR_PMM])[kbse ] = f1_BSE ;
-      (D.f[DIR_MPM])[kbnw ] = f1_BNW ;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void VelSchlaff27(  int t,
-                                          real* DD,
-                                          real* vz0,
-                                          real* deltaVz0,
-                                          int* k_Q,
-                                          int* k_N,
-                                          int numberOfBCnodes,
-                                          real om1,
-                                          unsigned int* neighborX,
-                                          unsigned int* neighborY,
-                                          unsigned int* neighborZ,
-                                          unsigned long long 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
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      }
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[ke   ];
-      f1_W    = (D.f[DIR_M00])[kw   ];
-      f1_N    = (D.f[DIR_0P0])[kn   ];
-      f1_S    = (D.f[DIR_0M0])[ks   ];
-      f1_T    = (D.f[DIR_00P])[kt   ];
-      f1_B    = (D.f[DIR_00M])[kb   ];
-      f1_NE   = (D.f[DIR_PP0])[kne  ];
-      f1_SW   = (D.f[DIR_MM0])[ksw  ];
-      f1_SE   = (D.f[DIR_PM0])[kse  ];
-      f1_NW   = (D.f[DIR_MP0])[knw  ];
-      f1_TE   = (D.f[DIR_P0P])[kte  ];
-      f1_BW   = (D.f[DIR_M0M])[kbw  ];
-      f1_BE   = (D.f[DIR_P0M])[kbe  ];
-      f1_TW   = (D.f[DIR_M0P])[ktw  ];
-      f1_TN   = (D.f[DIR_0PP])[ktn  ];
-      f1_BS   = (D.f[DIR_0MM])[kbs  ];
-      f1_BN   = (D.f[DIR_0PM])[kbn  ];
-      f1_TS   = (D.f[DIR_0MP])[kts  ];
-      f1_ZERO = (D.f[DIR_000])[kzero];
-      f1_TNE  = (D.f[DIR_PPP])[ktne ];
-      f1_TSW  = (D.f[DIR_MMP])[ktsw ];
-      f1_TSE  = (D.f[DIR_PMP])[ktse ];
-      f1_TNW  = (D.f[DIR_MPP])[ktnw ];
-      f1_BNE  = (D.f[DIR_PPM])[kbne ];
-      f1_BSW  = (D.f[DIR_MMM])[kbsw ];
-      f1_BSE  = (D.f[DIR_PMM])[kbse ];
-      f1_BNW  = (D.f[DIR_MPM])[kbnw ];
-      //f1_W    = (D.f[DIR_P00])[ke   ];
-      //f1_E    = (D.f[DIR_M00])[kw   ];
-      //f1_S    = (D.f[DIR_0P0])[kn   ];
-      //f1_N    = (D.f[DIR_0M0])[ks   ];
-      //f1_B    = (D.f[DIR_00P])[kt   ];
-      //f1_T    = (D.f[DIR_00M])[kb   ];
-      //f1_SW   = (D.f[DIR_PP0])[kne  ];
-      //f1_NE   = (D.f[DIR_MM0])[ksw  ];
-      //f1_NW   = (D.f[DIR_PM0])[kse  ];
-      //f1_SE   = (D.f[DIR_MP0])[knw  ];
-      //f1_BW   = (D.f[DIR_P0P])[kte  ];
-      //f1_TE   = (D.f[DIR_M0M])[kbw  ];
-      //f1_TW   = (D.f[DIR_P0M])[kbe  ];
-      //f1_BE   = (D.f[DIR_M0P])[ktw  ];
-      //f1_BS   = (D.f[DIR_0PP])[ktn  ];
-      //f1_TN   = (D.f[DIR_0MM])[kbs  ];
-      //f1_TS   = (D.f[DIR_0PM])[kbn  ];
-      //f1_BN   = (D.f[DIR_0MP])[kts  ];
-      //f1_ZERO = (D.f[DIR_000])[kzero];
-      //f1_BSW  = (D.f[DIR_PPP])[ktne ];
-      //f1_BNE  = (D.f[DIR_MMP])[ktsw ];
-      //f1_BNW  = (D.f[DIR_PMP])[ktse ];
-      //f1_BSE  = (D.f[DIR_MPP])[ktnw ];
-      //f1_TSW  = (D.f[DIR_PPM])[kbne ];
-      //f1_TNE  = (D.f[DIR_MMM])[kbsw ];
-      //f1_TNW  = (D.f[DIR_PMM])[kbse ];
-      //f1_TSE  = (D.f[DIR_MPM])[kbnw ];
-      //////////////////////////////////////////////////////////////////////////
-      real cs       = c1o1/sqrt(c3o1);
-      real csp1     = cs + c1o1;
-      real csp1Sq  = (c1o1 + cs)*(c1o1 + cs);
-      real relFac   = c19o20; // 0.9...1.0
-      //////////////////////////////////////////////////////////////////////////
-      // For adaption:
-      //     Pressure limits with rho0 = 1:
-      //      2.2e-10 ~  0.94 dB
-      //      6.2e-10 ~   9.9 dB
-      //      6.2e-9  ~  29.9 dB
-      //      2.0e-7  ~  60.1 dB   /Vel
-      //      2.0e-5  ~ 100.1 dB   /press
-      real uSlimit  = Op0000002;
-      //////////////////////////////////////////////////////////////////////////
-      real VX = c0o1;
-      real VY = c0o1;
-      real VZ = vz0[k];
-      //////////////////////////////////////////////////////////////////////////
-      real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*(f1_B + f1_BE + f1_BW + f1_BN + f1_BS + f1_BNE + f1_BSE + f1_BSW + f1_BNW);
-      //real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + two*(f1_T + f1_TE + f1_TW + f1_TN + f1_TS + f1_TNE + f1_TSE + f1_TSW + f1_TNW);
-      ////real temp2= c1mcsSq + two*VZ - two*temp;
-      real vs_z;
-      //if (t < 5)
-      //{
-      //   vs_z = zero;
-      //}
-      //else
-      //{
-         vs_z = relFac * (cs-VZ) * ( sqrt(csp1Sq - c2o1*VZ - c2o1*temp) - csp1 );         //old = relFac * cs * ( sqrt(csp1Sq - two*VZ - two*temp) - csp1 );
-      //}
-
-      // 3. Adapt Speed:
-      real tempDeltaV = deltaVz0[k];
-      real dv = tempDeltaV + vs_z;
-
-      if( dv > uSlimit) {
-         VZ  += dv - uSlimit;
-         tempDeltaV -= uSlimit;
-      }
-      else if( dv < -uSlimit) {
-         VZ  += dv + uSlimit;
-         tempDeltaV += uSlimit;
-      }
-      else {
-         tempDeltaV = -vs_z;
-      }
-
-      //VZ = vz0[k]+vs_z;
-      // 4. Set unknown distributions:
-      //f1_B   = f1_T   - c4o9  * VZ;
-      //f1_BW  = f1_TE  - c1o9  * (VX + VZ);
-      //f1_BE  = f1_TW  + c1o9  * (VX - VZ);
-      //f1_BS  = f1_TN  - c1o9  * (VY + VZ);
-      //f1_BN  = f1_TS  + c1o9  * (VY - VZ);
-      //f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ);
-      //f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ);
-      //f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ);
-      //f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ);
-
-      f1_T   = f1_B   + c4o9  * VZ;
-      f1_TE  = f1_BW  + c1o9  * (VX + VZ);
-      f1_TW  = f1_BE  - c1o9  * (VX - VZ);
-      f1_TN  = f1_BS  + c1o9  * (VY + VZ);
-      f1_TS  = f1_BN  - c1o9  * (VY - VZ);
-      f1_TNE = f1_BSW + c1o36 * (VX + VY + VZ);
-      f1_TSE = f1_BNW + c1o36 * (VX - VY + VZ);
-      f1_TSW = f1_BNE - c1o36 * (VX + VY - VZ);
-      f1_TNW = f1_BSE - c1o36 * (VX - VY - VZ);
-
-      deltaVz0[k] = tempDeltaV;
-      (D.f[DIR_00P])[kt   ] = f1_T  ;
-      (D.f[DIR_P0P])[kte  ] = f1_TE ;
-      (D.f[DIR_M0P])[ktw  ] = f1_TW ;
-      (D.f[DIR_0PP])[ktn  ] = f1_TN ;
-      (D.f[DIR_0MP])[kts  ] = f1_TS ;
-      (D.f[DIR_PPP])[ktne ] = f1_TNE;
-      (D.f[DIR_MMP])[ktsw ] = f1_TSW;
-      (D.f[DIR_PMP])[ktse ] = f1_TSE;
-      (D.f[DIR_MPP])[ktnw ] = f1_TNW;
-
-      //(D.f[DIR_00M])[kb   ] = f1_B   ;
-      //(D.f[DIR_M0M])[kbw  ] = f1_BW  ;
-      //(D.f[DIR_P0M])[kbe  ] = f1_BE  ;
-      //(D.f[DIR_0MM])[kbs  ] = f1_BS  ;
-      //(D.f[DIR_0PM])[kbn  ] = f1_BN  ;
-      //(D.f[DIR_PPM])[kbne ] = f1_BNE ;
-      //(D.f[DIR_MMM])[kbsw ] = f1_BSW ;
-      //(D.f[DIR_PMM])[kbse ] = f1_BSE ;
-      //(D.f[DIR_MPM])[kbnw ] = f1_BNW ;
-
-
-      //(D.f[DIR_00P])[kt   ] = f1_B  ;
-      //(D.f[DIR_P0P])[kte  ] = f1_BW ;
-      //(D.f[DIR_M0P])[ktw  ] = f1_BE ;
-      //(D.f[DIR_0PP])[ktn  ] = f1_BS ;
-      //(D.f[DIR_0MP])[kts  ] = f1_BN ;
-      //(D.f[DIR_PPP])[ktne ] = f1_BSW;
-      //(D.f[DIR_MMP])[ktsw ] = f1_BNE;
-      //(D.f[DIR_PMP])[ktse ] = f1_BNW;
-      //(D.f[DIR_MPP])[ktnw ] = f1_BSE;
-
-      //(D.f[DIR_P00])[ke   ] = f1_W   -c2over27*drho1;
-      //(D.f[DIR_M00])[kw   ] = f1_E   -c2over27*drho1;
-      //(D.f[DIR_0P0])[kn   ] = f1_S   -c2over27*drho1;
-      //(D.f[DIR_0M0])[ks   ] = f1_N   -c2over27*drho1;
-      //(D.f[DIR_00P])[kt   ] = f1_B   -c2over27*drho1;
-      //(D.f[DIR_00M])[kb   ] = f1_T   -c2over27*drho1;
-      //(D.f[DIR_PP0])[kne  ] = f1_SW  -c1over54*drho1;
-      //(D.f[DIR_MM0])[ksw  ] = f1_NE  -c1over54*drho1;
-      //(D.f[DIR_PM0])[kse  ] = f1_NW  -c1over54*drho1;
-      //(D.f[DIR_MP0])[knw  ] = f1_SE  -c1over54*drho1;
-      //(D.f[DIR_P0P])[kte  ] = f1_BW  -c1over54*drho1;
-      //(D.f[DIR_M0M])[kbw  ] = f1_TE  -c1over54*drho1;
-      //(D.f[DIR_P0M])[kbe  ] = f1_TW  -c1over54*drho1;
-      //(D.f[DIR_M0P])[ktw  ] = f1_BE  -c1over54*drho1;
-      //(D.f[DIR_0PP])[ktn  ] = f1_BS  -c1over54*drho1;
-      //(D.f[DIR_0MM])[kbs  ] = f1_TN  -c1over54*drho1;
-      //(D.f[DIR_0PM])[kbn  ] = f1_TS  -c1over54*drho1;
-      //(D.f[DIR_0MP])[kts  ] = f1_BN  -c1over54*drho1;
-      //(D.f[DIR_000])[kzero] = f1_ZERO-c8over27*drho1;
-      //(D.f[DIR_PPP])[ktne ] = f1_BSW -c1over216*drho1;
-      //(D.f[DIR_MMP])[ktsw ] = f1_BNE -c1over216*drho1;
-      //(D.f[DIR_PMP])[ktse ] = f1_BNW -c1over216*drho1;
-      //(D.f[DIR_MPP])[ktnw ] = f1_BSE -c1over216*drho1;
-      //(D.f[DIR_PPM])[kbne ] = f1_TSW -c1over216*drho1;
-      //(D.f[DIR_MMM])[kbsw ] = f1_TNE -c1over216*drho1;
-      //(D.f[DIR_PMM])[kbse ] = f1_TNW -c1over216*drho1;
-      //(D.f[DIR_MPM])[kbnw ] = f1_TSE -c1over216*drho1;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
diff --git a/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu b/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu
deleted file mode 100644
index d847d00193f68127927e2f3fa3fbf1eda7f9a736..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Device code */
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-////////////////////////////////////////////////////////////////////////////////
-__global__ void GetVeloforForcing27( real* DD, 
-												int* bcIndex, 
-												int nonAtBC, 
-												real* Vx,
-												real* Vy,
-												real* Vz,
-												unsigned int* neighborX,
-												unsigned int* neighborY,
-												unsigned int* neighborZ,
-												unsigned long long numberOfLBnodes, 
-												bool isEvenTimestep)
-{
-	Distributions27 D;
-	if (isEvenTimestep==false)
-	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	} 
-	else
-	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	}
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-	if(k < nonAtBC)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		//index
-		unsigned int KQK  = bcIndex[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 mfcbb = (D.f[DIR_P00])[ke   ];
-		real mfabb = (D.f[DIR_M00])[kw   ];
-		real mfbcb = (D.f[DIR_0P0])[kn   ];
-		real mfbab = (D.f[DIR_0M0])[ks   ];
-		real mfbbc = (D.f[DIR_00P])[kt   ];
-		real mfbba = (D.f[DIR_00M])[kb   ];
-		real mfccb = (D.f[DIR_PP0])[kne  ];
-		real mfaab = (D.f[DIR_MM0])[ksw  ];
-		real mfcab = (D.f[DIR_PM0])[kse  ];
-		real mfacb = (D.f[DIR_MP0])[knw  ];
-		real mfcbc = (D.f[DIR_P0P])[kte  ];
-		real mfaba = (D.f[DIR_M0M])[kbw  ];
-		real mfcba = (D.f[DIR_P0M])[kbe  ];
-		real mfabc = (D.f[DIR_M0P])[ktw  ];
-		real mfbcc = (D.f[DIR_0PP])[ktn  ];
-		real mfbaa = (D.f[DIR_0MM])[kbs  ];
-		real mfbca = (D.f[DIR_0PM])[kbn  ];
-		real mfbac = (D.f[DIR_0MP])[kts  ];
-		real mfbbb = (D.f[DIR_000])[kzero];
-		real mfccc = (D.f[DIR_PPP])[ktne ];
-		real mfaac = (D.f[DIR_MMP])[ktsw ];
-		real mfcac = (D.f[DIR_PMP])[ktse ];
-		real mfacc = (D.f[DIR_MPP])[ktnw ];
-		real mfcca = (D.f[DIR_PPM])[kbne ];
-		real mfaaa = (D.f[DIR_MMM])[kbsw ];
-		real mfcaa = (D.f[DIR_PMM])[kbse ];
-		real mfaca = (D.f[DIR_MPM])[kbnw ];
-		////////////////////////////////////////////////////////////////////////////////////
-		real rho   = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
-					 	 mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
-						 mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one
-		////////////////////////////////////////////////////////////////////////////////////
-		real vx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
-			         (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
-				       (mfcbb-mfabb))/ rho;
-		real vy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + 
-			         (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
-			           (mfbcb-mfbab)) / rho;
-		real vz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + 
-			         (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
-			           (mfbbc-mfbba)) / rho;
-		////////////////////////////////////////////////////////////////////////////////////
-		Vx[k] = vx;
-		Vy[k] = vy;
-		Vz[k] = vz;
-		////////////////////////////////////////////////////////////////////////////////////
-	}
-}
-
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu
deleted file mode 100644
index f76b31c768553aed46fd640d9cdace8ba753b6b8..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu
+++ /dev/null
@@ -1,1137 +0,0 @@
-//  _    ___      __              __________      _     __        ______________   __
-// | |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____   /  ___/ __  / /  / /
-// | | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/  / /___/ /_/ / /  / /
-// | |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )  / /_) / ____/ /__/ / 
-// |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/   \____/_/    \_____/
-//
-//////////////////////////////////////////////////////////////////////////
-
-/* Device code */
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-/////////////////////////////////////////////////////////////////////////
-__global__ void QVelDeviceCompThinWallsPartOne27(
-	real* vx,
-	real* vy,
-	real* vz,
-	real* DD, 
-	int* k_Q, 
-	real* QQ,
-	uint numberOfBCnodes, 
-	real om1, 
-	uint* neighborX,
-	uint* neighborY,
-	uint* neighborZ,
-	unsigned long long numberOfLBnodes, 
-	bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      real VeloX = vx[k];
-      real VeloY = vy[k];
-      real VeloZ = vz[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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index
-      uint KQK  = k_Q[k];
-      uint kzero= KQK;
-      uint ke   = KQK;
-      uint kw   = neighborX[KQK];
-      uint kn   = KQK;
-      uint ks   = neighborY[KQK];
-      uint kt   = KQK;
-      uint kb   = neighborZ[KQK];
-      uint ksw  = neighborY[kw];
-      uint kne  = KQK;
-      uint kse  = ks;
-      uint knw  = kw;
-      uint kbw  = neighborZ[kw];
-      uint kte  = KQK;
-      uint kbe  = kb;
-      uint ktw  = kw;
-      uint kbs  = neighborZ[ks];
-      uint ktn  = KQK;
-      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 = KQK;
-      uint 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-         
-
-      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
-
-      //////////////////////////////////////////////////////////////////////////
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho + c9o2 * ( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq);
-		 (D.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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);
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QDeviceCompThinWallsPartOne27(
-	real* DD,
-	int* k_Q,
-	real* QQ,
-	unsigned int numberOfBCnodes,
-	real om1,
-	unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned long long numberOfLBnodes,
-	bool isEvenTimestep)
-{
-	Distributions27 D;
-	if (isEvenTimestep == true)
-	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	}
-	else
-	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	}
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if (k < 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[DIR_P00 * numberOfBCnodes];
-		q_dirW = &QQ[DIR_M00 * numberOfBCnodes];
-		q_dirN = &QQ[DIR_0P0 * numberOfBCnodes];
-		q_dirS = &QQ[DIR_0M0 * numberOfBCnodes];
-		q_dirT = &QQ[DIR_00P * numberOfBCnodes];
-		q_dirB = &QQ[DIR_00M * numberOfBCnodes];
-		q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes];
-		q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes];
-		q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes];
-		q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes];
-		q_dirTE = &QQ[DIR_P0P * numberOfBCnodes];
-		q_dirBW = &QQ[DIR_M0M * numberOfBCnodes];
-		q_dirBE = &QQ[DIR_P0M * numberOfBCnodes];
-		q_dirTW = &QQ[DIR_M0P * numberOfBCnodes];
-		q_dirTN = &QQ[DIR_0PP * numberOfBCnodes];
-		q_dirBS = &QQ[DIR_0MM * numberOfBCnodes];
-		q_dirBN = &QQ[DIR_0PM * numberOfBCnodes];
-		q_dirTS = &QQ[DIR_0MP * numberOfBCnodes];
-		q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-		q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-		q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-		q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-		q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-		q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-		q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-		q_dirBNW = &QQ[DIR_MPM * 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];
-		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 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[DIR_P00])[ke];
-		f_E = (D.f[DIR_M00])[kw];
-		f_S = (D.f[DIR_0P0])[kn];
-		f_N = (D.f[DIR_0M0])[ks];
-		f_B = (D.f[DIR_00P])[kt];
-		f_T = (D.f[DIR_00M])[kb];
-		f_SW = (D.f[DIR_PP0])[kne];
-		f_NE = (D.f[DIR_MM0])[ksw];
-		f_NW = (D.f[DIR_PM0])[kse];
-		f_SE = (D.f[DIR_MP0])[knw];
-		f_BW = (D.f[DIR_P0P])[kte];
-		f_TE = (D.f[DIR_M0M])[kbw];
-		f_TW = (D.f[DIR_P0M])[kbe];
-		f_BE = (D.f[DIR_M0P])[ktw];
-		f_BS = (D.f[DIR_0PP])[ktn];
-		f_TN = (D.f[DIR_0MM])[kbs];
-		f_TS = (D.f[DIR_0PM])[kbn];
-		f_BN = (D.f[DIR_0MP])[kts];
-		f_BSW = (D.f[DIR_PPP])[ktne];
-		f_BNE = (D.f[DIR_MMP])[ktsw];
-		f_BNW = (D.f[DIR_PMP])[ktse];
-		f_BSE = (D.f[DIR_MPP])[ktnw];
-		f_TSW = (D.f[DIR_PPM])[kbne];
-		f_TNE = (D.f[DIR_MMM])[kbsw];
-		f_TNW = (D.f[DIR_PMM])[kbse];
-		f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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);
-
-
-		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 cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3) * (c1o1 + drho);
-		////////////////////////////////////////////////////////////////////////////////
-
-		q = q_dirE[k];
-		if (q >= c0o1 && q <= c1o1)
-		{
-			feq = c2o27* (drho + c9o2*(vx1)*(vx1) * (c1o1 + drho) - cu_sq);
-			(D.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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);
-		}
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QThinWallsPartTwo27(
-	real* DD, 
-	int* k_Q, 
-	real* QQ,
-	uint numberOfBCnodes, 
-	uint* geom,
-	uint* neighborX,
-	uint* neighborY,
-	uint* neighborZ,
-	uint* neighborWSB,
-	unsigned long long 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 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
-      ////////////////////////////////////////////////////////////////////////////////
-      //index
-      uint KQK  = k_Q[k];
-      //uint kzero= KQK;
-      uint ke   = KQK;
-      uint kw   = neighborX[KQK];
-      uint kn   = KQK;
-      uint ks   = neighborY[KQK];
-      uint kt   = KQK;
-      uint kb   = neighborZ[KQK];
-      uint ksw  = neighborY[kw];
-      uint kne  = KQK;
-      uint kse  = ks;
-      uint knw  = kw;
-      uint kbw  = neighborZ[kw];
-      uint kte  = KQK;
-      uint kbe  = kb;
-      uint ktw  = kw;
-      uint kbs  = neighborZ[ks];
-      uint ktn  = KQK;
-      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 = KQK;
-      uint kbsw = neighborZ[ksw];
-	  ////////////////////////////////////////////////////////////////////////////////
-	  //anti ET intermediate steps
-	  uint kmmm = neighborWSB[KQK]; // -1 -1 -1
-	  uint k0mm = neighborX[kmmm];  //  0 -1 -1
-	  uint km0m = neighborY[kmmm];  // -1  0 -1
-	  uint kmm0 = neighborZ[kmmm];  // -1 -1  0
-	  uint k0m0 = neighborX[kmm0];  //  0 -1  0
-	  uint km00 = neighborY[kmm0];  // -1  0  0
-	  /////////////////////////////////////////////////
-	  //final indices for anti ET
-	  uint kpmm = neighborX[k0mm];  //  1 -1 -1
-	  uint kmpm = neighborY[km0m];  // -1  1 -1
-	  uint kmmp = neighborZ[kmm0];  // -1 -1  1
-	  uint kmp0 = neighborY[km00];  // -1  1  0
-	  uint km0p = neighborZ[km00];  // -1  0  1
-	  uint k0mp = neighborZ[k0m0];  //  0 -1  1
-	  ////////////////////////////////////////////////////////////////////////////////
-	  Distributions27 D, DN;
-	  if (isEvenTimestep == true)
-	  {
-		  D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		  D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		  D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		  D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		  D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		  D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		  D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		  D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		  D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		  D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		  D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		  D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		  D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		  D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		  D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		  D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		  D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		  D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		  D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		  D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		  D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		  D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		  D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		  D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		  D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		  D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		  D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	  }
-	  else
-	  {
-		  D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		  D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		  D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		  D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		  D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		  D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		  D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		  D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		  D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		  D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		  D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		  D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		  D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		  D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		  D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		  D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		  D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		  D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		  D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		  D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		  D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		  D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		  D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		  D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		  D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		  D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		  D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	  }
-	  if (isEvenTimestep==false)
-      {
-         DN.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         DN.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         DN.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         DN.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         DN.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         DN.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         DN.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         DN.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         DN.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         DN.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         DN.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         DN.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         DN.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         DN.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         DN.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         DN.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         DN.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         DN.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         DN.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         DN.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         DN.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         DN.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         DN.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         DN.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         DN.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         DN.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         DN.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         DN.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         DN.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         DN.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         DN.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         DN.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         DN.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         DN.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         DN.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         DN.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         DN.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         DN.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         DN.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         DN.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         DN.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         DN.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         DN.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         DN.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         DN.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         DN.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         DN.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         DN.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         DN.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         DN.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         DN.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         DN.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         DN.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         DN.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //directions allways exchange
-	  //(-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)
-	  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //directions exchange if solid neighbor
-	  //( 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[DIR_M00])[kw  ]; (DN.f[DIR_M00])[kw  ]=(D.f[DIR_M00])[kw  ]; (D.f[DIR_M00])[kw  ]=tmp;}}
-	  q = q_dirW[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_P00])[ke  ]; (DN.f[DIR_P00])[ke  ]=(D.f[DIR_P00])[ke  ]; (D.f[DIR_P00])[ke  ]=tmp;}}
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1){ if (geom[ks  ] < GEO_FLUID){tmp = (DN.f[DIR_0M0])[ks  ]; (DN.f[DIR_0M0])[ks  ]=(D.f[DIR_0M0])[ks  ]; (D.f[DIR_0M0])[ks  ]=tmp;}}
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_0P0])[kn  ]; (DN.f[DIR_0P0])[kn  ]=(D.f[DIR_0P0])[kn  ]; (D.f[DIR_0P0])[kn  ]=tmp;}}
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1){ if (geom[kb  ] < GEO_FLUID){tmp = (DN.f[DIR_00M])[kb  ]; (DN.f[DIR_00M])[kb  ]=(D.f[DIR_00M])[kb  ]; (D.f[DIR_00M])[kb  ]=tmp;}}
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_00P])[kt  ]; (DN.f[DIR_00P])[kt  ]=(D.f[DIR_00P])[kt  ]; (D.f[DIR_00P])[kt  ]=tmp;}}
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[ksw ] < GEO_FLUID){tmp = (DN.f[DIR_MM0])[ksw ]; (DN.f[DIR_MM0])[ksw ]=(D.f[DIR_MM0])[ksw ]; (D.f[DIR_MM0])[ksw ]=tmp;}}
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_PP0])[kne ]; (DN.f[DIR_PP0])[kne ]=(D.f[DIR_PP0])[kne ]; (D.f[DIR_PP0])[kne ]=tmp;}}
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_MP0])[knw ]; (DN.f[DIR_MP0])[knw ]=(D.f[DIR_MP0])[knw ]; (D.f[DIR_MP0])[knw ]=tmp;}}
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kmp0] < GEO_FLUID){tmp = (DN.f[DIR_PM0])[kse ]; (DN.f[DIR_PM0])[kse ]=(D.f[DIR_PM0])[kse ]; (D.f[DIR_PM0])[kse ]=tmp;}}
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbw ] < GEO_FLUID){tmp = (DN.f[DIR_M0M])[kbw ]; (DN.f[DIR_M0M])[kbw ]=(D.f[DIR_M0M])[kbw ]; (D.f[DIR_M0M])[kbw ]=tmp;}}
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_P0P])[kte ]; (DN.f[DIR_P0P])[kte ]=(D.f[DIR_P0P])[kte ]; (D.f[DIR_P0P])[kte ]=tmp;}}
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_M0P])[ktw ]; (DN.f[DIR_M0P])[ktw ]=(D.f[DIR_M0P])[ktw ]; (D.f[DIR_M0P])[ktw ]=tmp;}}
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[km0p] < GEO_FLUID){tmp = (DN.f[DIR_P0M])[kbe ]; (DN.f[DIR_P0M])[kbe ]=(D.f[DIR_P0M])[kbe ]; (D.f[DIR_P0M])[kbe ]=tmp;}}
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbs ] < GEO_FLUID){tmp = (DN.f[DIR_0MM])[kbs ]; (DN.f[DIR_0MM])[kbs ]=(D.f[DIR_0MM])[kbs ]; (D.f[DIR_0MM])[kbs ]=tmp;}}
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_0PP])[ktn ]; (DN.f[DIR_0PP])[ktn ]=(D.f[DIR_0PP])[ktn ]; (D.f[DIR_0PP])[ktn ]=tmp;}}
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_0MP])[kts ]; (DN.f[DIR_0MP])[kts ]=(D.f[DIR_0MP])[kts ]; (D.f[DIR_0MP])[kts ]=tmp;}}
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1){ if (geom[k0mp] < GEO_FLUID){tmp = (DN.f[DIR_0PM])[kbn ]; (DN.f[DIR_0PM])[kbn ]=(D.f[DIR_0PM])[kbn ]; (D.f[DIR_0PM])[kbn ]=tmp;}}
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbsw] < GEO_FLUID){tmp = (DN.f[DIR_MMM])[kbsw]; (DN.f[DIR_MMM])[kbsw]=(D.f[DIR_MMM])[kbsw]; (D.f[DIR_MMM])[kbsw]=tmp;}}
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_PPP])[ktne]; (DN.f[DIR_PPP])[ktne]=(D.f[DIR_PPP])[ktne]; (D.f[DIR_PPP])[ktne]=tmp;}}
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_MMP])[ktsw]; (DN.f[DIR_MMP])[ktsw]=(D.f[DIR_MMP])[ktsw]; (D.f[DIR_MMP])[ktsw]=tmp;}}
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmmp] < GEO_FLUID){tmp = (DN.f[DIR_PPM])[kbne]; (DN.f[DIR_PPM])[kbne]=(D.f[DIR_PPM])[kbne]; (D.f[DIR_PPM])[kbne]=tmp;}}
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_MPM])[kbnw]; (DN.f[DIR_MPM])[kbnw]=(D.f[DIR_MPM])[kbnw]; (D.f[DIR_MPM])[kbnw]=tmp;}}
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmpm] < GEO_FLUID){tmp = (DN.f[DIR_PMP])[ktse]; (DN.f[DIR_PMP])[ktse]=(D.f[DIR_PMP])[ktse]; (D.f[DIR_PMP])[ktse]=tmp;}}
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kpmm] < GEO_FLUID){tmp = (DN.f[DIR_MPP])[ktnw]; (DN.f[DIR_MPP])[ktnw]=(D.f[DIR_MPP])[ktnw]; (D.f[DIR_MPP])[ktnw]=tmp;}}
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[DIR_PMM])[kbse]; (DN.f[DIR_PMM])[kbse]=(D.f[DIR_PMM])[kbse]; (D.f[DIR_PMM])[kbse]=tmp;}}
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu
deleted file mode 100644
index 6207c98f9290520199e3cd9c31294ef5520b1798..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu
+++ /dev/null
@@ -1,5844 +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 VelocityBCs27.cu
-//! \ingroup GPU
-//! \author Martin Schoenherr, Anna Wellmann
-//======================================================================================
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include "basics/constants/NumericConstants.h"
-#include "LBM/GPUHelperFunctions/KernelUtilities.h"
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-using namespace vf::gpu;
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDeviceCompPlusSlip27(
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if (k < numberOfBCnodes)
-   {
-	   ////////////////////////////////////////////////////////////////////////////////
-	   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)
-	   ////////////////////////////////////////////////////////////////////////////////
-	   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[DIR_P00 * numberOfBCnodes];
-	   q_dirW = &QQ[DIR_M00 * numberOfBCnodes];
-	   q_dirN = &QQ[DIR_0P0 * numberOfBCnodes];
-	   q_dirS = &QQ[DIR_0M0 * numberOfBCnodes];
-	   q_dirT = &QQ[DIR_00P * numberOfBCnodes];
-	   q_dirB = &QQ[DIR_00M * numberOfBCnodes];
-	   q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes];
-	   q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes];
-	   q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes];
-	   q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes];
-	   q_dirTE = &QQ[DIR_P0P * numberOfBCnodes];
-	   q_dirBW = &QQ[DIR_M0M * numberOfBCnodes];
-	   q_dirBE = &QQ[DIR_P0M * numberOfBCnodes];
-	   q_dirTW = &QQ[DIR_M0P * numberOfBCnodes];
-	   q_dirTN = &QQ[DIR_0PP * numberOfBCnodes];
-	   q_dirBS = &QQ[DIR_0MM * numberOfBCnodes];
-	   q_dirBN = &QQ[DIR_0PM * numberOfBCnodes];
-	   q_dirTS = &QQ[DIR_0MP * numberOfBCnodes];
-	   q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-	   q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-	   q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-	   q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-	   q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-	   q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-	   q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-	   q_dirBNW = &QQ[DIR_MPM * 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];
-	   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 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[DIR_P00])[ke];
-	   f_E = (D.f[DIR_M00])[kw];
-	   f_S = (D.f[DIR_0P0])[kn];
-	   f_N = (D.f[DIR_0M0])[ks];
-	   f_B = (D.f[DIR_00P])[kt];
-	   f_T = (D.f[DIR_00M])[kb];
-	   f_SW = (D.f[DIR_PP0])[kne];
-	   f_NE = (D.f[DIR_MM0])[ksw];
-	   f_NW = (D.f[DIR_PM0])[kse];
-	   f_SE = (D.f[DIR_MP0])[knw];
-	   f_BW = (D.f[DIR_P0P])[kte];
-	   f_TE = (D.f[DIR_M0M])[kbw];
-	   f_TW = (D.f[DIR_P0M])[kbe];
-	   f_BE = (D.f[DIR_M0P])[ktw];
-	   f_BS = (D.f[DIR_0PP])[ktn];
-	   f_TN = (D.f[DIR_0MM])[kbs];
-	   f_TS = (D.f[DIR_0PM])[kbn];
-	   f_BN = (D.f[DIR_0MP])[kts];
-	   f_BSW = (D.f[DIR_PPP])[ktne];
-	   f_BNE = (D.f[DIR_MMP])[ktsw];
-	   f_BNW = (D.f[DIR_PMP])[ktse];
-	   f_BSE = (D.f[DIR_MPP])[ktnw];
-	   f_TSW = (D.f[DIR_PPM])[kbne];
-	   f_TNE = (D.f[DIR_MMM])[kbsw];
-	   f_TNW = (D.f[DIR_PMM])[kbse];
-	   f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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);
-
-
-	   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 cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3) * (c1o1 + drho);
-
-	   //////////////////////////////////////////////////////////////////////////
-	   if (isEvenTimestep == false)
-	   {
-		   D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		   D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		   D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		   D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		   D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		   D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		   D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		   D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		   D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		   D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		   D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		   D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		   D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		   D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		   D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		   D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		   D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		   D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		   D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		   D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		   D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		   D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		   D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		   D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		   D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		   D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		   D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	   }
-	   else
-	   {
-		   D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		   D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		   D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		   D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		   D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		   D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		   D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		   D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		   D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		   D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		   D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		   D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		   D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		   D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		   D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		   D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		   D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		   D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		   D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		   D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		   D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		   D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		   D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		   D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		   D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		   D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		   D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	   }
-	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	   //Test
-	   //(D.f[DIR_000])[k]=c1o10;
-	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-	   //ToDo anders Klammern
-
-	   /////To Slip Or Not To Slip?
-	   // We assume slip BC if |vec(V_BC)|=1. To avoid problems we take V_BC*V_BC>0.99 (c99o100)
-	   if (VeloX*VeloX + VeloY*VeloY + VeloZ*VeloZ > c99o100)
-		{
-		   // vt=v-(n \dot v) *n
-		   // n=(VeloX,VeloY,VeloZ) a misuse of the velocity variable!
-		   real normalV = VeloX*vx1 + VeloY*vx2 + VeloZ*vx3;
-		   vx1 = vx1 - normalV*VeloX;
-		   vx2 = vx2 - normalV*VeloY;
-		   vx3 = vx3 - normalV*VeloZ;
-		}
-	  ////////////////
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[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[DIR_M00])[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[DIR_P00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00M])[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[DIR_00P])[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[DIR_00P])[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[DIR_MM0])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-__global__ void QVeloDeviceEQ27(
-    real* VeloX,
-    real* VeloY,
-    real* VeloZ,
-    real* DD, 
-    int* k_Q, 
-    int numberOfBCnodes, 
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long 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 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<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];
-      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];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            // based on BGK Plus Comp
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[ke   ];
-			real mfabb = (D.f[DIR_M00])[kw   ];
-			real mfbcb = (D.f[DIR_0P0])[kn   ];
-			real mfbab = (D.f[DIR_0M0])[ks   ];
-			real mfbbc = (D.f[DIR_00P])[kt   ];
-			real mfbba = (D.f[DIR_00M])[kb   ];
-			real mfccb = (D.f[DIR_PP0])[kne  ];
-			real mfaab = (D.f[DIR_MM0])[ksw  ];
-			real mfcab = (D.f[DIR_PM0])[kse  ];
-			real mfacb = (D.f[DIR_MP0])[knw  ];
-			real mfcbc = (D.f[DIR_P0P])[kte  ];
-			real mfaba = (D.f[DIR_M0M])[kbw  ];
-			real mfcba = (D.f[DIR_P0M])[kbe  ];
-			real mfabc = (D.f[DIR_M0P])[ktw  ];
-			real mfbcc = (D.f[DIR_0PP])[ktn  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs  ];
-			real mfbca = (D.f[DIR_0PM])[kbn  ];
-			real mfbac = (D.f[DIR_0MP])[kts  ];
-			real mfbbb = (D.f[DIR_000])[kzero];
-			real mfccc = (D.f[DIR_PPP])[ktne ];
-			real mfaac = (D.f[DIR_MMP])[ktsw ];
-			real mfcac = (D.f[DIR_PMP])[ktse ];
-			real mfacc = (D.f[DIR_MPP])[ktnw ];
-			real mfcca = (D.f[DIR_PPM])[kbne ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw ];
-			real mfcaa = (D.f[DIR_PMM])[kbse ];
-			real mfaca = (D.f[DIR_MPM])[kbnw ];
-			////////////////////////////////////////////////////////////////////////////////////
-			real rho   = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
-							 mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
-							 mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one
-			////////////////////////////////////////////////////////////////////////////////////
-			real vvx    = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
-						     (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
-						       (mfcbb-mfabb)) / rho;
-			real vvy    =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + 
-				             (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
-				               (mfbcb-mfbab)) / rho;
-			real vvz    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + 
-				             (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
-				               (mfbbc-mfbba)) / rho;
-			////////////////////////////////////////////////////////////////////////////////////
-			if(VeloX[k]!=c0o1) vvx = VeloX[k];
-			if(VeloY[k]!=c0o1) vvy = VeloY[k];
-			if(VeloZ[k]!=c0o1) vvz = VeloZ[k];
-			////////////////////////////////////////////////////////////////////////////////////
-			real vx2    = vvx * vvx;
-			real vy2    = vvy * vvy;
-			real vz2    = vvz * vvz;
-			////////////////////////////////////////////////////////////////////////////////////
-            real XXb    = -c2o3 + vx2;
-            real XXc    = -c1o2 * (XXb + c1o1 + vvx);
-            real XXa    = XXc + vvx;
-            real YYb    = -c2o3 + vy2;
-            real YYc    = -c1o2 * (YYb + c1o1 + vvy);
-            real YYa    = YYc + vvy;
-            real ZZb    = -c2o3 + vz2;
-            real ZZc    = -c1o2 * (ZZb + c1o1 + vvz);
-            real ZZa    = ZZc + vvz;
-			////////////////////////////////////////////////////////////////////////////////////
-            mfcbb = -rho * XXc * YYb * ZZb - c2o27 ; 
-			mfabb = -rho * XXa * YYb * ZZb - c2o27 ;
-			mfbcb = -rho * XXb * YYc * ZZb - c2o27 ;
-			mfbab = -rho * XXb * YYa * ZZb - c2o27 ;
-			mfbbc = -rho * XXb * YYb * ZZc - c2o27 ;
-			mfbba = -rho * XXb * YYb * ZZa - c2o27 ;
-			mfccb = -rho * XXc * YYc * ZZb - c1o54 ;
-			mfaab = -rho * XXa * YYa * ZZb - c1o54 ;
-			mfcab = -rho * XXc * YYa * ZZb - c1o54 ;
-			mfacb = -rho * XXa * YYc * ZZb - c1o54 ;
-			mfcbc = -rho * XXc * YYb * ZZc - c1o54 ;
-			mfaba = -rho * XXa * YYb * ZZa - c1o54 ;
-			mfcba = -rho * XXc * YYb * ZZa - c1o54 ;
-			mfabc = -rho * XXa * YYb * ZZc - c1o54 ;
-			mfbcc = -rho * XXb * YYc * ZZc - c1o54 ;
-			mfbaa = -rho * XXb * YYa * ZZa - c1o54 ;
-			mfbca = -rho * XXb * YYc * ZZa - c1o54 ;
-			mfbac = -rho * XXb * YYa * ZZc - c1o54 ;
-			mfbbb = -rho * XXb * YYb * ZZb - c8o27 ;
-			mfccc = -rho * XXc * YYc * ZZc - c1o216;
-			mfaac = -rho * XXa * YYa * ZZc - c1o216;
-			mfcac = -rho * XXc * YYa * ZZc - c1o216;
-			mfacc = -rho * XXa * YYc * ZZc - c1o216;
-			mfcca = -rho * XXc * YYc * ZZa - c1o216;
-			mfaaa = -rho * XXa * YYa * ZZa - c1o216;
-			mfcaa = -rho * XXc * YYa * ZZa - c1o216;
-			mfaca = -rho * XXa * YYc * ZZa - c1o216;
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[ke   ] = mfabb;//mfcbb;
-			(D.f[DIR_M00])[kw   ] = mfcbb;//mfabb;
-			(D.f[DIR_0P0])[kn   ] = mfbab;//mfbcb;
-			(D.f[DIR_0M0])[ks   ] = mfbcb;//mfbab;
-			(D.f[DIR_00P])[kt   ] = mfbba;//mfbbc;
-			(D.f[DIR_00M])[kb   ] = mfbbc;//mfbba;
-			(D.f[DIR_PP0])[kne  ] = mfaab;//mfccb;
-			(D.f[DIR_MM0])[ksw  ] = mfccb;//mfaab;
-			(D.f[DIR_PM0])[kse  ] = mfacb;//mfcab;
-			(D.f[DIR_MP0])[knw  ] = mfcab;//mfacb;
-			(D.f[DIR_P0P])[kte  ] = mfaba;//mfcbc;
-			(D.f[DIR_M0M])[kbw  ] = mfcbc;//mfaba;
-			(D.f[DIR_P0M])[kbe  ] = mfabc;//mfcba;
-			(D.f[DIR_M0P])[ktw  ] = mfcba;//mfabc;
-			(D.f[DIR_0PP])[ktn  ] = mfbaa;//mfbcc;
-			(D.f[DIR_0MM])[kbs  ] = mfbcc;//mfbaa;
-			(D.f[DIR_0PM])[kbn  ] = mfbac;//mfbca;
-			(D.f[DIR_0MP])[kts  ] = mfbca;//mfbac;
-			(D.f[DIR_000])[kzero] = mfbbb;//mfbbb;
-			(D.f[DIR_PPP])[ktne ] = mfaaa;//mfccc;
-			(D.f[DIR_MMP])[ktsw ] = mfcca;//mfaac;
-			(D.f[DIR_PMP])[ktse ] = mfaca;//mfcac;
-			(D.f[DIR_MPP])[ktnw ] = mfcaa;//mfacc;
-			(D.f[DIR_PPM])[kbne ] = mfaac;//mfcca;
-			(D.f[DIR_MMM])[kbsw ] = mfccc;//mfaaa;
-			(D.f[DIR_PMM])[kbse ] = mfacc;//mfcaa;
-			(D.f[DIR_MPM])[kbnw ] = mfcac;//mfaca;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDeviceIncompHighNu27(
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      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)
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_W   = (D.f[DIR_M00])[kw   ];
-      f_N   = (D.f[DIR_0P0])[kn   ];
-      f_S   = (D.f[DIR_0M0])[ks   ];
-      f_T   = (D.f[DIR_00P])[kt   ];
-      f_B   = (D.f[DIR_00M])[kb   ];
-      f_NE  = (D.f[DIR_PP0])[kne  ];
-      f_SW  = (D.f[DIR_MM0])[ksw  ];
-      f_SE  = (D.f[DIR_PM0])[kse  ];
-      f_NW  = (D.f[DIR_MP0])[knw  ];
-      f_TE  = (D.f[DIR_P0P])[kte  ];
-      f_BW  = (D.f[DIR_M0M])[kbw  ];
-      f_BE  = (D.f[DIR_P0M])[kbe  ];
-      f_TW  = (D.f[DIR_M0P])[ktw  ];
-      f_TN  = (D.f[DIR_0PP])[ktn  ];
-      f_BS  = (D.f[DIR_0MM])[kbs  ];
-      f_BN  = (D.f[DIR_0PM])[kbn  ];
-      f_TS  = (D.f[DIR_0MP])[kts  ];
-      f_TNE = (D.f[DIR_PPP])[ktne ];
-      f_TSW = (D.f[DIR_MMP])[ktsw ];
-      f_TSE = (D.f[DIR_PMP])[ktse ];
-      f_TNW = (D.f[DIR_MPP])[ktnw ];
-      f_BNE = (D.f[DIR_PPM])[kbne ];
-      f_BSW = (D.f[DIR_MMM])[kbsw ];
-      f_BSE = (D.f[DIR_PMM])[kbse ];
-      f_BNW = (D.f[DIR_MPM])[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[DIR_000])[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));// / (one + 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));// / (one + 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));// / (one + drho); 
-
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-	  //ToDo anders Klammern
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) /** (one + drho)*/-cu_sq); 
-         (D.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDeviceCompHighNu27(
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD,
-    int* k_Q,
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      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)
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_W   = (D.f[DIR_M00])[kw   ];
-      f_N   = (D.f[DIR_0P0])[kn   ];
-      f_S   = (D.f[DIR_0M0])[ks   ];
-      f_T   = (D.f[DIR_00P])[kt   ];
-      f_B   = (D.f[DIR_00M])[kb   ];
-      f_NE  = (D.f[DIR_PP0])[kne  ];
-      f_SW  = (D.f[DIR_MM0])[ksw  ];
-      f_SE  = (D.f[DIR_PM0])[kse  ];
-      f_NW  = (D.f[DIR_MP0])[knw  ];
-      f_TE  = (D.f[DIR_P0P])[kte  ];
-      f_BW  = (D.f[DIR_M0M])[kbw  ];
-      f_BE  = (D.f[DIR_P0M])[kbe  ];
-      f_TW  = (D.f[DIR_M0P])[ktw  ];
-      f_TN  = (D.f[DIR_0PP])[ktn  ];
-      f_BS  = (D.f[DIR_0MM])[kbs  ];
-      f_BN  = (D.f[DIR_0PM])[kbn  ];
-      f_TS  = (D.f[DIR_0MP])[kts  ];
-      f_TNE = (D.f[DIR_PPP])[ktne ];
-      f_TSW = (D.f[DIR_MMP])[ktsw ];
-      f_TSE = (D.f[DIR_PMP])[ktse ];
-      f_TNW = (D.f[DIR_MPP])[ktnw ];
-      f_BNE = (D.f[DIR_PPM])[kbne ];
-      f_BSW = (D.f[DIR_MMM])[kbsw ];
-      f_BSE = (D.f[DIR_PMM])[kbse ];
-      f_BNW = (D.f[DIR_MPM])[kbnw ];
-      //f_W    = (D.f[DIR_P00])[ke   ];
-      //f_E    = (D.f[DIR_M00])[kw   ];
-      //f_S    = (D.f[DIR_0P0])[kn   ];
-      //f_N    = (D.f[DIR_0M0])[ks   ];
-      //f_B    = (D.f[DIR_00P])[kt   ];
-      //f_T    = (D.f[DIR_00M])[kb   ];
-      //f_SW   = (D.f[DIR_PP0])[kne  ];
-      //f_NE   = (D.f[DIR_MM0])[ksw  ];
-      //f_NW   = (D.f[DIR_PM0])[kse  ];
-      //f_SE   = (D.f[DIR_MP0])[knw  ];
-      //f_BW   = (D.f[DIR_P0P])[kte  ];
-      //f_TE   = (D.f[DIR_M0M])[kbw  ];
-      //f_TW   = (D.f[DIR_P0M])[kbe  ];
-      //f_BE   = (D.f[DIR_M0P])[ktw  ];
-      //f_BS   = (D.f[DIR_0PP])[ktn  ];
-      //f_TN   = (D.f[DIR_0MM])[kbs  ];
-      //f_TS   = (D.f[DIR_0PM])[kbn  ];
-      //f_BN   = (D.f[DIR_0MP])[kts  ];
-      //f_BSW  = (D.f[DIR_PPP])[ktne ];
-      //f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      //f_BNW  = (D.f[DIR_PMP])[ktse ];
-      //f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      //f_TSW  = (D.f[DIR_PPM])[kbne ];
-      //f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      //f_TNW  = (D.f[DIR_PMM])[kbse ];
-      //f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-         
-
-      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-	  //ToDo anders Klammern
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
-         //(D.f[DIR_M00])[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[DIR_M00])[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[DIR_P00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
-         //(D.f[DIR_P00])[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[DIR_P00])[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[DIR_0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
-         //(D.f[DIR_0M0])[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[DIR_0M0])[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[DIR_0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
-         //(D.f[DIR_0P0])[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[DIR_0P0])[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[DIR_00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
-         //(D.f[DIR_00M])[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[DIR_00M])[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[DIR_00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
-         //(D.f[DIR_00P])[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[DIR_00P])[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[DIR_MM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_MM0])[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[DIR_MM0])[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[DIR_PP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_PP0])[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[DIR_PP0])[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[DIR_MP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_MP0])[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[DIR_MP0])[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[DIR_PM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[DIR_PM0])[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[DIR_PM0])[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[DIR_M0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_M0M])[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[DIR_M0M])[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[DIR_P0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_P0P])[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[DIR_P0P])[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[DIR_M0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_M0P])[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[DIR_M0P])[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[DIR_P0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_P0M])[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[DIR_P0M])[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[DIR_0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0MM])[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[DIR_0MM])[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[DIR_0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0PP])[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[DIR_0PP])[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[DIR_0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0MP])[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[DIR_0MP])[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[DIR_0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_0PM])[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[DIR_0PM])[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[DIR_MMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MMM])[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[DIR_MMM])[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[DIR_PPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PPP])[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[DIR_PPP])[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[DIR_MMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MMP])[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[DIR_MMP])[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[DIR_PPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PPM])[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[DIR_PPM])[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[DIR_MPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MPM])[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[DIR_MPM])[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[DIR_PMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PMP])[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[DIR_PMP])[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[DIR_MPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_MPP])[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[DIR_MPP])[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[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__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 long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //! The velocity boundary condition is executed in the following steps
-   //!
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
-   //!
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local velocities
-      //!
-      real VeloX = velocityX[nodeIndex];
-      real VeloY = velocityY[nodeIndex];
-      real VeloZ = velocityZ[nodeIndex];
-
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local subgrid distances (q's)
-      //!
-      SubgridDistances27 subgridD;
-      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
-     
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      unsigned int KQK  = subgridDistanceIndices[nodeIndex];
-      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 distributions
-      //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_000])[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); 
-    
-      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, distribution, numberOfLBnodes, !isEvenTimestep);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Update distributions with subgrid distance (q) between zero and one
-      real feq, q, velocityLB, velocityBC;
-      q = (subgridD.q[DIR_P00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
-      {
-         velocityLB = vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = VeloX;
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, omega, drho, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_M00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = -VeloX;
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, omega, drho, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = VeloY;
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, omega, drho, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = -VeloY;
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, omega, drho, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_00P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = VeloZ;
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, omega, drho, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_00M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = -VeloZ;
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, omega, drho, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX + VeloY;
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX - VeloY;
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX - VeloY;
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX + VeloY;
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX + VeloZ;
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX - VeloZ;
-         (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX - VeloZ;
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX + VeloZ;
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloY + VeloZ;
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloY - VeloZ;
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloY - VeloZ;
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloY + VeloZ;
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, omega, drho, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX + VeloY + VeloZ;
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX - VeloY - VeloZ;
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX + VeloY - VeloZ;
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX - VeloY + VeloZ;
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX - VeloY + VeloZ;
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX + VeloY - VeloZ;
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX - VeloY - VeloZ;
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, omega, drho, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX + VeloY + VeloZ;
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, omega, drho, velocityBC, c1o216);
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDeviceCompZeroPress1h27(
-    int inx,
-    int iny,
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes,
-    real om1, 
-    real Phi,
-    real angularVelocity,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* coordX,
-    real* coordY,
-    real* coordZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      //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)
-		////////////////////////////////////////////////////////////////////////////////
-		real VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k];
-		real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*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)
-		////////////////////////////////////////////////////////////////////////////////////
-		//Ship
-		real coord0X = 281.125f;//7.5f;
-		real coord0Y = 388.125f;//7.5f;
-		real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y);
-		real uy =   angularVelocity * (coordX[k_Q[k]] - coord0X);
-		real VeloXpur=VeloX;
-		real VeloYpur=VeloY;
-		VeloX-=ux;
-		VeloY-=uy;
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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];
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  real vx1, vx2, vx3, drho, feq, q, cu_sq;
-	  ///////// equilibrium BC
-	  cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY);
-	  VeloXpur*=-c1o1;
-	  VeloYpur*=-c1o1;
-	  vx1=VeloX;
-	  vx2=VeloY;
-	  vx3=c0o1;
-	  drho=c0o1;
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho+c3o1*( VeloXpur        )+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse]= feq - c1o216 * drho;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void LB_BC_Vel_West_27(
-    int nx, 
-    int ny, 
-    int nz, 
-    int itz, 
-    unsigned int* bcMatD, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* DD, 
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep, 
-    real u0x, 
-    unsigned int grid_nx, 
-    unsigned int grid_ny, 
-    real om) 
-{
-   //thread-index
-   unsigned int ity = blockIdx.x;
-   unsigned int itx = threadIdx.x;
-
-   unsigned int  k, nxny;                   // Zugriff auf arrays im device
-
-   unsigned int  x = itx + STARTOFFX;  // Globaler x-Index 
-   unsigned int  y = ity + STARTOFFY;  // Globaler y-Index 
-   unsigned int  z = itz + STARTOFFZ;  // Globaler z-Index 
-
-   k = nx*(ny*z + y) + x;
-   nxny = nx*ny;
-   unsigned int k1 = k+nxny;
-
-   if( bcMatD[k] == GEO_VELO )
-   {
-      Distributions27 D;
-      if (isEvenTimestep==true)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int kzero= k;
-      unsigned int ke   = k;
-      unsigned int kw   = neighborX[k];
-      unsigned int kn   = k;
-      unsigned int ks   = neighborY[k];
-      unsigned int kt   = k;
-      unsigned int kb   = neighborZ[k];
-      unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = k;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = k;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = k;
-      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 = k;
-      unsigned int kbsw = neighborZ[ksw];
-      //unsigned int kzero= k;
-      //unsigned int ke   = k;
-      //unsigned int kw   = k + 1;
-      //unsigned int kn   = k;
-      //unsigned int ks   = k + nx;
-      //unsigned int kt   = k;
-      //unsigned int kb   = k + nxny;
-      //unsigned int ksw  = k + nx + 1;
-      //unsigned int kne  = k;
-      //unsigned int kse  = k + nx;
-      //unsigned int knw  = k + 1;
-      //unsigned int kbw  = k + nxny + 1;
-      //unsigned int kte  = k;
-      //unsigned int kbe  = k + nxny;
-      //unsigned int ktw  = k + 1;
-      //unsigned int kbs  = k + nxny + nx;
-      //unsigned int ktn  = k;
-      //unsigned int kbn  = k + nxny;
-      //unsigned int kts  = k + nx;
-      //unsigned int ktse = k + nx;
-      //unsigned int kbnw = k + nxny + 1;
-      //unsigned int ktnw = k + 1;
-      //unsigned int kbse = k + nxny + nx;
-      //unsigned int ktsw = k + nx + 1;
-      //unsigned int kbne = k + nxny;
-      //unsigned int ktne = k;
-      //unsigned int kbsw = k + nxny + nx + 1;
-      ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int k1zero= k1;
-      unsigned int k1e   = k1;
-      unsigned int k1w   = neighborX[k1];
-      unsigned int k1n   = k1;
-      unsigned int k1s   = neighborY[k1];
-      unsigned int k1t   = k1;
-      unsigned int k1b   = neighborZ[k1];
-      unsigned int k1sw  = neighborY[k1w];
-      unsigned int k1ne  = k1;
-      unsigned int k1se  = k1s;
-      unsigned int k1nw  = k1w;
-      unsigned int k1bw  = neighborZ[k1w];
-      unsigned int k1te  = k1;
-      unsigned int k1be  = k1b;
-      unsigned int k1tw  = k1w;
-      unsigned int k1bs  = neighborZ[k1s];
-      unsigned int k1tn  = k1;
-      unsigned int k1bn  = k1b;
-      unsigned int k1ts  = k1s;
-      unsigned int k1tse = k1s;
-      unsigned int k1bnw = k1bw;
-      unsigned int k1tnw = k1w;
-      unsigned int k1bse = k1bs;
-      unsigned int k1tsw = k1sw;
-      unsigned int k1bne = k1b;
-      unsigned int k1tne = k1;
-      unsigned int k1bsw = neighborZ[k1sw];
-      //unsigned int k1zero= k1;
-      //unsigned int k1e   = k1;
-      //unsigned int k1w   = k1 + 1;
-      //unsigned int k1n   = k1;
-      //unsigned int k1s   = k1 + nx;
-      //unsigned int k1t   = k1;
-      //unsigned int k1b   = k1 + nxny;
-      //unsigned int k1sw  = k1 + nx + 1;
-      //unsigned int k1ne  = k1;
-      //unsigned int k1se  = k1 + nx;
-      //unsigned int k1nw  = k1 + 1;
-      //unsigned int k1bw  = k1 + nxny + 1;
-      //unsigned int k1te  = k1;
-      //unsigned int k1be  = k1 + nxny;
-      //unsigned int k1tw  = k1 + 1;
-      //unsigned int k1bs  = k1 + nxny + nx;
-      //unsigned int k1tn  = k1;
-      //unsigned int k1bn  = k1 + nxny;
-      //unsigned int k1ts  = k1 + nx;
-      //unsigned int k1tse = k1 + nx;
-      //unsigned int k1bnw = k1 + nxny + 1;
-      //unsigned int k1tnw = k1 + 1;
-      //unsigned int k1bse = k1 + nxny + nx;
-      //unsigned int k1tsw = k1 + nx + 1;
-      //unsigned int k1bne = k1 + nxny;
-      //unsigned int k1tne = k1;
-      //unsigned int k1bsw = k1 + nxny + nx + 1;
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[k1e   ];
-      f1_E    = (D.f[DIR_M00])[k1w   ];
-      f1_S    = (D.f[DIR_0P0])[k1n   ];
-      f1_N    = (D.f[DIR_0M0])[k1s   ];
-      f1_B    = (D.f[DIR_00P])[k1t   ];
-      f1_T    = (D.f[DIR_00M])[k1b   ];
-      f1_SW   = (D.f[DIR_PP0])[k1ne  ];
-      f1_NE   = (D.f[DIR_MM0])[k1sw  ];
-      f1_NW   = (D.f[DIR_PM0])[k1se  ];
-      f1_SE   = (D.f[DIR_MP0])[k1nw  ];
-      f1_BW   = (D.f[DIR_P0P])[k1te  ];
-      f1_TE   = (D.f[DIR_M0M])[k1bw  ];
-      f1_TW   = (D.f[DIR_P0M])[k1be  ];
-      f1_BE   = (D.f[DIR_M0P])[k1tw  ];
-      f1_BS   = (D.f[DIR_0PP])[k1tn  ];
-      f1_TN   = (D.f[DIR_0MM])[k1bs  ];
-      f1_TS   = (D.f[DIR_0PM])[k1bn  ];
-      f1_BN   = (D.f[DIR_0MP])[k1ts  ];
-      f1_ZERO = (D.f[DIR_000])[k1zero];
-      f1_BSW  = (D.f[DIR_PPP])[k1tne ];
-      f1_BNE  = (D.f[DIR_MMP])[k1tsw ];
-      f1_BNW  = (D.f[DIR_PMP])[k1tse ];
-      f1_BSE  = (D.f[DIR_MPP])[k1tnw ];
-      f1_TSW  = (D.f[DIR_PPM])[k1bne ];
-      f1_TNE  = (D.f[DIR_MMM])[k1bsw ];
-      f1_TNW  = (D.f[DIR_PMM])[k1bse ];
-      f1_TSE  = (D.f[DIR_MPM])[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();
-
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real drho = drho1;
-      real  vx1 = c0o1;
-      real  vx2 = c0o1;
-      real  vx3 = u0x;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-      (D.f[DIR_000])[kzero] =   c8o27* (drho-cu_sq);
-      (D.f[DIR_P00])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      (D.f[DIR_M00])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      (D.f[DIR_0P0])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      (D.f[DIR_0M0])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      (D.f[DIR_00P])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      (D.f[DIR_00M])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      (D.f[DIR_PP0])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      (D.f[DIR_MM0])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      (D.f[DIR_PM0])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      (D.f[DIR_MP0])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      (D.f[DIR_P0P])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      (D.f[DIR_M0M])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      (D.f[DIR_P0M])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      (D.f[DIR_M0P])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      (D.f[DIR_0PP])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      (D.f[DIR_0MM])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      (D.f[DIR_0PM])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      (D.f[DIR_0MP])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      (D.f[DIR_PPP])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      (D.f[DIR_MMM])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      (D.f[DIR_PPM])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      (D.f[DIR_MMP])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      (D.f[DIR_PMP])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      (D.f[DIR_MPM])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      (D.f[DIR_PMM])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      (D.f[DIR_MPP])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-   }
-   __syncthreads();
-}          
-//////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDevPlainBB27(
-    real* velocityX,
-    real* velocityY,
-    real* velocityZ,
-    real* distributions,
-    int* subgridDistanceIndices,
-    real* subgridDistances,
-    uint numberOfBCnodes,
-    uint* neighborX,
-    uint* neighborY,
-    uint* neighborZ,
-    unsigned long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //! The velocity boundary condition is executed in the following steps
-   //!
-   ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-   //!
-   const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-   // run for all indices in size of boundary condition (numberOfBCnodes)
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local velocities
-      //!
-      real VeloX = velocityX[nodeIndex];
-      real VeloY = velocityY[nodeIndex];
-      real VeloZ = velocityZ[nodeIndex];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local subgrid distances (q's)
-      //!
-      SubgridDistances27 subgridD;
-      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      uint indexOfBCnode = subgridDistanceIndices[nodeIndex];
-      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];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local distributions
-      //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_P00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_M00])[kw  ]=f_E   + c4o9  * (-VeloX);
-      q = (subgridD.q[DIR_M00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_P00])[ke  ]=f_W   + c4o9  * ( VeloX);
-      q = (subgridD.q[DIR_0P0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0M0])[ks  ]=f_N   + c4o9  * (-VeloY);
-      q = (subgridD.q[DIR_0M0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0P0])[kn  ]=f_S   + c4o9  * ( VeloY);
-      q = (subgridD.q[DIR_00P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_00M])[kb  ]=f_T   + c4o9  * (-VeloZ);
-      q = (subgridD.q[DIR_00M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_00P])[kt  ]=f_B   + c4o9  * ( VeloZ);
-      q = (subgridD.q[DIR_PP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MM0])[ksw ]=f_NE  + c1o9  * (-VeloX - VeloY);
-      q = (subgridD.q[DIR_MM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PP0])[kne ]=f_SW  + c1o9  * ( VeloX + VeloY);
-      q = (subgridD.q[DIR_PM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MP0])[knw ]=f_SE  + c1o9  * (-VeloX + VeloY);
-      q = (subgridD.q[DIR_MP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PM0])[kse ]=f_NW  + c1o9  * ( VeloX - VeloY);
-      q = (subgridD.q[DIR_P0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_M0M])[kbw ]=f_TE  + c1o9  * (-VeloX - VeloZ);
-      q = (subgridD.q[DIR_M0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_P0P])[kte ]=f_BW  + c1o9  * ( VeloX + VeloZ);
-      q = (subgridD.q[DIR_P0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_M0P])[ktw ]=f_BE  + c1o9  * (-VeloX + VeloZ);
-      q = (subgridD.q[DIR_M0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_P0M])[kbe ]=f_TW  + c1o9  * ( VeloX - VeloZ);
-      q = (subgridD.q[DIR_0PP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0MM])[kbs ]=f_TN  + c1o9  * (-VeloY - VeloZ);
-      q = (subgridD.q[DIR_0MM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0PP])[ktn ]=f_BS  + c1o9  * ( VeloY + VeloZ);
-      q = (subgridD.q[DIR_0PM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0MP])[kts ]=f_BN  + c1o9  * (-VeloY + VeloZ);
-      q = (subgridD.q[DIR_0MP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_0PM])[kbn ]=f_TS  + c1o9  * ( VeloY - VeloZ);
-      q = (subgridD.q[DIR_PPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MMM])[kbsw]=f_TNE + c1o36 * (-VeloX - VeloY - VeloZ);
-      q = (subgridD.q[DIR_MMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PPP])[ktne]=f_BSW + c1o36 * ( VeloX + VeloY + VeloZ);
-      q = (subgridD.q[DIR_PPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MMP])[ktsw]=f_BNE + c1o36 * (-VeloX - VeloY + VeloZ);
-      q = (subgridD.q[DIR_MMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PPM])[kbne]=f_TSW + c1o36 * ( VeloX + VeloY - VeloZ);
-      q = (subgridD.q[DIR_PMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MPM])[kbnw]=f_TSE + c1o36 * (-VeloX + VeloY - VeloZ);
-      q = (subgridD.q[DIR_MPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PMP])[ktse]=f_BNW + c1o36 * ( VeloX - VeloY + VeloZ);
-      q = (subgridD.q[DIR_PMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_MPP])[ktnw]=f_BSE + c1o36 * (-VeloX + VeloY + VeloZ);
-      q = (subgridD.q[DIR_MPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[DIR_PMM])[kbse]=f_TNW + c1o36 * ( VeloX - VeloY - VeloZ);
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDevCouette27(
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD,
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-	  ////////////////////////////////////////////////////////////////////////////////
-	  real VeloX = vx[k];
-	  real VeloY = vy[k];
-	  real VeloZ = vz[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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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 f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[kbnw ];
-	  ////////////////////////////////////////////////////////////////////////////////
-
-	  ////////////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  ///////               FlowDirection Y !!!!!!!!!!                                                           ///////////////////////////////////
-	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //calculate velocity
-	  //real vx1 = ((f_TNE-f_BSW)+(f_BSE-f_TNW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)) + (((f_NE-f_SW)+(f_TE-f_BW))+((f_SE-f_NW)+(f_BE-f_TW))) + (f_E-f_W);
-	  real vx2 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_BNE-f_TSW)+(f_BNW-f_TSE)) + (((f_NE-f_SW)+(f_TN-f_BS))+((f_BN-f_TS)+(f_NW-f_SE))) + (f_N-f_S);
-	  //real vx3 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_TSW-f_BNE)+(f_TSE-f_BNW)) + (((f_TE-f_BW)+(f_TN-f_BS))+((f_TW-f_BE)+(f_TS-f_BN))) + (f_T-f_B);
-	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //constant
-	  real on=c0o1;//c1o2;//one;
-	  real ms=-c6o1;
-	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //2nd order moment
-	  real kxxMyyFromfcNEQ = c0o1;//-c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2));		//all DIR_P00+DIR_M00 minus all DIR_0P0+DIR_0M0 (no combinations of xy left)
-
-	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //set distributions
-      real q;
-      q = q_dirE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_M00])[kw  ]=f_E   + ms*c2o27  * VeloX;	
-      q = q_dirW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_P00])[ke  ]=f_W   - ms*c2o27  * VeloX;	
-      q = q_dirN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_0M0])[ks  ]=f_N   + ms*c2o27  * VeloY;	
-      q = q_dirS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_0P0])[kn  ]=f_S   - ms*c2o27  * VeloY;	
-	  q = q_dirT[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_00M])[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[DIR_00P])[kt  ]=f_B   - ms*c2o27  * VeloZ;
-      q = q_dirNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_MM0])[ksw ]=f_NE  + ms*c1o54  * VeloX + ms*c1o54  * VeloY;
-	  q = q_dirSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_PP0])[kne ]=f_SW  - ms*c1o54  * VeloX - ms*c1o54  * VeloY;
-	  q = q_dirSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_MP0])[knw ]=f_SE  + ms*c1o54  * VeloX - ms*c1o54  * VeloY;
-	  q = q_dirNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_PM0])[kse ]=f_NW  - ms*c1o54  * VeloX + ms*c1o54  * VeloY;
-	  q = q_dirTE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_M0M])[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[DIR_P0P])[kte ]=f_BW  - ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
-	  q = q_dirBE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_M0P])[ktw ]=f_BE  + ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
-	  q = q_dirTW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[ktn ]=f_BS  - ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
-	  q = q_dirBN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_0MP])[kts ]=f_BN  + ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
-	  q = q_dirTS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[ktne]=f_BSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirBNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_MMP])[ktsw]=f_BNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirTSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[ktse]=f_BNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirBSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_MPP])[ktnw]=f_BSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirTNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[DIR_PMM])[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[DIR_M00])[kw  ]=f_E   + ms*c2over27  * VeloX;	
-   //   q = q_dirW[k];	if (q>=zero && q<=one)	(D.f[DIR_P00])[ke  ]=f_W   - ms*c2over27  * VeloX;	
-   //   q = q_dirN[k];	if (q>=zero && q<=one)	(D.f[DIR_0M0])[ks  ]=f_N   + ms*c2over27  * VeloY;	
-   //   q = q_dirS[k];	if (q>=zero && q<=one)	(D.f[DIR_0P0])[kn  ]=f_S   - ms*c2over27  * VeloY;	
-	  //q = q_dirT[k];	if (q>=zero && q<=one)	(D.f[DIR_00M])[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[DIR_00P])[kt  ]=f_B   - ms*c2over27  * VeloZ;
-   //   q = q_dirNE[k];	if (q>=zero && q<=one)	(D.f[DIR_MM0])[ksw ]=f_NE  + ms*c1over54  * VeloX + ms*c1over54  * VeloY;
-	  //q = q_dirSW[k];	if (q>=zero && q<=one)	(D.f[DIR_PP0])[kne ]=f_SW  - ms*c1over54  * VeloX - ms*c1over54  * VeloY;
-	  //q = q_dirSE[k];	if (q>=zero && q<=one)	(D.f[DIR_MP0])[knw ]=f_SE  + ms*c1over54  * VeloX - ms*c1over54  * VeloY;
-	  //q = q_dirNW[k];	if (q>=zero && q<=one)	(D.f[DIR_PM0])[kse ]=f_NW  - ms*c1over54  * VeloX + ms*c1over54  * VeloY;
-	  //q = q_dirTE[k];	if (q>=zero && q<=one)	(D.f[DIR_M0M])[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[DIR_P0P])[kte ]=f_BW  - ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
-	  //q = q_dirBE[k];	if (q>=zero && q<=one)	(D.f[DIR_M0P])[ktw ]=f_BE  + ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
-	  //q = q_dirTW[k];	if (q>=zero && q<=one)	(D.f[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[ktn ]=f_BS  - ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
-	  //q = q_dirBN[k];	if (q>=zero && q<=one)	(D.f[DIR_0MP])[kts ]=f_BN  + ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
-	  //q = q_dirTS[k];	if (q>=zero && q<=one)	(D.f[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[ktne]=f_BSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirBNE[k];	if (q>=zero && q<=one)	(D.f[DIR_MMP])[ktsw]=f_BNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirTSW[k];	if (q>=zero && q<=one)	(D.f[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[ktse]=f_BNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirBSE[k];	if (q>=zero && q<=one)	(D.f[DIR_MPP])[ktnw]=f_BSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirTNW[k];	if (q>=zero && q<=one)	(D.f[DIR_PMM])[kbse]=f_TNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDev1h27(
-    int inx,
-    int iny,
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1,
-    real Phi,
-    real angularVelocity,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* coordX,
-    real* coordY,
-    real* coordZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-	Distributions27 D;
-	if (isEvenTimestep==true)
-	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-	} 
-	else
-	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-	}
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if(k<numberOfBCnodes)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		real VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k];
-		real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*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)
-		////////////////////////////////////////////////////////////////////////////////////
-		//Ship
-		real coord0X = 281.125f;//7.5f;
-		real coord0Y = 388.125f;//7.5f;
-		real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y);
-		real uy =   angularVelocity * (coordX[k_Q[k]] - coord0X);
-		real VeloXpur=VeloX;
-		real VeloYpur=VeloY;
-		VeloX-=ux;
-		VeloY-=uy;
-		////////////////////////////////////////////////////////////////////////////////
-		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[DIR_P00 * numberOfBCnodes];
-		q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-		q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-		q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-		q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-		q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-		q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-		q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-		q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-		q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-		q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-		q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-		q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-		q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-		q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-		q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-		q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-		q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-		q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-		q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-		q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-		q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-		q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-		q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-		q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-		q_dirBNW = &QQ[DIR_MPM * 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];
-		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];
-		//unsigned int nxny = nx*ny;
-		//unsigned int kzero= KQK;
-		//unsigned int ke   = KQK;
-		//unsigned int kw   = KQK + 1;
-		//unsigned int kn   = KQK;
-		//unsigned int ks   = KQK + nx;
-		//unsigned int kt   = KQK;
-		//unsigned int kb   = KQK + nxny;
-		//unsigned int ksw  = KQK + nx + 1;
-		//unsigned int kne  = KQK;
-		//unsigned int kse  = KQK + nx;
-		//unsigned int knw  = KQK + 1;
-		//unsigned int kbw  = KQK + nxny + 1;
-		//unsigned int kte  = KQK;
-		//unsigned int kbe  = KQK + nxny;
-		//unsigned int ktw  = KQK + 1;
-		//unsigned int kbs  = KQK + nxny + nx;
-		//unsigned int ktn  = KQK;
-		//unsigned int kbn  = KQK + nxny;
-		//unsigned int kts  = KQK + nx;
-		//unsigned int ktse = KQK + nx;
-		//unsigned int kbnw = KQK + nxny + 1;
-		//unsigned int ktnw = KQK + 1;
-		//unsigned int kbse = KQK + nxny + nx;
-		//unsigned int ktsw = KQK + nx + 1;
-		//unsigned int kbne = KQK + nxny;
-		//unsigned int ktne = KQK;
-		//unsigned int kbsw = KQK + nxny + nx + 1;
-		////////////////////////////////////////////////////////////////////////////////
-		//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[DIR_P00])[ke   ];
-		//f_E    = (D.f[DIR_M00])[kw   ];
-		//f_S    = (D.f[DIR_0P0])[kn   ];
-		//f_N    = (D.f[DIR_0M0])[ks   ];
-		//f_B    = (D.f[DIR_00P])[kt   ];
-		//f_T    = (D.f[DIR_00M])[kb   ];
-		//f_SW   = (D.f[DIR_PP0])[kne  ];
-		//f_NE   = (D.f[DIR_MM0])[ksw  ];
-		//f_NW   = (D.f[DIR_PM0])[kse  ];
-		//f_SE   = (D.f[DIR_MP0])[knw  ];
-		//f_BW   = (D.f[DIR_P0P])[kte  ];
-		//f_TE   = (D.f[DIR_M0M])[kbw  ];
-		//f_TW   = (D.f[DIR_P0M])[kbe  ];
-		//f_BE   = (D.f[DIR_M0P])[ktw  ];
-		//f_BS   = (D.f[DIR_0PP])[ktn  ];
-		//f_TN   = (D.f[DIR_0MM])[kbs  ];
-		//f_TS   = (D.f[DIR_0PM])[kbn  ];
-		//f_BN   = (D.f[DIR_0MP])[kts  ];
-		//f_BSW  = (D.f[DIR_PPP])[ktne ];
-		//f_BNE  = (D.f[DIR_MMP])[ktsw ];
-		//f_BNW  = (D.f[DIR_PMP])[ktse ];
-		//f_BSE  = (D.f[DIR_MPP])[ktnw ];
-		//f_TSW  = (D.f[DIR_PPM])[kbne ];
-		//f_TNE  = (D.f[DIR_MMM])[kbsw ];
-		//f_TNW  = (D.f[DIR_PMM])[kbse ];
-		//f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-
-
-		//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); 
-
-		//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); 
-
-		//cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-		//////////////////////////////////////////////////////////////////////////
-		if (isEvenTimestep==false)
-		{
-			D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-			D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-			D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-			D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-			D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-			D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-			D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-			D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-			D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-			D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-			D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-			D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-			D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-			D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-			D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-			D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-			D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-			D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-			D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-			D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-			D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-			D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-			D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-			D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-			D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-			D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-			D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-		} 
-		else
-		{
-			D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-			D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-			D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-			D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-			D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-			D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-			D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-			D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-			D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-			D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-			D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-			D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-			D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-			D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-			D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-			D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-			D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-			D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-			D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-			D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-			D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-			D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-			D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-			D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-			D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-			D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-			D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-		}
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//Test
-		//(D.f[DIR_000])[k]=c1o10;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-		//ToDo anders Klammern
-
-		//q = q_dirE[k];
-		//if (q>=zero && q<=one)
-		//{
-		//	feq=c2over27* (drho/*+three*( vx1        )*/+c9over2*( vx1        )*( vx1        )-cu_sq); 
-		//	(D.f[DIR_M00])[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[DIR_M00])[kw]=zero;
-		//}
-
-		//q = q_dirW[k];
-		//if (q>=zero && q<=one)
-		//{
-		//	feq=c2over27* (drho/*+three*(-vx1        )*/+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
-		//	(D.f[DIR_P00])[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[DIR_P00])[ke]=zero;
-		//}
-
-		//q = q_dirN[k];
-		//if (q>=zero && q<=one)
-		//{
-		//	feq=c2over27* (drho/*+three*(    vx2     )*/+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
-		//	(D.f[DIR_0M0])[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[DIR_0M0])[ks]=zero;
-		//}
-
-		//q = q_dirS[k];
-		//if (q>=zero && q<=one)
-		//{
-		//	feq=c2over27* (drho/*+three*(   -vx2     )*/+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
-		//	(D.f[DIR_0P0])[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[DIR_0P0])[kn]=zero;
-		//}
-
-		//q = q_dirT[k];
-		//if (q>=zero && q<=one)
-		//{
-		//	feq=c2over27* (drho/*+three*(         vx3)*/+c9over2*(         vx3)*(         vx3)-cu_sq); 
-		//	(D.f[DIR_00M])[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[DIR_00M])[kb]=one;
-		//}
-
-		//q = q_dirB[k];
-		//if (q>=zero && q<=one)
-		//{
-		//	feq=c2over27* (drho/*+three*(        -vx3)*/+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
-		//	(D.f[DIR_00P])[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[DIR_00P])[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[DIR_MM0])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-		//}
-
-		///////// equilibrium BC
-		cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY);
-		VeloXpur*=-c1o1;
-		VeloYpur*=-c1o1;
-		vx3=c0o1;
-		drho=c0o1;
-		q = q_dirE[k];
-		if (q>=c0o1 && q<=c1o1)
-		{
-			feq=c2o27* (drho+c3o1*( VeloXpur        )+c9o2*( VeloX        )*( VeloX        )-cu_sq); 
-			(D.f[DIR_M00])[kw]=feq;
-			//(D.f[DIR_M00])[kw]=zero;
-		}
-
-		q = q_dirW[k];
-		if (q>=c0o1 && q<=c1o1)
-		{
-			feq=c2o27* (drho+c3o1*(-VeloXpur        )+c9o2*(-VeloX        )*(-VeloX        )-cu_sq); 
-			(D.f[DIR_P00])[ke]=feq;
-			//(D.f[DIR_P00])[ke]=zero;
-		}
-
-		q = q_dirN[k];
-		if (q>=c0o1 && q<=c1o1)
-		{
-			feq=c2o27* (drho+c3o1*(    VeloYpur     )+c9o2*(     VeloY    )*(     VeloY    )-cu_sq); 
-			(D.f[DIR_0M0])[ks]=feq;
-			//(D.f[DIR_0M0])[ks]=zero;
-		}
-
-		q = q_dirS[k];
-		if (q>=c0o1 && q<=c1o1)
-		{
-			feq=c2o27* (drho+c3o1*(   -VeloYpur     )+c9o2*(    -VeloY    )*(    -VeloY    )-cu_sq); 
-			(D.f[DIR_0P0])[kn]=feq;
-			//(D.f[DIR_0P0])[kn]=zero;
-		}
-
-		q = q_dirT[k];
-		if (q>=c0o1 && q<=c1o1)
-		{
-			feq=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
-			(D.f[DIR_00M])[kb]=feq;
-			//(D.f[DIR_00M])[kb]=one;
-		}
-
-		q = q_dirB[k];
-		if (q>=c0o1 && q<=c1o1)
-		{
-			feq=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-			(D.f[DIR_00P])[kt]=feq;
-			//(D.f[DIR_00P])[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[DIR_MM0])[ksw]=feq;
-			//(D.f[DIR_MM0])[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[DIR_PP0])[kne]=feq;
-			//(D.f[DIR_PP0])[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[DIR_MP0])[knw]=feq;
-			//(D.f[DIR_MP0])[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[DIR_PM0])[kse]=feq;
-			//(D.f[DIR_PM0])[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[DIR_M0M])[kbw]=feq;
-			//(D.f[DIR_M0M])[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[DIR_P0P])[kte]=feq;
-			//(D.f[DIR_P0P])[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[DIR_M0P])[ktw]=feq;
-			//(D.f[DIR_M0P])[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[DIR_P0M])[kbe]=feq;
-			//(D.f[DIR_P0M])[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[DIR_0MM])[kbs]=feq;
-			//(D.f[DIR_0MM])[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[DIR_0PP])[ktn]=feq;
-			//(D.f[DIR_0PP])[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[DIR_0MP])[kts]=feq;
-			//(D.f[DIR_0MP])[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[DIR_0PM])[kbn]=feq;
-			//(D.f[DIR_0PM])[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[DIR_MMM])[kbsw]=feq;
-			//(D.f[DIR_MMM])[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[DIR_PPP])[ktne]=feq;
-			//(D.f[DIR_PPP])[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[DIR_MMP])[ktsw]=feq;
-			//(D.f[DIR_MMP])[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[DIR_PPM])[kbne]=feq;
-			//(D.f[DIR_PPM])[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[DIR_MPM])[kbnw]=feq;
-			//(D.f[DIR_MPM])[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[DIR_PMP])[ktse]=feq;
-			//(D.f[DIR_PMP])[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[DIR_MPP])[ktnw]=feq;
-			//(D.f[DIR_MPP])[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[DIR_PMM])[kbse]=feq;
-			//(D.f[DIR_PMM])[kbse]=zero;
-		}
-	
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__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 long long numberOfLBnodes,
-    bool isEvenTimestep)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //! The velocity boundary condition is executed in the following steps
-   //!
-    ////////////////////////////////////////////////////////////////////////////////
-    //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-    //!
-    const unsigned nodeIndex = getNodeIndex();
-
-   //////////////////////////////////////////////////////////////////////////
-   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
-   //!
-   if(nodeIndex < 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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local velocities
-      //!
-      real VeloX = velocityX[nodeIndex];
-      real VeloY = velocityY[nodeIndex];
-      real VeloZ = velocityZ[nodeIndex];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local subgrid distances (q's)
-      //!
-      SubgridDistances27 subgridD;
-      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
-      
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set neighbor indices (necessary for indirect addressing)
-      //!
-      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
-      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  = indexOfBCnode;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = indexOfBCnode;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = indexOfBCnode;
-      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 = indexOfBCnode;
-      unsigned int kbsw = neighborZ[ksw];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Set local distributions
-      //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - 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[DIR_000])[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); 
-
-      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);
-
-      ////////////////////////////////////////////////////////////////////////////////
-      //! - Update distributions with subgrid distance (q) between zero and one
-      //!
-      real feq, q, velocityLB, velocityBC;
-      q = (subgridD.q[DIR_P00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
-      {
-         velocityLB = vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = VeloX;
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_M00])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = -VeloX;
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = VeloY;
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = -VeloY;
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_00P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = VeloZ;
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_00M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
-         velocityBC = -VeloZ;
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27);
-      }
-
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX + VeloY;
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX - VeloY;
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX - VeloY;
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX + VeloY;
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX + VeloZ;
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX - VeloZ;
-         (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloX - VeloZ;
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloX + VeloZ;
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloY + VeloZ;
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloY - VeloZ;
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = VeloY - VeloZ;
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
-         velocityBC = -VeloY + VeloZ;
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54);
-      }
-
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX + VeloY + VeloZ;
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX - VeloY - VeloZ;
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX + VeloY - VeloZ;
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX - VeloY + VeloZ;
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX - VeloY + VeloZ;
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX + VeloY - VeloZ;
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = vx1 - vx2 - vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = VeloX - VeloY - VeloZ;
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216);
-      }
-
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         velocityLB = -vx1 + vx2 + vx3;
-         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
-         velocityBC = -VeloX + VeloY + VeloZ;
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216);
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void QVelDevice27(
-    int inx,
-    int iny,
-    real* vx,
-    real* vy,
-    real* vz,
-    real* DD, 
-    int* k_Q, 
-    real* QQ,
-    unsigned int numberOfBCnodes, 
-    real om1, 
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned long long numberOfLBnodes, 
-    bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      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)
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * 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];
-      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];
-      //unsigned int nxny = nx*ny;
-      //unsigned int kzero= KQK;
-      //unsigned int ke   = KQK;
-      //unsigned int kw   = KQK + 1;
-      //unsigned int kn   = KQK;
-      //unsigned int ks   = KQK + nx;
-      //unsigned int kt   = KQK;
-      //unsigned int kb   = KQK + nxny;
-      //unsigned int ksw  = KQK + nx + 1;
-      //unsigned int kne  = KQK;
-      //unsigned int kse  = KQK + nx;
-      //unsigned int knw  = KQK + 1;
-      //unsigned int kbw  = KQK + nxny + 1;
-      //unsigned int kte  = KQK;
-      //unsigned int kbe  = KQK + nxny;
-      //unsigned int ktw  = KQK + 1;
-      //unsigned int kbs  = KQK + nxny + nx;
-      //unsigned int ktn  = KQK;
-      //unsigned int kbn  = KQK + nxny;
-      //unsigned int kts  = KQK + nx;
-      //unsigned int ktse = KQK + nx;
-      //unsigned int kbnw = KQK + nxny + 1;
-      //unsigned int ktnw = KQK + 1;
-      //unsigned int kbse = KQK + nxny + nx;
-      //unsigned int ktsw = KQK + nx + 1;
-      //unsigned int kbne = KQK + nxny;
-      //unsigned int ktne = KQK;
-      //unsigned int kbsw = KQK + nxny + nx + 1;
-      ////////////////////////////////////////////////////////////////////////////////
-      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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-         
-
-      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); 
-
-      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);
-
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-      } 
-      else
-      {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[DIR_000])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-	  //ToDo anders Klammern
-
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        )-cu_sq); 
-         (D.f[DIR_M00])[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[DIR_M00])[kw]=zero;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-         (D.f[DIR_P00])[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[DIR_P00])[ke]=zero;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-         (D.f[DIR_0M0])[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[DIR_0M0])[ks]=zero;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         (D.f[DIR_0P0])[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[DIR_0P0])[kn]=zero;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3)-cu_sq); 
-         (D.f[DIR_00M])[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[DIR_00M])[kb]=one;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-         (D.f[DIR_00P])[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[DIR_00P])[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[DIR_MM0])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-      }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-__global__ void PropellerBC(
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* rho,
-    real* ux,
-    real* uy,
-    real* uz,
-    int* k_Q, 
-    unsigned int size_Prop,
-    unsigned long long numberOfLBnodes,
-    unsigned int* bcMatD,
-    real* DD,
-    bool EvenOrOdd)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<size_Prop)
-   {
-    ////////////////////////////////////////////////////////////////////////////////
-        Distributions27 D;
-        if (EvenOrOdd==true)
-        {
-			D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-			D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-			D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-			D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-			D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-			D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-			D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-			D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-			D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-			D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-			D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-			D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-			D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-			D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-			D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-			D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-			D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-			D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-			D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-			D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-			D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-			D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-			D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-			D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-			D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-			D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-			D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-        }
-        else
-        {
-			D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-			D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-			D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-			D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-			D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-			D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-			D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-			D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-			D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-			D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-			D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-			D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-			D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-			D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-			D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-			D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-			D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-			D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-			D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-			D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-			D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-			D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-			D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-			D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-			D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-			D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-			D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-        }
-        //////////////////////////////////////////////////////////////////////////
-		unsigned int KQK = k_Q[k];
-		unsigned int BC  = bcMatD[KQK];
-		if( (BC != GEO_SOLID) && (BC != GEO_VOID))
-		{		
-		//////////////////////////////////////////////////////////////////////////
-        real  vx1 = ux[k];
-        real  vx2 = uy[k];
-        real  vx3 = uz[k];
-        //real  vx1 = -c1o100;
-        //real  vx2 = zero;
-        //real  vx3 = zero;
-        //////////////////////////////////////////////////////////////////////////
-        //index
-        //////////////////////////////////////////////////////////////////////////
-		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 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[DIR_000])[kzero];
-		f_E   = (D.f[DIR_P00])[ke   ];
-		f_W   = (D.f[DIR_M00])[kw   ];
-		f_N   = (D.f[DIR_0P0])[kn   ];
-		f_S   = (D.f[DIR_0M0])[ks   ];
-		f_T   = (D.f[DIR_00P])[kt   ];
-		f_B   = (D.f[DIR_00M])[kb   ];
-		f_NE  = (D.f[DIR_PP0])[kne  ];
-		f_SW  = (D.f[DIR_MM0])[ksw  ];
-		f_SE  = (D.f[DIR_PM0])[kse  ];
-		f_NW  = (D.f[DIR_MP0])[knw  ];
-		f_TE  = (D.f[DIR_P0P])[kte  ];
-		f_BW  = (D.f[DIR_M0M])[kbw  ];
-		f_BE  = (D.f[DIR_P0M])[kbe  ];
-		f_TW  = (D.f[DIR_M0P])[ktw  ];
-		f_TN  = (D.f[DIR_0PP])[ktn  ];
-		f_BS  = (D.f[DIR_0MM])[kbs  ];
-		f_BN  = (D.f[DIR_0PM])[kbn  ];
-		f_TS  = (D.f[DIR_0MP])[kts  ];
-		f_TNE = (D.f[DIR_PPP])[ktne ];
-		f_BSW = (D.f[DIR_MMM])[kbsw ];
-		f_BNE = (D.f[DIR_PPM])[kbne ];
-		f_TSW = (D.f[DIR_MMP])[ktsw ];
-		f_TSE = (D.f[DIR_PMP])[ktse ];
-		f_BNW = (D.f[DIR_MPM])[kbnw ];
-		f_BSE = (D.f[DIR_PMM])[kbse ];
-		f_TNW = (D.f[DIR_MPP])[ktnw ];
-		//f_W    = (D.f[DIR_P00])[ke   ];
-		//f_E    = (D.f[DIR_M00])[kw   ];
-		//f_S    = (D.f[DIR_0P0])[kn   ];
-		//f_N    = (D.f[DIR_0M0])[ks   ];
-		//f_B    = (D.f[DIR_00P])[kt   ];
-		//f_T    = (D.f[DIR_00M])[kb   ];
-		//f_SW   = (D.f[DIR_PP0])[kne  ];
-		//f_NE   = (D.f[DIR_MM0])[ksw  ];
-		//f_NW   = (D.f[DIR_PM0])[kse  ];
-		//f_SE   = (D.f[DIR_MP0])[knw  ];
-		//f_BW   = (D.f[DIR_P0P])[kte  ];
-		//f_TE   = (D.f[DIR_M0M])[kbw  ];
-		//f_TW   = (D.f[DIR_P0M])[kbe  ];
-		//f_BE   = (D.f[DIR_M0P])[ktw  ];
-		//f_BS   = (D.f[DIR_0PP])[ktn  ];
-		//f_TN   = (D.f[DIR_0MM])[kbs  ];
-		//f_TS   = (D.f[DIR_0PM])[kbn  ];
-		//f_BN   = (D.f[DIR_0MP])[kts  ];
-		//f_BSW  = (D.f[DIR_PPP])[ktne ];
-		//f_TNE  = (D.f[DIR_MMM])[kbsw ];
-		//f_TSW  = (D.f[DIR_PPM])[kbne ];
-		//f_BNE  = (D.f[DIR_MMP])[ktsw ];
-		//f_BNW  = (D.f[DIR_PMP])[ktse ];
-		//f_TSE  = (D.f[DIR_MPM])[kbnw ];
-		//f_TNW  = (D.f[DIR_PMM])[kbse ];
-		//f_BSE  = (D.f[DIR_MPP])[ktnw ];
-		//////////////////////////////////////////////////////////////////////////////////
-		real vxo1, vxo2, vxo3, drho;
-		drho   =  /*zero;*/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 + f_ZERO; 
-
-		vxo1   =   (((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); 
-        
-
-		vxo2   =   ((-(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); 
-
-		vxo3   =   (((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 cusq=c3o2*(vxo1*vxo1+vxo2*vxo2+vxo3*vxo3);
-		//vx1 = vx1 * two - vxo1;
-		//vx2 = vx2 * two - vxo2;
-		//vx3 = vx3 * two - vxo3;
-		real cusq2=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-         //f_ZERO = ((one+drho) * (   c8over27 *(one+(-cusq2)))) - c8over27;
-         //f_E    = ((one+drho) * (   c2over27 *(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq2))) - c2over27 ;
-         //f_W    = ((one+drho) * (   c2over27 *(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq2))) - c2over27 ;
-         //f_N    = ((one+drho) * (   c2over27 *(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq2))) - c2over27 ;
-         //f_S    = ((one+drho) * (   c2over27 *(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq2))) - c2over27 ;
-         //f_T    = ((one+drho) * (   c2over27 *(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq2))) - c2over27 ;
-         //f_B    = ((one+drho) * (   c2over27 *(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq2))) - c2over27 ;
-         //f_NE   = ((one+drho) * (   c1over54 *(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq2))) - c1over54 ;
-         //f_SW   = ((one+drho) * (   c1over54 *(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq2))) - c1over54 ;
-         //f_SE   = ((one+drho) * (   c1over54 *(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq2))) - c1over54 ;
-         //f_NW   = ((one+drho) * (   c1over54 *(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq2))) - c1over54 ;
-         //f_TE   = ((one+drho) * (   c1over54 *(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq2))) - c1over54 ;
-         //f_BW   = ((one+drho) * (   c1over54 *(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq2))) - c1over54 ;
-         //f_BE   = ((one+drho) * (   c1over54 *(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq2))) - c1over54 ;
-         //f_TW   = ((one+drho) * (   c1over54 *(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq2))) - c1over54 ;
-         //f_TN   = ((one+drho) * (   c1over54 *(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq2))) - c1over54 ;
-         //f_BS   = ((one+drho) * (   c1over54 *(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq2))) - c1over54 ;
-         //f_BN   = ((one+drho) * (   c1over54 *(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq2))) - c1over54 ;
-         //f_TS   = ((one+drho) * (   c1over54 *(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq2))) - c1over54 ;
-         //f_TNE  = ((one+drho) * (   c1over216*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))) - c1over216;
-         //f_BSW  = ((one+drho) * (   c1over216*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))) - c1over216;
-         //f_BNE  = ((one+drho) * (   c1over216*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))) - c1over216;
-         //f_TSW  = ((one+drho) * (   c1over216*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))) - c1over216;
-         //f_TSE  = ((one+drho) * (   c1over216*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))) - c1over216;
-         //f_BNW  = ((one+drho) * (   c1over216*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))) - c1over216;
-         //f_BSE  = ((one+drho) * (   c1over216*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))) - c1over216;
-         //f_TNW  = ((one+drho) * (   c1over216*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))) - c1over216;
-         f_ZERO = f_ZERO + ((c1o1+drho) * (-  c8o27* (-cusq)																   +   c8o27* (-cusq2)));
-         f_E    = f_E    + ((c1o1+drho) * (-  c2o27* (c3o1*( vxo1          )+c9o2*( vxo1          )*( vxo1          )-cusq) +   c2o27* (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq2)));
-         f_W    = f_W    + ((c1o1+drho) * (-  c2o27* (c3o1*(-vxo1          )+c9o2*(-vxo1          )*(-vxo1          )-cusq) +   c2o27* (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq2)));
-         f_N    = f_N    + ((c1o1+drho) * (-  c2o27* (c3o1*(      vxo2     )+c9o2*(      vxo2     )*(      vxo2     )-cusq) +   c2o27* (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq2)));
-         f_S    = f_S    + ((c1o1+drho) * (-  c2o27* (c3o1*(     -vxo2     )+c9o2*(     -vxo2     )*(     -vxo2     )-cusq) +   c2o27* (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq2)));
-         f_T    = f_T    + ((c1o1+drho) * (-  c2o27* (c3o1*(           vxo3)+c9o2*(           vxo3)*(           vxo3)-cusq) +   c2o27* (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq2)));
-         f_B    = f_B    + ((c1o1+drho) * (-  c2o27* (c3o1*(          -vxo3)+c9o2*(          -vxo3)*(          -vxo3)-cusq) +   c2o27* (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq2)));
-         f_NE   = f_NE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1+vxo2     )+c9o2*( vxo1+vxo2     )*( vxo1+vxo2     )-cusq) +   c1o54* (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq2)));
-         f_SW   = f_SW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1-vxo2     )+c9o2*(-vxo1-vxo2     )*(-vxo1-vxo2     )-cusq) +   c1o54* (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq2)));
-         f_SE   = f_SE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1-vxo2     )+c9o2*( vxo1-vxo2     )*( vxo1-vxo2     )-cusq) +   c1o54* (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq2)));
-         f_NW   = f_NW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1+vxo2     )+c9o2*(-vxo1+vxo2     )*(-vxo1+vxo2     )-cusq) +   c1o54* (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq2)));
-         f_TE   = f_TE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1     +vxo3)+c9o2*( vxo1     +vxo3)*( vxo1     +vxo3)-cusq) +   c1o54* (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq2)));
-         f_BW   = f_BW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1     -vxo3)+c9o2*(-vxo1     -vxo3)*(-vxo1     -vxo3)-cusq) +   c1o54* (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq2)));
-         f_BE   = f_BE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1     -vxo3)+c9o2*( vxo1     -vxo3)*( vxo1     -vxo3)-cusq) +   c1o54* (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq2)));
-         f_TW   = f_TW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1     +vxo3)+c9o2*(-vxo1     +vxo3)*(-vxo1     +vxo3)-cusq) +   c1o54* (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq2)));
-         f_TN   = f_TN   + ((c1o1+drho) * (-  c1o54* (c3o1*(      vxo2+vxo3)+c9o2*(      vxo2+vxo3)*(      vxo2+vxo3)-cusq) +   c1o54* (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq2)));
-         f_BS   = f_BS   + ((c1o1+drho) * (-  c1o54* (c3o1*(     -vxo2-vxo3)+c9o2*(     -vxo2-vxo3)*(     -vxo2-vxo3)-cusq) +   c1o54* (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq2)));
-         f_BN   = f_BN   + ((c1o1+drho) * (-  c1o54* (c3o1*(      vxo2-vxo3)+c9o2*(      vxo2-vxo3)*(      vxo2-vxo3)-cusq) +   c1o54* (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq2)));
-         f_TS   = f_TS   + ((c1o1+drho) * (-  c1o54* (c3o1*(     -vxo2+vxo3)+c9o2*(     -vxo2+vxo3)*(     -vxo2+vxo3)-cusq) +   c1o54* (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq2)));
-         f_TNE  = f_TNE  + ((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_BSW  = f_BSW  + ((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_BNE  = f_BNE  + ((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_TSW  = f_TSW  + ((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_TSE  = f_TSE  + ((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_BNW  = f_BNW  + ((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_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[DIR_000])[kzero] =  f_ZERO;
-        (D.f[DIR_P00])[ke   ] =  f_E   ;	// f_W   ;//    	
-        (D.f[DIR_M00])[kw   ] =  f_W   ;	// f_E   ;//    	
-        (D.f[DIR_0P0])[kn   ] =  f_N   ;	// f_S   ;//    	
-        (D.f[DIR_0M0])[ks   ] =  f_S   ;	// f_N   ;//    	
-        (D.f[DIR_00P])[kt   ] =  f_T   ;	// f_B   ;//    	
-        (D.f[DIR_00M])[kb   ] =  f_B   ;	// f_T   ;//    	
-        (D.f[DIR_PP0])[kne  ] =  f_NE  ;	// f_SW  ;//    	
-        (D.f[DIR_MM0])[ksw  ] =  f_SW  ;	// f_NE  ;//    	
-        (D.f[DIR_PM0])[kse  ] =  f_SE  ;	// f_NW  ;//    	
-        (D.f[DIR_MP0])[knw  ] =  f_NW  ;	// f_SE  ;//    	
-        (D.f[DIR_P0P])[kte  ] =  f_TE  ;	// f_BW  ;//    	
-        (D.f[DIR_M0M])[kbw  ] =  f_BW  ;	// f_TE  ;//    	
-        (D.f[DIR_P0M])[kbe  ] =  f_BE  ;	// f_TW  ;//    	
-        (D.f[DIR_M0P])[ktw  ] =  f_TW  ;	// f_BE  ;//    	
-        (D.f[DIR_0PP])[ktn  ] =  f_TN  ;	// f_BS  ;//    	
-        (D.f[DIR_0MM])[kbs  ] =  f_BS  ;	// f_TN  ;//    	
-        (D.f[DIR_0PM])[kbn  ] =  f_BN  ;	// f_TS  ;//    	
-        (D.f[DIR_0MP])[kts  ] =  f_TS  ;	// f_BN  ;//    	
-        (D.f[DIR_PPP])[ktne ] =  f_TNE ;	// f_BSW ;//    	
-        (D.f[DIR_MMM])[kbsw ] =  f_BSW ;	// f_BNE ;//    	
-        (D.f[DIR_PPM])[kbne ] =  f_BNE ;	// f_BNW ;//    	
-        (D.f[DIR_MMP])[ktsw ] =  f_TSW ;	// f_BSE ;//    	
-        (D.f[DIR_PMP])[ktse ] =  f_TSE ;	// f_TSW ;//    	
-        (D.f[DIR_MPM])[kbnw ] =  f_BNW ;	// f_TNE ;//    	
-        (D.f[DIR_PMM])[kbse ] =  f_BSE ;	// f_TNW ;//    	
-        (D.f[DIR_MPP])[ktnw ] =  f_TNW ;	// f_TSE ;//    	
-
-		//////////////////////////////////////////////////////////////////////////
-        ////(D.f[DIR_000])[kzero] =   c8over27* (drho-cu_sq);
-        //(D.f[DIR_P00])[ke   ] =   three*c2over27* ( vx1        );		//six
-        //(D.f[DIR_M00])[kw   ] =   three*c2over27* (-vx1        );		//six
-        //(D.f[DIR_0P0])[kn   ] =   three*c2over27* (     vx2    );		//six
-        //(D.f[DIR_0M0])[ks   ] =   three*c2over27* (    -vx2    );		//six
-        //(D.f[DIR_00P])[kt   ] =   three*c2over27* (         vx3);		//six
-        //(D.f[DIR_00M])[kb   ] =   three*c2over27* (        -vx3);		//six
-        //(D.f[DIR_PP0])[kne  ] =   three*c1over54* ( vx1+vx2    );		//six
-        //(D.f[DIR_MM0])[ksw  ] =   three*c1over54* (-vx1-vx2    );		//six
-        //(D.f[DIR_PM0])[kse  ] =   three*c1over54* ( vx1-vx2    );		//six
-        //(D.f[DIR_MP0])[knw  ] =   three*c1over54* (-vx1+vx2    );		//six
-        //(D.f[DIR_P0P])[kte  ] =   three*c1over54* ( vx1    +vx3);		//six
-        //(D.f[DIR_M0M])[kbw  ] =   three*c1over54* (-vx1    -vx3);		//six
-        //(D.f[DIR_P0M])[kbe  ] =   three*c1over54* ( vx1    -vx3);		//six
-        //(D.f[DIR_M0P])[ktw  ] =   three*c1over54* (-vx1    +vx3);		//six
-        //(D.f[DIR_0PP])[ktn  ] =   three*c1over54* (     vx2+vx3);		//six
-        //(D.f[DIR_0MM])[kbs  ] =   three*c1over54* (    -vx2-vx3);		//six
-        //(D.f[DIR_0PM])[kbn  ] =   three*c1over54* (     vx2-vx3);		//six
-        //(D.f[DIR_0MP])[kts  ] =   three*c1over54* (    -vx2+vx3);		//six
-        //(D.f[DIR_PPP])[ktne ] =   three*c1over216*( vx1+vx2+vx3);		//six
-        //(D.f[DIR_MMM])[kbsw ] =   three*c1over216*(-vx1-vx2-vx3);		//six
-        //(D.f[DIR_PPM])[kbne ] =   three*c1over216*( vx1+vx2-vx3);		//six
-        //(D.f[DIR_MMP])[ktsw ] =   three*c1over216*(-vx1-vx2+vx3);		//six
-        //(D.f[DIR_PMP])[ktse ] =   three*c1over216*( vx1-vx2+vx3);		//six
-        //(D.f[DIR_MPM])[kbnw ] =   three*c1over216*(-vx1+vx2-vx3);		//six
-        //(D.f[DIR_PMM])[kbse ] =   three*c1over216*( vx1-vx2-vx3);		//six
-        //(D.f[DIR_MPP])[ktnw ] =   three*c1over216*(-vx1+vx2+vx3);		//six
-        //(D.f[DIR_000])[kzero] =   c8over27* (drho-cu_sq);
-        //(D.f[DIR_P00])[ke   ] =   c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
-        //(D.f[DIR_M00])[kw   ] =   c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
-        //(D.f[DIR_0P0])[kn   ] =   c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
-        //(D.f[DIR_0M0])[ks   ] =   c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
-        //(D.f[DIR_00P])[kt   ] =   c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
-        //(D.f[DIR_00M])[kb   ] =   c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
-        //(D.f[DIR_PP0])[kne  ] =   c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-        //(D.f[DIR_MM0])[ksw  ] =   c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-        //(D.f[DIR_PM0])[kse  ] =   c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-        //(D.f[DIR_MP0])[knw  ] =   c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-        //(D.f[DIR_P0P])[kte  ] =   c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-        //(D.f[DIR_M0M])[kbw  ] =   c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-        //(D.f[DIR_P0M])[kbe  ] =   c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-        //(D.f[DIR_M0P])[ktw  ] =   c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-        //(D.f[DIR_0PP])[ktn  ] =   c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-        //(D.f[DIR_0MM])[kbs  ] =   c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-        //(D.f[DIR_0PM])[kbn  ] =   c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-        //(D.f[DIR_0MP])[kts  ] =   c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-        //(D.f[DIR_PPP])[ktne ] =   c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-        //(D.f[DIR_MMM])[kbsw ] =   c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-        //(D.f[DIR_PPM])[kbne ] =   c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-        //(D.f[DIR_MMP])[ktsw ] =   c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-        //(D.f[DIR_PMP])[ktse ] =   c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-        //(D.f[DIR_MPM])[kbnw ] =   c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-        //(D.f[DIR_PMM])[kbse ] =   c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-        //(D.f[DIR_MPP])[ktnw ] =   c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-		}
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-
diff --git a/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu b/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu
deleted file mode 100644
index 6de196e1788494b20c24a73cb9ec02a360f868ea..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu
+++ /dev/null
@@ -1,520 +0,0 @@
-/* Device code */
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-
-//////////////////////////////////////////////////////////////////////////////
-__global__ void WallFunction27(
-										  real* vx,
-										  real* vy,
-										  real* vz,
-										  real* DD, 
-										  int* k_Q, 
-										  real* QQ,
-										  unsigned int numberOfBCnodes, 
-										  real om1, 
-										  unsigned int* neighborX,
-										  unsigned int* neighborY,
-										  unsigned int* neighborZ,
-										  unsigned long long numberOfLBnodes, 
-										  bool isEvenTimestep)
-{
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
-   } 
-   else
-   {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<numberOfBCnodes)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      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)
-      ////////////////////////////////////////////////////////////////////////////////
-      //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[DIR_P00 * numberOfBCnodes];
-      //q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      //q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      //q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      //q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      //q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      //q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      //q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      //q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      //q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      //q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      //q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      //q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      //q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      //q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      //q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      //q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      //q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      //q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      //q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      //q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      //q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      //q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      //q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      //q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      //q_dirBNW = &QQ[DIR_MPM * 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];
-      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 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[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[DIR_000])[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); 
-         
-
-    //   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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (one + drho);
-
-	  real nu = c1o3 * (c1o1 / om1 - c1o2);
-	  real qw = c1o1;
-	  real uTau = sqrt(nu * (vx1 - VeloX) / qw);
-
-	  if (abs(uTau)/nu>11){
-	  uTau = vx1 * 0.41 / (log10(9.8 * uTau * qw / nu));
-	  
-
-	  
-	  vx[k] = vx1 - uTau * uTau * qw / nu;
-	  vx[k] = (vx[k]> 0.05) ? 0.05 : ((vx[k]< -0.05) ? -0.05 : vx[k] );  
-	  }
-	  else{ vx[k]=c0o1; }
-	  //vy[k] = 0.01;							//Test...muss wieder raus
-	  //vz[k] = 0.01;							//Test...muss wieder raus
-
-   //   //////////////////////////////////////////////////////////////////////////
-   //   if (isEvenTimestep==false)
-   //   {
-   //      D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-   //      D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-   //      D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-   //      D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-   //      D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-   //      D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-   //      D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-   //      D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-   //      D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-   //      D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-   //      D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-   //      D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-   //      D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-   //      D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-   //      D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-   //      D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-   //      D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-   //      D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-   //      D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //      D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-   //      D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-   //      D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-   //      D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-   //      D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-   //      D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-   //      D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-   //      D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
-   //   } 
-   //   else
-   //   {
-   //      D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-   //      D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-   //      D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-   //      D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-   //      D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-   //      D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-   //      D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-   //      D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-   //      D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-   //      D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-   //      D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-   //      D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-   //      D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-   //      D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-   //      D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-   //      D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-   //      D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-   //      D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-   //      D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //      D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-   //      D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-   //      D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-   //      D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-   //      D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-   //      D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-   //      D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-   //      D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
-   //   }
-   //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //   //Test
-   //   //(D.f[DIR_000])[k]=c1o10;
-   //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-	  ////ToDo anders Klammern
-
-   //   q = q_dirE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      feq=c2over27* (drho/*+three*( vx1        )*/+c9over2*( vx1        )*( vx1        ) * (one + drho)-cu_sq); 
-   //      (D.f[DIR_M00])[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[DIR_M00])[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[DIR_P00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00M])[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[DIR_00P])[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[DIR_00P])[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[DIR_MM0])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
-   //   }
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/ADKernel.h b/src/gpu/VirtualFluids_GPU/Kernel/ADKernel.h
deleted file mode 100644
index 583ef78aa459c580bb2249e4dbf920ce39e8bbb3..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/ADKernel.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef ADV_DIFF_KERNEL_H
-#define ADV_DIFF_KERNEL_H
-
-#include "Kernel/KernelImp.h"
-
-class ADKernel : public KernelImp
-{
-	virtual void run() = 0;
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.cpp
deleted file mode 100644
index 39a8bac0c116370f1f2c90e91469f87a2ed6b35e..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "FluidFlowCompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<FluidFlowCompStrategy> FluidFlowCompStrategy::getInstance()
-{
-    static std::shared_ptr<FluidFlowCompStrategy> uniqueInstance;
-	if (!uniqueInstance)
-        uniqueInstance = std::shared_ptr<FluidFlowCompStrategy>(new FluidFlowCompStrategy());
-	return uniqueInstance;
-}
-
-bool FluidFlowCompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (!para->getCompOn())
-		return false;
-	else
-		return true;
-}
-
-FluidFlowCompStrategy::FluidFlowCompStrategy() {
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h
deleted file mode 100644
index c9a6675bd7a4b82442c55b23bac6f9b49b811938..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef FLUID_FLOW_COMP_STRATEGY_H
-#define FLUID_FLOW_COMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-
-class FluidFlowCompStrategy : public CheckParameterStrategy
-{
-public:
-    static std::shared_ptr<FluidFlowCompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-    FluidFlowCompStrategy();
-
-};
-#endif 
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.cpp
deleted file mode 100644
index 2da393a2d71cfcfe78ab2c3eef3c6989f584335d..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "FluidFlowIncompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<FluidFlowIncompStrategy> FluidFlowIncompStrategy::getInstance()
-{
-    static std::shared_ptr<FluidFlowIncompStrategy> uniqueInstance;
-	if (!uniqueInstance)
-        uniqueInstance = std::shared_ptr<FluidFlowIncompStrategy>(new FluidFlowIncompStrategy());
-	return uniqueInstance;
-}
-
-bool FluidFlowIncompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (para->getCompOn())
-		return false;
-	else
-		return true;
-}
-
-FluidFlowIncompStrategy::FluidFlowIncompStrategy() {
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h
deleted file mode 100644
index fd578319e163fff08290d5bd5cd3caf859c094ce..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef FLUID_FLOW_INCOMP_STRATEGY_H
-#define FLUID_FLOW_INCOMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-
-class FluidFlowIncompStrategy : public CheckParameterStrategy
-{
-public:
-    static std::shared_ptr<FluidFlowIncompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-    FluidFlowIncompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.cu
deleted file mode 100644
index 21ad7202a62a685bc18b8a0c44e093e487e8eb84..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.cu
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "ADComp27.h"
-
-#include "ADComp27_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<ADComp27> ADComp27::getNewInstance(std::shared_ptr<Parameter> para, int level)
-{
-	return std::shared_ptr<ADComp27>(new ADComp27(para, level));
-}
-
-void ADComp27::run()
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    LB_KERNEL_AD_COMP_27<<< grid.grid, grid.threads >>>(
-        para->getParD(level)->diffusivity,
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->neighborX,
-        para->getParD(level)->neighborY,
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->distributions.f[0],
-        para->getParD(level)->distributionsAD.f[0],
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("LB_KERNEL_AD_COMP_27 execution failed");
-}
-
-ADComp27::ADComp27(std::shared_ptr<Parameter> para, int level)
-{
-	this->para = para;
-	this->level = level;
-
-	myPreProcessorTypes.push_back(InitCompAD27);
-
-}
-
-ADComp27::ADComp27()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h
deleted file mode 100644
index d1b182dd535fdb4789d1c1b80cbb4bfdd46b22df..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef AD_COMP_27_H
-#define AD_COMP_27_H
-
-#include "Kernel/ADKernel.h"
-
-class ADComp27 : public ADKernel
-{
-public:
-	static std::shared_ptr<ADComp27> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	ADComp27();
-	ADComp27(std::shared_ptr< Parameter> para, int level);
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.cpp
deleted file mode 100644
index 61cf7d07bf1bcdad33bee81d8145cc90d7d4c05f..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "ADMod27CompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<ADMod27CompStrategy> ADMod27CompStrategy::getInstance()
-{
-	std::shared_ptr<ADMod27CompStrategy> uniqueInstance;
-	if(!uniqueInstance)
-		uniqueInstance = std::shared_ptr<ADMod27CompStrategy>(new ADMod27CompStrategy());
-	return uniqueInstance;
-}
-
-bool ADMod27CompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (!para->getCompOn())
-		return false;
-	else if (!para->getDiffOn())
-		return false;
-	else if (para->getDiffMod() == 7)
-		return false;
-	else
-		return true;
-}
-
-ADMod27CompStrategy::ADMod27CompStrategy()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h
deleted file mode 100644
index 1cdf8e04383c1087b493aa2dd4bf8c68cec7db8a..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef AD_MOD27_COMP_STRATEGY_H
-#define AD_MOD27_COMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-class ADMod27CompStrategy : public CheckParameterStrategy
-{
-public:
-	static std::shared_ptr<ADMod27CompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-	ADMod27CompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.cu
deleted file mode 100644
index fa6d378353aa5058f1b58979a517e8490d7d3916..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.cu
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "ADComp7.h"
-
-#include "ADComp7_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<ADComp7> ADComp7::getNewInstance(std::shared_ptr<Parameter> para, int level)
-{
-	return std::shared_ptr<ADComp7>(new ADComp7(para, level));
-}
-
-void ADComp7::run()
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    LB_Kernel_AD_Comp_7<<< grid.grid, grid.threads >>>(
-        para->getParD(level)->diffusivity,
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->neighborX,
-        para->getParD(level)->neighborY,
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->distributions.f[0], 
-        para->getParD(level)->distributionsAD7.f[0], 
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("LB_Kernel_AD_Comp_7 execution failed");
-}
-
-ADComp7::ADComp7(std::shared_ptr<Parameter> para, int level)
-{
-	this->para = para;
-	this->level = level;
-
-	myPreProcessorTypes.push_back(InitCompAD7);
-
-}
-
-ADComp7::ADComp7()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h
deleted file mode 100644
index afabfd27f28ecb5be61d6e279bd0eb9d30990449..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef AD_COMP_7_H
-#define AD_COMP_7_H
-
-#include "Kernel/ADKernel.h"
-
-class ADComp7 : public ADKernel
-{
-public:
-	static std::shared_ptr<ADComp7> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	ADComp7();
-	ADComp7(std::shared_ptr< Parameter> para, int level);
-};
-#endif 
\ No newline at end of file
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
deleted file mode 100644
index 075063bc6c3d260376256bd46f5669fae658a7a0..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu
+++ /dev/null
@@ -1,222 +0,0 @@
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-#include "math.h"
-
-__global__ void LB_Kernel_AD_Comp_7(real diffusivity,
-	unsigned int* bcMatD,
-	unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	real* DDStart,
-	real* DD7,
-	int size_Mat,
-	bool EvenOrOdd)
-{
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if (k<size_Mat)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		unsigned int BC;
-		BC = bcMatD[k];
-
-		if ((BC != GEO_SOLID) && (BC != GEO_VOID))
-		{
-			Distributions27 D;
-			if (EvenOrOdd == true)
-			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
-			}
-			else
-			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
-			}
-
-			Distributions7 D7;
-			if (EvenOrOdd == true)
-			{
-				D7.f[0] = &DD7[0 * size_Mat];
-				D7.f[1] = &DD7[1 * size_Mat];
-				D7.f[2] = &DD7[2 * size_Mat];
-				D7.f[3] = &DD7[3 * size_Mat];
-				D7.f[4] = &DD7[4 * size_Mat];
-				D7.f[5] = &DD7[5 * size_Mat];
-				D7.f[6] = &DD7[6 * size_Mat];
-			}
-			else
-			{
-				D7.f[0] = &DD7[0 * size_Mat];
-				D7.f[2] = &DD7[1 * size_Mat];
-				D7.f[1] = &DD7[2 * size_Mat];
-				D7.f[4] = &DD7[3 * size_Mat];
-				D7.f[3] = &DD7[4 * size_Mat];
-				D7.f[6] = &DD7[5 * size_Mat];
-				D7.f[5] = &DD7[6 * size_Mat];
-			}
-
-			////////////////////////////////////////////////////////////////////////////////
-			//index
-			unsigned int kw = neighborX[k];
-			unsigned int ks = neighborY[k];
-			unsigned int kb = neighborZ[k];
-			unsigned int ksw = neighborY[kw];
-			unsigned int kbw = neighborZ[kw];
-			unsigned int kbs = neighborZ[ks];
-			unsigned int kbsw = neighborZ[ksw];
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[DIR_P00])[k];//ke
-			real fE = (D.f[DIR_M00])[kw];
-			real fS = (D.f[DIR_0P0])[k];//kn
-			real fN = (D.f[DIR_0M0])[ks];
-			real fB = (D.f[DIR_00P])[k];//kt
-			real fT = (D.f[DIR_00M])[kb];
-			real fSW = (D.f[DIR_PP0])[k];//kne
-			real fNE = (D.f[DIR_MM0])[ksw];
-			real fNW = (D.f[DIR_PM0])[ks];//kse
-			real fSE = (D.f[DIR_MP0])[kw];//knw
-			real fBW = (D.f[DIR_P0P])[k];//kte
-			real fTE = (D.f[DIR_M0M])[kbw];
-			real fTW = (D.f[DIR_P0M])[kb];//kbe
-			real fBE = (D.f[DIR_M0P])[kw];//ktw
-			real fBS = (D.f[DIR_0PP])[k];//ktn
-			real fTN = (D.f[DIR_0MM])[kbs];
-			real fTS = (D.f[DIR_0PM])[kb];//kbn
-			real fBN = (D.f[DIR_0MP])[ks];//kts
-			real fZERO = (D.f[DIR_000])[k];//kzero
-			real fBSW = (D.f[DIR_PPP])[k];//ktne
-			real fBNE = (D.f[DIR_MMP])[ksw];//ktsw
-			real fBNW = (D.f[DIR_PMP])[ks];//ktse
-			real fBSE = (D.f[DIR_MPP])[kw];//ktnw
-			real fTSW = (D.f[DIR_PPM])[kb];//kbne
-			real fTNE = (D.f[DIR_MMM])[kbsw];
-			real fTNW = (D.f[DIR_PMM])[kbs];//kbse
-			real fTSE = (D.f[DIR_MPM])[kbw];//kbnw
-										   //real fE    =  (D.f[DIR_P00])[k  ];//ke
-										   //real fW    =  (D.f[DIR_M00])[kw ];
-										   //real fN    =  (D.f[DIR_0P0])[k  ];//kn
-										   //real fS    =  (D.f[DIR_0M0])[ks ];
-										   //real fT    =  (D.f[DIR_00P])[k  ];//kt
-										   //real fB    =  (D.f[DIR_00M])[kb ];
-										   //real fNE   =  (D.f[DIR_PP0])[k  ];//kne
-										   //real fSW   =  (D.f[DIR_MM0])[ksw];
-										   //real fSE   =  (D.f[DIR_PM0])[ks ];//kse
-										   //real fNW   =  (D.f[DIR_MP0])[kw ];//knw
-										   //real fTE   =  (D.f[DIR_P0P])[k  ];//kte
-										   //real fBW   =  (D.f[DIR_M0M])[kbw];
-										   //real fBE   =  (D.f[DIR_P0M])[kb ];//kbe
-										   //real fTW   =  (D.f[DIR_M0P])[kw ];//ktw
-										   //real fTN   =  (D.f[DIR_0PP])[k  ];//ktn
-										   //real fBS   =  (D.f[DIR_0MM])[kbs];
-										   //real fBN   =  (D.f[DIR_0PM])[kb ];//kbn
-										   //real fTS   =  (D.f[DIR_0MP])[ks ];//kts
-										   //real fZERO =  (D.f[DIR_000])[k  ];//kzero
-										   //real fTNE   = (D.f[DIR_PPP])[k  ];//ktne
-										   //real fTSW   = (D.f[DIR_MMP])[ksw];//ktsw
-										   //real fTSE   = (D.f[DIR_PMP])[ks ];//ktse
-										   //real fTNW   = (D.f[DIR_MPP])[kw ];//ktnw
-										   //real fBNE   = (D.f[DIR_PPM])[kb ];//kbne
-										   //real fBSW   = (D.f[DIR_MMM])[kbsw];
-										   //real fBSE   = (D.f[DIR_PMM])[kbs];//kbse
-										   //real fBNW   = (D.f[DIR_MPM])[kbw];//kbnw
-										   ////////////////////////////////////////////////////////////////////////////////
-			real f7ZERO = (D7.f[0])[k];
-			real f7E = (D7.f[1])[k];
-			real f7W = (D7.f[2])[kw];
-			real f7N = (D7.f[3])[k];
-			real f7S = (D7.f[4])[ks];
-			real f7T = (D7.f[5])[k];
-			real f7B = (D7.f[6])[kb];
-			////////////////////////////////////////////////////////////////////////////////
-			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;
-			real OORho = c1o1 / rho;
-			real vx = OORho*((fTNE - fBSW) + (fBNE - fTSW) + (fTSE - fBNW) + (fBSE - fTNW) + (fNE - fSW) + (fSE - fNW) + (fTE - fBW) + (fBE - fTW) + (fE - fW));
-			real vy = OORho*((fTNE - fBSW) + (fBNE - fTSW) + (fBNW - fTSE) + (fTNW - fBSE) + (fNE - fSW) + (fNW - fSE) + (fTN - fBS) + (fBN - fTS) + (fN - fS));
-			real vz = OORho*((fTNE - fBSW) + (fTSW - fBNE) + (fTSE - fBNW) + (fTNW - fBSE) + (fTE - fBW) + (fTW - fBE) + (fTN - fBS) + (fTS - fBN) + (fT - fB));
-			////////////////////////////////////////////////////////////////////////////////
-			real omegaD = -c3o1 + sqrt(c3o1);
-			real Lam = -(c1o2 + c1o1 / omegaD);
-			real nue_d = Lam / c3o1;
-			real ae = diffusivity / nue_d - c1o1;
-			real ux_sq = vx * vx;
-			real uy_sq = vy * vy;
-			real uz_sq = vz * vz;
-
-			real ConcD = f7ZERO + f7E + f7W + f7N + f7S + f7T + f7B;
-
-			(D7.f[0])[k] = f7ZERO*(c1o1 + omegaD) - omegaD*ConcD*(c1o3*(ae*(-c3o1)) - (ux_sq + uy_sq + uz_sq));
-			(D7.f[2])[kw] = f7E   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)+vx*c1o2);
-			(D7.f[1])[k] = f7W   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)-vx*c1o2);
-			(D7.f[4])[ks] = f7N   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)+vy*c1o2);
-			(D7.f[3])[k] = f7S   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)-vy*c1o2);
-			(D7.f[6])[kb] = f7T   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)+vz*c1o2);
-			(D7.f[5])[k] = f7B   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)-vz*c1o2);
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.cpp
deleted file mode 100644
index fc852c02d8a705802bd0040d43091753aa3678c8..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "ADMod7CompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<ADMod7CompStrategy> ADMod7CompStrategy::getInstance()
-{
-	static std::shared_ptr<ADMod7CompStrategy> uniqueInstance;
-	if(!uniqueInstance)
-		uniqueInstance = std::shared_ptr<ADMod7CompStrategy>(new ADMod7CompStrategy());
-	return uniqueInstance;
-}
-
-bool ADMod7CompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (!para->getCompOn())
-		return false;
-	else if (!para->getDiffOn())
-		return false;
-	else if (para->getDiffMod() == 27)
-		return false;
-	else
-		return true;
-}
-
-ADMod7CompStrategy::ADMod7CompStrategy()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h
deleted file mode 100644
index 4c2059b20468ea6189700d7685aaef1aaf3499fc..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef AD_MOD7_COMP_STRATEGY_H
-#define AD_MOD7_COMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-class ADMod7CompStrategy : public CheckParameterStrategy
-{
-public:
-	static std::shared_ptr<ADMod7CompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-	ADMod7CompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.cu
deleted file mode 100644
index 22782ddf6aebb6b860c3dc1e2b1a384223931085..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.cu
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "ADIncomp27.h"
-
-#include "ADIncomp27_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<ADIncomp27> ADIncomp27::getNewInstance(std::shared_ptr<Parameter> para, int level)
-{
-	return std::shared_ptr<ADIncomp27>(new ADIncomp27(para, level));
-}
-
-void ADIncomp27::run()
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    LB_Kernel_AD_Incomp_27<<< grid.grid, grid.threads >>>(
-        para->getParD(level)->diffusivity, 
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->neighborX, 
-        para->getParD(level)->neighborY, 
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->distributions.f[0], 
-        para->getParD(level)->distributionsAD.f[0], 
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("LB_Kernel_AD_Incomp_27 execution failed");
-}
-
-ADIncomp27::ADIncomp27(std::shared_ptr<Parameter> para, int level)
-{
-	this->para = para;
-	this->level = level;
-
-	myPreProcessorTypes.push_back(InitIncompAD27);
-
-}
-
-ADIncomp27::ADIncomp27()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h
deleted file mode 100644
index 3993539153b2536910a68d99f9ea4c787116bcd3..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef AD_INCOMP_27_H
-#define AD_INCOMP_27_H
-
-#include "Kernel/ADKernel.h"
-
-
-class ADIncomp27 : public ADKernel
-{
-public:
-	static std::shared_ptr<ADIncomp27> getNewInstance(std::shared_ptr<Parameter> para, int level);
-	void run();
-
-private:
-	ADIncomp27();
-	ADIncomp27(std::shared_ptr< Parameter> para, int level);
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.cpp
deleted file mode 100644
index 84e8e947d498381b8b080abe2b355ee485713d33..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "ADMod27IncompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<ADMod27IncompStrategy> ADMod27IncompStrategy::getInstance()
-{
-	static std::shared_ptr<ADMod27IncompStrategy> uniqueInstance;
-	if (!uniqueInstance)
-		uniqueInstance = std::shared_ptr<ADMod27IncompStrategy>(new ADMod27IncompStrategy());
-	return uniqueInstance;
-}
-
-bool ADMod27IncompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (para->getCompOn())
-		return false;
-	else if (!para->getDiffOn())
-		return false;
-	else if (para->getDiffMod() == 7)
-		return false;
-	else
-		return true;
-}
-
-ADMod27IncompStrategy::ADMod27IncompStrategy()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h
deleted file mode 100644
index ed518041a58832f9c1efc0a39cb566cf9f4cf920..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef AD_MOD27_INCOMP_STRATEGY_H
-#define AD_MOD27_INCOMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-class ADMod27IncompStrategy : public CheckParameterStrategy
-{
-public:
-	static std::shared_ptr<ADMod27IncompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-	ADMod27IncompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.cu
deleted file mode 100644
index 613491dcfc4e124fed2826f5439ae7a2b99544b7..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.cu
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "ADIncomp7.h"
-
-#include "ADIncomp7_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<ADIncomp7> ADIncomp7::getNewInstance(std::shared_ptr<Parameter> para, int level)
-{
-	return std::shared_ptr<ADIncomp7>(new ADIncomp7(para, level));
-}
-
-void ADIncomp7::run()
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    LB_Kernel_AD_Incomp_7<<< grid.grid, grid.threads >>>(
-        para->getParD(level)->diffusivity, 
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->neighborX, 
-        para->getParD(level)->neighborY, 
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->distributions.f[0],
-        para->getParD(level)->distributionsAD7.f[0], 
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("LB_Kernel_AD_Incomp_7 execution failed");
-}
-
-ADIncomp7::ADIncomp7(std::shared_ptr<Parameter> para, int level)
-{
-	this->para = para;
-	this->level = level;
-
-	myPreProcessorTypes.push_back(InitIncompAD7);
-
-}
-
-ADIncomp7::ADIncomp7()
-{
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h
deleted file mode 100644
index 825bc12ff7ea20ef17b2b41e7e60f8f026b4b6bb..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef AD_INCOMP_7_H
-#define AD_INCOMP_7_H
-
-#include "Kernel/ADKernel.h"
-
-class ADIncomp7 : public ADKernel
-{
-public:
-	static std::shared_ptr<ADIncomp7> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	ADIncomp7();
-	ADIncomp7(std::shared_ptr< Parameter> para, int level);
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.cpp
deleted file mode 100644
index 0bae92b80f046970bc9287bd84727bdf38a59a09..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "ADMod7IncompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<ADMod7IncompStrategy> ADMod7IncompStrategy::getInstance()
-{
-	static std::shared_ptr<ADMod7IncompStrategy> uniqueInstance;
-	if(!uniqueInstance)
-		uniqueInstance = std::shared_ptr<ADMod7IncompStrategy>(new ADMod7IncompStrategy());
-	return uniqueInstance;
-}
-
-bool ADMod7IncompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (para->getCompOn())
-		return false;
-	else if (!para->getDiffOn())
-		return false;
-	else if (para->getDiffMod() == 27)
-		return false;
-	else
-		return true;
-}
-
-ADMod7IncompStrategy::ADMod7IncompStrategy()
-{
-}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h
deleted file mode 100644
index 1d01b7b1c2a65e07b17377cfd2c4000583c2fc33..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef AD_MOD7_INCOMP_STRATEGY_H
-#define AD_MOD7_INCOMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-class ADMod7IncompStrategy : public CheckParameterStrategy
-{
-public:
-	static std::shared_ptr<ADMod7IncompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-	ADMod7IncompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h
deleted file mode 100644
index d5130b88728cfdd70fad18e180d578733609487f..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef PM_CUMULANT_ONE_COMP_SP27_H
-#define PM_CUMULANT_ONE_COMP_SP27_H
-
-#include "Kernel/KernelImp.h"
-
-class PorousMedia;
-
-class PMCumulantOneCompSP27 : public KernelImp
-{
-public:
-	static std::shared_ptr<PMCumulantOneCompSP27> getNewInstance(std::shared_ptr< Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level);
-	void run();
-
-private:
-	PMCumulantOneCompSP27();
-	PMCumulantOneCompSP27(std::shared_ptr< Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level);
-
-	std::vector<std::shared_ptr<PorousMedia>> pm;
-};
-
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.cpp
deleted file mode 100644
index 553800d738bb5ed56f17a0e0bba181961b8e31bf..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "PMFluidFlowCompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<PMFluidFlowCompStrategy> PMFluidFlowCompStrategy::getInstance()
-{
-    static std::shared_ptr<PMFluidFlowCompStrategy> uniqueInstance;
-	if (!uniqueInstance)
-        uniqueInstance = std::shared_ptr<PMFluidFlowCompStrategy>(new PMFluidFlowCompStrategy());
-	return uniqueInstance;
-}
-
-bool PMFluidFlowCompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (para->getUseWale())
-		return false;
-	else if (!para->getCompOn())
-		return false;
-	else if (!para->getSimulatePorousMedia())
-		return false;
-	else
-		return true;
-}
-
-PMFluidFlowCompStrategy::PMFluidFlowCompStrategy(){
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h
deleted file mode 100644
index c56dda07a724a506439b159d3824533bcc8e441f..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef PM_FLUID_FLOW_COMP_STRATEGY_H
-#define PM_FLUID_FLOW_COMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-
-class PMFluidFlowCompStrategy : public CheckParameterStrategy
-{
-public:
-    static std::shared_ptr<PMFluidFlowCompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-    PMFluidFlowCompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h
deleted file mode 100644
index b669c8d5ae7d69a2009d4d3db82196827a4e676a..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef WALE_CUMULANT_K15_COMP_H
-#define WALE_CUMULANT_K15_COMP_H
-
-#include "Kernel/KernelImp.h"
-
-class WaleCumulantK15Comp : public KernelImp
-{
-public:
-	static std::shared_ptr<WaleCumulantK15Comp> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	WaleCumulantK15Comp();
-	WaleCumulantK15Comp(std::shared_ptr< Parameter> para, int level);
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h
deleted file mode 100644
index e1890f45d94df8814d03e6bb484ecbb6c312a6e6..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef WALE_CUMULANT_K15_COMP_BY_SONI_MALAV_H
-#define WALE_CUMULANT_K15_COMP_BY_SONI_MALAV_H
-
-#include "Kernel/KernelImp.h"
-
-class WaleBySoniMalavCumulantK15Comp : public KernelImp
-{
-public:
-	static std::shared_ptr<WaleBySoniMalavCumulantK15Comp> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	WaleBySoniMalavCumulantK15Comp();
-	WaleBySoniMalavCumulantK15Comp(std::shared_ptr< Parameter> para, int level);
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h
deleted file mode 100644
index 61e431b0f7017c0d9a0c0bbcc7d963a5c05bcbe9..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef WALE_CUMULANT_AA2016_COMP_SP27_H
-#define WALE_CUMULANT_AA2016_COMP_SP27_H
-
-#include "Kernel/KernelImp.h"
-
-class WaleCumulantK17Comp : public KernelImp
-{
-public:
-	static std::shared_ptr<WaleCumulantK17Comp> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	WaleCumulantK17Comp();
-	WaleCumulantK17Comp(std::shared_ptr< Parameter> para, int level);
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h
deleted file mode 100644
index 042cadecd7ed142383ffed01d0ebe140a68a3e0c..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef WALE_CUMULANT_AA2016_DEBUG_COMP_SP27_H
-#define WALE_CUMULANT_AA2016_DEBUG_COMP_SP27_H
-
-#include "Kernel/KernelImp.h"
-
-class WaleCumulantK17DebugComp : public KernelImp
-{
-public:
-	static std::shared_ptr<WaleCumulantK17DebugComp> getNewInstance(std::shared_ptr< Parameter> para, int level);
-	void run();
-
-private:
-	WaleCumulantK17DebugComp();
-	WaleCumulantK17DebugComp(std::shared_ptr< Parameter> para, int level);
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.cpp
deleted file mode 100644
index b2099ddb12e07f38214728871f8fda9391195555..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "WaleFluidFlowCompStrategy.h"
-
-#include "Parameter/Parameter.h"
-
-std::shared_ptr<WaleFluidFlowCompStrategy> WaleFluidFlowCompStrategy::getInstance()
-{
-    static std::shared_ptr<WaleFluidFlowCompStrategy> uniqueInstance;
-	if (!uniqueInstance)
-        uniqueInstance = std::shared_ptr<WaleFluidFlowCompStrategy>(new WaleFluidFlowCompStrategy());
-	return uniqueInstance;
-}
-
-bool WaleFluidFlowCompStrategy::checkParameter(std::shared_ptr<Parameter> para)
-{
-	if (!para->getUseWale())
-		return false;
-	else if (!para->getCompOn())
-		return false;
-	else
-		return true;
-}
-
-WaleFluidFlowCompStrategy::WaleFluidFlowCompStrategy() {
-}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h
deleted file mode 100644
index 7de7bd81754149d86a531e655a8a071ea64e31c8..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef WALE_FLUID_FLOW_COMP_STRATEGY_H
-#define WALE_FLUID_FLOW_COMP_STRATEGY_H
-
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
-
-class WaleFluidFlowCompStrategy : public CheckParameterStrategy
-{
-public:
-    static std::shared_ptr<WaleFluidFlowCompStrategy> getInstance();
-
-	bool checkParameter(std::shared_ptr<Parameter> para);
-
-private:
-    WaleFluidFlowCompStrategy();
-
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h
deleted file mode 100644
index 63e69c57cfd7b0d9138672a3a27de3c918b48297..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef CHECK_PARAMETER_STRATEGY_H
-#define CHECK_PARAMETER_STRATEGY_H
-
-#include <memory>
-
-class Parameter;
-
-class CheckParameterStrategy
-{
-public:
-    virtual ~CheckParameterStrategy() = default;
-    virtual bool checkParameter(std::shared_ptr<Parameter> para) = 0;
-};
-#endif
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilities.h b/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilities.h
deleted file mode 100644
index 2403a7acd9153bf2a1b9aad4d19c5f8d5fa60766..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilities.h
+++ /dev/null
@@ -1,396 +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 KernelUtilities.h
-//! \ingroup LBM/GPUHelperFunctions
-//! \author Martin Schoenherr, Anna Wellmann, Soeren Peters
-//=======================================================================================
-#ifndef GPU_DISTRIBUTION_HELPER_H
-#define GPU_DISTRIBUTION_HELPER_H
-
-#include "LBM/LB.h"
-
-#include <array>
-#include <cassert>
-#include <optional>
-
-#include <cuda_runtime.h>
-
-#include <lbm/constants/D3Q27.h>
-
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-namespace vf::gpu
-{
-
-inline real getForceFactor(int level)
-{
-    real factor = c1o1;
-    for (size_t i = 1; i <= level; i++) {
-        factor *= c2o1;
-    }
-    factor = 1 / factor;
-    return factor;
-}
-
-__inline__ __device__ __host__ void getPointersToDistributions(Distributions27 &dist, real *distributionArray, const unsigned long long numberOfLBnodes, const bool isEvenTimestep)
-{
-    if (isEvenTimestep) {
-        dist.f[DIR_000] = &distributionArray[DIR_000 * numberOfLBnodes];
-        dist.f[DIR_P00] = &distributionArray[DIR_P00 * numberOfLBnodes];
-        dist.f[DIR_M00] = &distributionArray[DIR_M00 * numberOfLBnodes];
-        dist.f[DIR_0P0] = &distributionArray[DIR_0P0 * numberOfLBnodes];
-        dist.f[DIR_0M0] = &distributionArray[DIR_0M0 * numberOfLBnodes];
-        dist.f[DIR_00P] = &distributionArray[DIR_00P * numberOfLBnodes];
-        dist.f[DIR_00M] = &distributionArray[DIR_00M * numberOfLBnodes];
-        dist.f[DIR_PP0] = &distributionArray[DIR_PP0 * numberOfLBnodes];
-        dist.f[DIR_MM0] = &distributionArray[DIR_MM0 * numberOfLBnodes];
-        dist.f[DIR_PM0] = &distributionArray[DIR_PM0 * numberOfLBnodes];
-        dist.f[DIR_MP0] = &distributionArray[DIR_MP0 * numberOfLBnodes];
-        dist.f[DIR_P0P] = &distributionArray[DIR_P0P * numberOfLBnodes];
-        dist.f[DIR_M0M] = &distributionArray[DIR_M0M * numberOfLBnodes];
-        dist.f[DIR_P0M] = &distributionArray[DIR_P0M * numberOfLBnodes];
-        dist.f[DIR_M0P] = &distributionArray[DIR_M0P * numberOfLBnodes];
-        dist.f[DIR_0PP] = &distributionArray[DIR_0PP * numberOfLBnodes];
-        dist.f[DIR_0MM] = &distributionArray[DIR_0MM * numberOfLBnodes];
-        dist.f[DIR_0PM] = &distributionArray[DIR_0PM * numberOfLBnodes];
-        dist.f[DIR_0MP] = &distributionArray[DIR_0MP * numberOfLBnodes];
-        dist.f[DIR_PPP] = &distributionArray[DIR_PPP * numberOfLBnodes];
-        dist.f[DIR_MMP] = &distributionArray[DIR_MMP * numberOfLBnodes];
-        dist.f[DIR_PMP] = &distributionArray[DIR_PMP * numberOfLBnodes];
-        dist.f[DIR_MPP] = &distributionArray[DIR_MPP * numberOfLBnodes];
-        dist.f[DIR_PPM] = &distributionArray[DIR_PPM * numberOfLBnodes];
-        dist.f[DIR_MMM] = &distributionArray[DIR_MMM * numberOfLBnodes];
-        dist.f[DIR_PMM] = &distributionArray[DIR_PMM * numberOfLBnodes];
-        dist.f[DIR_MPM] = &distributionArray[DIR_MPM * numberOfLBnodes];
-    } else {
-        dist.f[DIR_M00] = &distributionArray[DIR_P00 * numberOfLBnodes];
-        dist.f[DIR_P00] = &distributionArray[DIR_M00 * numberOfLBnodes];
-        dist.f[DIR_0M0] = &distributionArray[DIR_0P0 * numberOfLBnodes];
-        dist.f[DIR_0P0] = &distributionArray[DIR_0M0 * numberOfLBnodes];
-        dist.f[DIR_00M] = &distributionArray[DIR_00P * numberOfLBnodes];
-        dist.f[DIR_00P] = &distributionArray[DIR_00M * numberOfLBnodes];
-        dist.f[DIR_MM0] = &distributionArray[DIR_PP0 * numberOfLBnodes];
-        dist.f[DIR_PP0] = &distributionArray[DIR_MM0 * numberOfLBnodes];
-        dist.f[DIR_MP0] = &distributionArray[DIR_PM0 * numberOfLBnodes];
-        dist.f[DIR_PM0] = &distributionArray[DIR_MP0 * numberOfLBnodes];
-        dist.f[DIR_M0M] = &distributionArray[DIR_P0P * numberOfLBnodes];
-        dist.f[DIR_P0P] = &distributionArray[DIR_M0M * numberOfLBnodes];
-        dist.f[DIR_M0P] = &distributionArray[DIR_P0M * numberOfLBnodes];
-        dist.f[DIR_P0M] = &distributionArray[DIR_M0P * numberOfLBnodes];
-        dist.f[DIR_0MM] = &distributionArray[DIR_0PP * numberOfLBnodes];
-        dist.f[DIR_0PP] = &distributionArray[DIR_0MM * numberOfLBnodes];
-        dist.f[DIR_0MP] = &distributionArray[DIR_0PM * numberOfLBnodes];
-        dist.f[DIR_0PM] = &distributionArray[DIR_0MP * numberOfLBnodes];
-        dist.f[DIR_000] = &distributionArray[DIR_000 * numberOfLBnodes];
-        dist.f[DIR_PPP] = &distributionArray[DIR_MMM * numberOfLBnodes];
-        dist.f[DIR_MMP] = &distributionArray[DIR_PPM * numberOfLBnodes];
-        dist.f[DIR_PMP] = &distributionArray[DIR_MPM * numberOfLBnodes];
-        dist.f[DIR_MPP] = &distributionArray[DIR_PMM * numberOfLBnodes];
-        dist.f[DIR_PPM] = &distributionArray[DIR_MMP * numberOfLBnodes];
-        dist.f[DIR_MMM] = &distributionArray[DIR_PPP * numberOfLBnodes];
-        dist.f[DIR_PMM] = &distributionArray[DIR_MPP * numberOfLBnodes];
-        dist.f[DIR_MPM] = &distributionArray[DIR_PMP * numberOfLBnodes];
-    }
-}
-
-/**
-*  Getting references to the 27 directions.
-*  @params distributions 1D real* array containing all data (number of elements = 27 * matrix_size)
-*  @params matrix_size number of discretizations nodes
-*  @params isEvenTimestep: stored data dependent on timestep is based on the esoteric twist algorithm
-*  @return a data struct containing the addresses to the 27 directions within the 1D distribution array
-*/
-__inline__ __device__ __host__ DistributionReferences27 getDistributionReferences27(real* distributions, const unsigned long long numberOfLBnodes, const bool isEvenTimestep){
-    DistributionReferences27 distribution_references;
-    getPointersToDistributions(distribution_references, distributions, numberOfLBnodes, isEvenTimestep);
-    return distribution_references;
-}
-
-__inline__ __device__ void getPointersToSubgridDistances(SubgridDistances27& subgridD, real* subgridDistances, const unsigned int numberOfSubgridIndices)
-{
-    subgridD.q[DIR_P00] = &subgridDistances[DIR_P00 * numberOfSubgridIndices];
-    subgridD.q[DIR_M00] = &subgridDistances[DIR_M00 * numberOfSubgridIndices];
-    subgridD.q[DIR_0P0] = &subgridDistances[DIR_0P0 * numberOfSubgridIndices];
-    subgridD.q[DIR_0M0] = &subgridDistances[DIR_0M0 * numberOfSubgridIndices];
-    subgridD.q[DIR_00P] = &subgridDistances[DIR_00P * numberOfSubgridIndices];
-    subgridD.q[DIR_00M] = &subgridDistances[DIR_00M * numberOfSubgridIndices];
-    subgridD.q[DIR_PP0] = &subgridDistances[DIR_PP0 * numberOfSubgridIndices];
-    subgridD.q[DIR_MM0] = &subgridDistances[DIR_MM0 * numberOfSubgridIndices];
-    subgridD.q[DIR_PM0] = &subgridDistances[DIR_PM0 * numberOfSubgridIndices];
-    subgridD.q[DIR_MP0] = &subgridDistances[DIR_MP0 * numberOfSubgridIndices];
-    subgridD.q[DIR_P0P] = &subgridDistances[DIR_P0P * numberOfSubgridIndices];
-    subgridD.q[DIR_M0M] = &subgridDistances[DIR_M0M * numberOfSubgridIndices];
-    subgridD.q[DIR_P0M] = &subgridDistances[DIR_P0M * numberOfSubgridIndices];
-    subgridD.q[DIR_M0P] = &subgridDistances[DIR_M0P * numberOfSubgridIndices];
-    subgridD.q[DIR_0PP] = &subgridDistances[DIR_0PP * numberOfSubgridIndices];
-    subgridD.q[DIR_0MM] = &subgridDistances[DIR_0MM * numberOfSubgridIndices];
-    subgridD.q[DIR_0PM] = &subgridDistances[DIR_0PM * numberOfSubgridIndices];
-    subgridD.q[DIR_0MP] = &subgridDistances[DIR_0MP * numberOfSubgridIndices];
-    subgridD.q[DIR_000] = &subgridDistances[DIR_000 * numberOfSubgridIndices];
-    subgridD.q[DIR_PPP] = &subgridDistances[DIR_PPP * numberOfSubgridIndices];
-    subgridD.q[DIR_MMP] = &subgridDistances[DIR_MMP * numberOfSubgridIndices];
-    subgridD.q[DIR_PMP] = &subgridDistances[DIR_PMP * numberOfSubgridIndices];
-    subgridD.q[DIR_MPP] = &subgridDistances[DIR_MPP * numberOfSubgridIndices];
-    subgridD.q[DIR_PPM] = &subgridDistances[DIR_PPM * numberOfSubgridIndices];
-    subgridD.q[DIR_MMM] = &subgridDistances[DIR_MMM * numberOfSubgridIndices];
-    subgridD.q[DIR_PMM] = &subgridDistances[DIR_PMM * numberOfSubgridIndices];
-    subgridD.q[DIR_MPM] = &subgridDistances[DIR_MPM * 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 getBounceBackDistributionForVeloBC(  const real& f,
-                                                                const real& velocity, const real weight)
-{
-
-    return f - (c6o1 * weight * velocity);
-}
-
-__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 getInterpolatedDistributionForNoSlipWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, 
-                                                                  const real& omega, const real& drho, const real weight)
-{
-
-    return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 
-           + (q * (f + fInverse)) / (c1o1 + q) - weight * drho;
-}
-
-
-__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;
-}
-
-__inline__ __device__ unsigned int getNodeIndex()
-{
-    // get node index from CUDA threadIdx, blockIdx, blockDim and gridDim.
-    const unsigned x = threadIdx.x;
-    const unsigned y = blockIdx.x;
-    const unsigned z = blockIdx.y;
-
-    const unsigned nx = blockDim.x;
-    const unsigned ny = gridDim.x;
-
-    return nx * (ny * z + y) + x;
-}
-
-__inline__ __device__ bool isValidFluidNode(uint nodeType)
-{
-    return (nodeType == GEO_FLUID || nodeType == GEO_PM_0 || nodeType == GEO_PM_1 || nodeType == GEO_PM_2);
-}
-
-
-struct ListIndices
-{
-    __device__ ListIndices() {}
-    __device__ ListIndices(const unsigned int k, const unsigned int* neighborX, const unsigned int* neighborY, const unsigned int* neighborZ)
-    {
-        k_000 = k;
-        k_M00 = neighborX[k_000];
-        k_0M0 = neighborY[k_000];
-        k_00M = neighborZ[k_000];
-        k_MM0 = neighborY[k_M00];
-        k_M0M = neighborZ[k_M00];
-        k_0MM = neighborZ[k_0M0];
-        k_MMM = neighborZ[k_MM0];
-    }
-
-    unsigned int k_000 { 0 };
-    unsigned int k_M00 { 0 };
-    unsigned int k_0M0 { 0 };
-    unsigned int k_00M { 0 };
-    unsigned int k_MM0 { 0 };
-    unsigned int k_M0M { 0 };
-    unsigned int k_0MM { 0 };
-    unsigned int k_MMM { 0 };
-};
-
-
-////////////////////////////////////////////////////////////////////////////////////
-//! - Read distributions: style of reading and writing the distributions from/to
-//! 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>
-__device__ __inline__ void read(real *f, const Distributions27 &dist, const ListIndices &indices)
-{
-    f[DIR_000] = (dist.f[DIR_000])[indices.k_000];
-    f[DIR_P00] = (dist.f[DIR_P00])[indices.k_000];
-    f[DIR_M00] = (dist.f[DIR_M00])[indices.k_M00];
-    f[DIR_0P0] = (dist.f[DIR_0P0])[indices.k_000];
-    f[DIR_0M0] = (dist.f[DIR_0M0])[indices.k_0M0];
-    f[DIR_00P] = (dist.f[DIR_00P])[indices.k_000];
-    f[DIR_00M] = (dist.f[DIR_00M])[indices.k_00M];
-    f[DIR_PP0] = (dist.f[DIR_PP0])[indices.k_000];
-    f[DIR_MM0] = (dist.f[DIR_MM0])[indices.k_MM0];
-    f[DIR_PM0] = (dist.f[DIR_PM0])[indices.k_0M0];
-    f[DIR_MP0] = (dist.f[DIR_MP0])[indices.k_M00];
-    f[DIR_P0P] = (dist.f[DIR_P0P])[indices.k_000];
-    f[DIR_M0M] = (dist.f[DIR_M0M])[indices.k_M0M];
-    f[DIR_P0M] = (dist.f[DIR_P0M])[indices.k_00M];
-    f[DIR_M0P] = (dist.f[DIR_M0P])[indices.k_M00];
-    f[DIR_0PP] = (dist.f[DIR_0PP])[indices.k_000];
-    f[DIR_0MM] = (dist.f[DIR_0MM])[indices.k_0MM];
-    f[DIR_0PM] = (dist.f[DIR_0PM])[indices.k_00M];
-    f[DIR_0MP] = (dist.f[DIR_0MP])[indices.k_0M0];
-    f[DIR_PPP] = (dist.f[DIR_PPP])[indices.k_000];
-    f[DIR_MPP] = (dist.f[DIR_MPP])[indices.k_M00];
-    f[DIR_PMP] = (dist.f[DIR_PMP])[indices.k_0M0];
-    f[DIR_MMP] = (dist.f[DIR_MMP])[indices.k_MM0];
-    f[DIR_PPM] = (dist.f[DIR_PPM])[indices.k_00M];
-    f[DIR_MPM] = (dist.f[DIR_MPM])[indices.k_M0M];
-    f[DIR_PMM] = (dist.f[DIR_PMM])[indices.k_0MM];
-    f[DIR_MMM] = (dist.f[DIR_MMM])[indices.k_MMM];
-}
-
-__device__ __inline__ void readInverse(real *f, const Distributions27 &dist, const ListIndices &indices)
-{
-    f[DIR_000] = (dist.f[DIR_000])[indices.k_000];
-    f[DIR_P00] = (dist.f[DIR_P00])[indices.k_000];
-    f[DIR_M00] = (dist.f[DIR_M00])[indices.k_M00];
-    f[DIR_0P0] = (dist.f[DIR_0P0])[indices.k_000];
-    f[DIR_0M0] = (dist.f[DIR_0M0])[indices.k_0M0];
-    f[DIR_00P] = (dist.f[DIR_00P])[indices.k_000];
-    f[DIR_00M] = (dist.f[DIR_00M])[indices.k_00M];
-    f[DIR_PP0] = (dist.f[DIR_PP0])[indices.k_000];
-    f[DIR_MM0] = (dist.f[DIR_MM0])[indices.k_MM0];
-    f[DIR_PM0] = (dist.f[DIR_PM0])[indices.k_0M0];
-    f[DIR_MP0] = (dist.f[DIR_MP0])[indices.k_M00];
-    f[DIR_P0P] = (dist.f[DIR_P0P])[indices.k_000];
-    f[DIR_M0M] = (dist.f[DIR_M0M])[indices.k_M0M];
-    f[DIR_P0M] = (dist.f[DIR_P0M])[indices.k_00M];
-    f[DIR_M0P] = (dist.f[DIR_M0P])[indices.k_M00];
-    f[DIR_0PP] = (dist.f[DIR_0PP])[indices.k_000];
-    f[DIR_0MM] = (dist.f[DIR_0MM])[indices.k_0MM];
-    f[DIR_0PM] = (dist.f[DIR_0PM])[indices.k_00M];
-    f[DIR_0MP] = (dist.f[DIR_0MP])[indices.k_0M0];
-    f[DIR_PPP] = (dist.f[DIR_PPP])[indices.k_000];
-    f[DIR_MPP] = (dist.f[DIR_MPP])[indices.k_M00];
-    f[DIR_PMP] = (dist.f[DIR_PMP])[indices.k_0M0];
-    f[DIR_MMP] = (dist.f[DIR_MMP])[indices.k_MM0];
-    f[DIR_PPM] = (dist.f[DIR_PPM])[indices.k_00M];
-    f[DIR_MPM] = (dist.f[DIR_MPM])[indices.k_M0M];
-    f[DIR_PMM] = (dist.f[DIR_PMM])[indices.k_0MM];
-    f[DIR_MMM] = (dist.f[DIR_MMM])[indices.k_MMM];
-}
-
-
-////////////////////////////////////////////////////////////////////////////////////
-//! - Write distributions: style of reading and writing the distributions from/to
-//! 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>
-__inline__ __device__ void write(Distributions27& destination, const ListIndices& indices, const real* f)
-{
-    (destination.f[DIR_000])[indices.k_000] = f[DIR_000];
-    (destination.f[DIR_P00])[indices.k_000] = f[DIR_P00];
-    (destination.f[DIR_M00])[indices.k_M00] = f[DIR_M00];
-    (destination.f[DIR_0P0])[indices.k_000] = f[DIR_0P0];
-    (destination.f[DIR_0M0])[indices.k_0M0] = f[DIR_0M0];
-    (destination.f[DIR_00P])[indices.k_000] = f[DIR_00P];
-    (destination.f[DIR_00M])[indices.k_00M] = f[DIR_00M];
-    (destination.f[DIR_PP0])[indices.k_000] = f[DIR_PP0];
-    (destination.f[DIR_MM0])[indices.k_MM0] = f[DIR_MM0];
-    (destination.f[DIR_PM0])[indices.k_0M0] = f[DIR_PM0];
-    (destination.f[DIR_MP0])[indices.k_M00] = f[DIR_MP0];
-    (destination.f[DIR_P0P])[indices.k_000] = f[DIR_P0P];
-    (destination.f[DIR_M0M])[indices.k_M0M] = f[DIR_M0M];
-    (destination.f[DIR_P0M])[indices.k_00M] = f[DIR_P0M];
-    (destination.f[DIR_M0P])[indices.k_M00] = f[DIR_M0P];
-    (destination.f[DIR_0PP])[indices.k_000] = f[DIR_0PP];
-    (destination.f[DIR_0MM])[indices.k_0MM] = f[DIR_0MM];
-    (destination.f[DIR_0PM])[indices.k_00M] = f[DIR_0PM];
-    (destination.f[DIR_0MP])[indices.k_0M0] = f[DIR_0MP];
-    (destination.f[DIR_PPP])[indices.k_000] = f[DIR_PPP];
-    (destination.f[DIR_MPP])[indices.k_M00] = f[DIR_MPP];
-    (destination.f[DIR_PMP])[indices.k_0M0] = f[DIR_PMP];
-    (destination.f[DIR_MMP])[indices.k_MM0] = f[DIR_MMP];
-    (destination.f[DIR_PPM])[indices.k_00M] = f[DIR_PPM];
-    (destination.f[DIR_MPM])[indices.k_M0M] = f[DIR_MPM];
-    (destination.f[DIR_PMM])[indices.k_0MM] = f[DIR_PMM];
-    (destination.f[DIR_MMM])[indices.k_MMM] = f[DIR_MMM];
-}
-
-__inline__ __device__ void writeInverse(Distributions27& destination, const ListIndices& indices, const real* f)
-{
-    (destination.f[DIR_000])[indices.k_000] = f[DIR_000];
-    (destination.f[DIR_P00])[indices.k_000] = f[DIR_M00];
-    (destination.f[DIR_M00])[indices.k_M00] = f[DIR_P00];
-    (destination.f[DIR_0P0])[indices.k_000] = f[DIR_0M0];
-    (destination.f[DIR_0M0])[indices.k_0M0] = f[DIR_0P0];
-    (destination.f[DIR_00P])[indices.k_000] = f[DIR_00M];
-    (destination.f[DIR_00M])[indices.k_00M] = f[DIR_00P];
-    (destination.f[DIR_PP0])[indices.k_000] = f[DIR_MM0];
-    (destination.f[DIR_MM0])[indices.k_MM0] = f[DIR_PP0];
-    (destination.f[DIR_PM0])[indices.k_0M0] = f[DIR_MP0];
-    (destination.f[DIR_MP0])[indices.k_M00] = f[DIR_PM0];
-    (destination.f[DIR_P0P])[indices.k_000] = f[DIR_M0M];
-    (destination.f[DIR_M0M])[indices.k_M0M] = f[DIR_P0P];
-    (destination.f[DIR_P0M])[indices.k_00M] = f[DIR_M0P];
-    (destination.f[DIR_M0P])[indices.k_M00] = f[DIR_P0M];
-    (destination.f[DIR_0PP])[indices.k_000] = f[DIR_0MM];
-    (destination.f[DIR_0MM])[indices.k_0MM] = f[DIR_0PP];
-    (destination.f[DIR_0PM])[indices.k_00M] = f[DIR_0MP];
-    (destination.f[DIR_0MP])[indices.k_0M0] = f[DIR_0PM];
-    (destination.f[DIR_PPP])[indices.k_000] = f[DIR_MMM];
-    (destination.f[DIR_MPP])[indices.k_M00] = f[DIR_PMM];
-    (destination.f[DIR_PMP])[indices.k_0M0] = f[DIR_MPM];
-    (destination.f[DIR_MMP])[indices.k_MM0] = f[DIR_PPM];
-    (destination.f[DIR_PPM])[indices.k_00M] = f[DIR_MMP];
-    (destination.f[DIR_MPM])[indices.k_M0M] = f[DIR_PMP];
-    (destination.f[DIR_PMM])[indices.k_0MM] = f[DIR_MPP];
-    (destination.f[DIR_MMM])[indices.k_MMM] = f[DIR_PPP];
-}
-
-}
-
-#endif
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp b/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp
deleted file mode 100644
index 87f7979bedd8995b075c2adf164a68c1a5b95022..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <gmock/gmock.h>
-
-#include <basics/tests/testUtilities.h>
-
-#include "KernelUtilities.h"
-
-#include <lbm/constants/D3Q27.h>
-
-using namespace vf::lbm::dir;
-
-TEST(DistributionHelperTests, getPointerToDistribution_WhenEvenTimeStep_ShouldBeEqualToInput)
-{
-    real distributions_in[27];
-    for (int i = 0; i < 27; i++)
-        distributions_in[i] = i;
-    const uint size_Mat = 1;
-    const bool isEvenTimeStep = true;
-
-    Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep);
-
-    EXPECT_THAT(*distribution_out.f[DIR_P00], RealEq(distributions_in[DIR_P00]));
-    EXPECT_THAT(*distribution_out.f[DIR_M00], RealEq(distributions_in[DIR_M00]));
-    EXPECT_THAT(*distribution_out.f[DIR_0P0], RealEq(distributions_in[DIR_0P0]));
-    EXPECT_THAT(*distribution_out.f[DIR_0M0], RealEq(distributions_in[DIR_0M0]));
-    EXPECT_THAT(*distribution_out.f[DIR_00P], RealEq(distributions_in[DIR_00P]));
-    EXPECT_THAT(*distribution_out.f[DIR_00M], RealEq(distributions_in[DIR_00M]));
-    EXPECT_THAT(*distribution_out.f[DIR_PP0], RealEq(distributions_in[DIR_PP0]));
-    EXPECT_THAT(*distribution_out.f[DIR_MM0], RealEq(distributions_in[DIR_MM0]));
-    EXPECT_THAT(*distribution_out.f[DIR_PM0], RealEq(distributions_in[DIR_PM0]));
-    EXPECT_THAT(*distribution_out.f[DIR_MP0], RealEq(distributions_in[DIR_MP0]));
-    EXPECT_THAT(*distribution_out.f[DIR_P0P], RealEq(distributions_in[DIR_P0P]));
-    EXPECT_THAT(*distribution_out.f[DIR_M0M], RealEq(distributions_in[DIR_M0M]));
-    EXPECT_THAT(*distribution_out.f[DIR_P0M], RealEq(distributions_in[DIR_P0M]));
-    EXPECT_THAT(*distribution_out.f[DIR_M0P], RealEq(distributions_in[DIR_M0P]));
-    EXPECT_THAT(*distribution_out.f[DIR_0PP], RealEq(distributions_in[DIR_0PP]));
-    EXPECT_THAT(*distribution_out.f[DIR_0MM], RealEq(distributions_in[DIR_0MM]));
-    EXPECT_THAT(*distribution_out.f[DIR_0PM], RealEq(distributions_in[DIR_0PM]));
-    EXPECT_THAT(*distribution_out.f[DIR_0MP], RealEq(distributions_in[DIR_0MP]));
-    EXPECT_THAT(*distribution_out.f[DIR_000], RealEq(distributions_in[DIR_000]));
-    EXPECT_THAT(*distribution_out.f[DIR_PPP], RealEq(distributions_in[DIR_PPP]));
-    EXPECT_THAT(*distribution_out.f[DIR_MMP], RealEq(distributions_in[DIR_MMP]));
-    EXPECT_THAT(*distribution_out.f[DIR_PMP], RealEq(distributions_in[DIR_PMP]));
-    EXPECT_THAT(*distribution_out.f[DIR_MPP], RealEq(distributions_in[DIR_MPP]));
-    EXPECT_THAT(*distribution_out.f[DIR_PPM], RealEq(distributions_in[DIR_PPM]));
-    EXPECT_THAT(*distribution_out.f[DIR_MMM], RealEq(distributions_in[DIR_MMM]));
-    EXPECT_THAT(*distribution_out.f[DIR_PMM], RealEq(distributions_in[DIR_PMM]));
-    EXPECT_THAT(*distribution_out.f[DIR_MPM], RealEq(distributions_in[DIR_MPM]));
-}
-
-TEST(DistributionHelperTests, getPointerToDistribution_WhenOddTimeStep_ShouldBeSwapped)
-{
-    real distributions_in[27];
-    for (int i = 0; i < 27; i++)
-        distributions_in[i] = i;
-    const int size_Mat = 1;
-    const bool isEvenTimeStep = false;
-
-    Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep);
-
-    EXPECT_THAT(*distribution_out.f[DIR_M00], RealEq(distributions_in[DIR_P00]));
-    EXPECT_THAT(*distribution_out.f[DIR_P00], RealEq(distributions_in[DIR_M00]));
-    EXPECT_THAT(*distribution_out.f[DIR_0M0], RealEq(distributions_in[DIR_0P0]));
-    EXPECT_THAT(*distribution_out.f[DIR_0P0], RealEq(distributions_in[DIR_0M0]));
-    EXPECT_THAT(*distribution_out.f[DIR_00M], RealEq(distributions_in[DIR_00P]));
-    EXPECT_THAT(*distribution_out.f[DIR_00P], RealEq(distributions_in[DIR_00M]));
-    EXPECT_THAT(*distribution_out.f[DIR_MM0], RealEq(distributions_in[DIR_PP0]));
-    EXPECT_THAT(*distribution_out.f[DIR_PP0], RealEq(distributions_in[DIR_MM0]));
-    EXPECT_THAT(*distribution_out.f[DIR_MP0], RealEq(distributions_in[DIR_PM0]));
-    EXPECT_THAT(*distribution_out.f[DIR_PM0], RealEq(distributions_in[DIR_MP0]));
-    EXPECT_THAT(*distribution_out.f[DIR_M0M], RealEq(distributions_in[DIR_P0P]));
-    EXPECT_THAT(*distribution_out.f[DIR_P0P], RealEq(distributions_in[DIR_M0M]));
-    EXPECT_THAT(*distribution_out.f[DIR_M0P], RealEq(distributions_in[DIR_P0M]));
-    EXPECT_THAT(*distribution_out.f[DIR_P0M], RealEq(distributions_in[DIR_M0P]));
-    EXPECT_THAT(*distribution_out.f[DIR_0MM], RealEq(distributions_in[DIR_0PP]));
-    EXPECT_THAT(*distribution_out.f[DIR_0PP], RealEq(distributions_in[DIR_0MM]));
-    EXPECT_THAT(*distribution_out.f[DIR_0MP], RealEq(distributions_in[DIR_0PM]));
-    EXPECT_THAT(*distribution_out.f[DIR_0PM], RealEq(distributions_in[DIR_0MP]));
-    EXPECT_THAT(*distribution_out.f[DIR_000], RealEq(distributions_in[DIR_000]));
-    EXPECT_THAT(*distribution_out.f[DIR_MMM], RealEq(distributions_in[DIR_PPP]));
-    EXPECT_THAT(*distribution_out.f[DIR_PPM], RealEq(distributions_in[DIR_MMP]));
-    EXPECT_THAT(*distribution_out.f[DIR_MPM], RealEq(distributions_in[DIR_PMP]));
-    EXPECT_THAT(*distribution_out.f[DIR_PMM], RealEq(distributions_in[DIR_MPP]));
-    EXPECT_THAT(*distribution_out.f[DIR_MMP], RealEq(distributions_in[DIR_PPM]));
-    EXPECT_THAT(*distribution_out.f[DIR_PPP], RealEq(distributions_in[DIR_MMM]));
-    EXPECT_THAT(*distribution_out.f[DIR_MPP], RealEq(distributions_in[DIR_PMM]));
-    EXPECT_THAT(*distribution_out.f[DIR_PMP], RealEq(distributions_in[DIR_MPM]));
-}
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
deleted file mode 100644
index 8fc9de61cfc20c5111a70ad544a9a26c5b3ea7b4..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
+++ /dev/null
@@ -1,200 +0,0 @@
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-
-
-__global__ void LB_Init_Comp_AD_27(unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned int* geoD,
-	real* Conc,
-	real* ux,
-	real* uy,
-	real* uz,
-	unsigned int size_Mat,
-	real* DD27,
-	bool EvenOrOdd)
-{
-	////////////////////////////////////////////////////////////////////////////////
-	const unsigned  x = threadIdx.x;  // Globaler x-Index 
-	const unsigned  y = blockIdx.x;   // Globaler y-Index 
-	const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-	const unsigned nx = blockDim.x;
-	const unsigned ny = gridDim.x;
-
-	const unsigned k = nx*(ny*z + y) + x;
-	//////////////////////////////////////////////////////////////////////////
-
-	if (k<size_Mat)
-	{
-		////////////////////////////////////////////////////////////////////////////////
-		unsigned int BC;
-		BC = geoD[k];
-
-		if (BC != GEO_SOLID && BC != GEO_VOID)
-		{
-			Distributions27 D27;
-			if (EvenOrOdd == true)
-			{
-				D27.f[DIR_P00] = &DD27[DIR_P00   *size_Mat];
-				D27.f[DIR_M00] = &DD27[DIR_M00   *size_Mat];
-				D27.f[DIR_0P0] = &DD27[DIR_0P0   *size_Mat];
-				D27.f[DIR_0M0] = &DD27[DIR_0M0   *size_Mat];
-				D27.f[DIR_00P] = &DD27[DIR_00P   *size_Mat];
-				D27.f[DIR_00M] = &DD27[DIR_00M   *size_Mat];
-				D27.f[DIR_PP0] = &DD27[DIR_PP0  *size_Mat];
-				D27.f[DIR_MM0] = &DD27[DIR_MM0  *size_Mat];
-				D27.f[DIR_PM0] = &DD27[DIR_PM0  *size_Mat];
-				D27.f[DIR_MP0] = &DD27[DIR_MP0  *size_Mat];
-				D27.f[DIR_P0P] = &DD27[DIR_P0P  *size_Mat];
-				D27.f[DIR_M0M] = &DD27[DIR_M0M  *size_Mat];
-				D27.f[DIR_P0M] = &DD27[DIR_P0M  *size_Mat];
-				D27.f[DIR_M0P] = &DD27[DIR_M0P  *size_Mat];
-				D27.f[DIR_0PP] = &DD27[DIR_0PP  *size_Mat];
-				D27.f[DIR_0MM] = &DD27[DIR_0MM  *size_Mat];
-				D27.f[DIR_0PM] = &DD27[DIR_0PM  *size_Mat];
-				D27.f[DIR_0MP] = &DD27[DIR_0MP  *size_Mat];
-				D27.f[DIR_000] = &DD27[DIR_000*size_Mat];
-				D27.f[DIR_PPP] = &DD27[DIR_PPP *size_Mat];
-				D27.f[DIR_MMP] = &DD27[DIR_MMP *size_Mat];
-				D27.f[DIR_PMP] = &DD27[DIR_PMP *size_Mat];
-				D27.f[DIR_MPP] = &DD27[DIR_MPP *size_Mat];
-				D27.f[DIR_PPM] = &DD27[DIR_PPM *size_Mat];
-				D27.f[DIR_MMM] = &DD27[DIR_MMM *size_Mat];
-				D27.f[DIR_PMM]= &DD27[DIR_PMM *size_Mat];
-				D27.f[DIR_MPM]= &DD27[DIR_MPM *size_Mat];
-			}
-			else
-			{
-				D27.f[DIR_M00] = &DD27[DIR_P00   *size_Mat];
-				D27.f[DIR_P00] = &DD27[DIR_M00   *size_Mat];
-				D27.f[DIR_0M0] = &DD27[DIR_0P0   *size_Mat];
-				D27.f[DIR_0P0] = &DD27[DIR_0M0   *size_Mat];
-				D27.f[DIR_00M] = &DD27[DIR_00P   *size_Mat];
-				D27.f[DIR_00P] = &DD27[DIR_00M   *size_Mat];
-				D27.f[DIR_MM0] = &DD27[DIR_PP0  *size_Mat];
-				D27.f[DIR_PP0] = &DD27[DIR_MM0  *size_Mat];
-				D27.f[DIR_MP0] = &DD27[DIR_PM0  *size_Mat];
-				D27.f[DIR_PM0] = &DD27[DIR_MP0  *size_Mat];
-				D27.f[DIR_M0M] = &DD27[DIR_P0P  *size_Mat];
-				D27.f[DIR_P0P] = &DD27[DIR_M0M  *size_Mat];
-				D27.f[DIR_M0P] = &DD27[DIR_P0M  *size_Mat];
-				D27.f[DIR_P0M] = &DD27[DIR_M0P  *size_Mat];
-				D27.f[DIR_0MM] = &DD27[DIR_0PP  *size_Mat];
-				D27.f[DIR_0PP] = &DD27[DIR_0MM  *size_Mat];
-				D27.f[DIR_0MP] = &DD27[DIR_0PM  *size_Mat];
-				D27.f[DIR_0PM] = &DD27[DIR_0MP  *size_Mat];
-				D27.f[DIR_000] = &DD27[DIR_000*size_Mat];
-				D27.f[DIR_MMM] = &DD27[DIR_PPP *size_Mat];
-				D27.f[DIR_PPM] = &DD27[DIR_MMP *size_Mat];
-				D27.f[DIR_MPM]= &DD27[DIR_PMP *size_Mat];
-				D27.f[DIR_PMM]= &DD27[DIR_MPP *size_Mat];
-				D27.f[DIR_MMP] = &DD27[DIR_PPM *size_Mat];
-				D27.f[DIR_PPP] = &DD27[DIR_MMM *size_Mat];
-				D27.f[DIR_MPP] = &DD27[DIR_PMM *size_Mat];
-				D27.f[DIR_PMP] = &DD27[DIR_MPM *size_Mat];
-			}
-			//////////////////////////////////////////////////////////////////////////
-			real ConcD = Conc[k];
-			real   vx1 = ux[k];
-			real   vx2 = uy[k];
-			real   vx3 = uz[k];
-			//real lambdaD     = -three + sqrt(three);
-			//real Diffusivity = c1o20;
-			//real Lam         = -(c1o2+one/lambdaD);
-			//real nue_d       = Lam/three;
-			//real ae          = Diffusivity/nue_d - one;
-			//real ux_sq       = vx1 * vx1;
-			//real uy_sq       = vx2 * vx2;
-			//real uz_sq       = vx3 * vx3;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//D3Q7
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//index
-			//unsigned int kzero= k;
-			//unsigned int ke   = k;
-			//unsigned int kw   = neighborX[k];
-			//unsigned int kn   = k;
-			//unsigned int ks   = neighborY[k];
-			//unsigned int kt   = k;
-			//unsigned int kb   = neighborZ[k];
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//(D7.f[0])[kzero] = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
-			//(D7.f[1])[ke   ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
-			//(D7.f[2])[kw   ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
-			//(D7.f[3])[kn   ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
-			//(D7.f[4])[ks   ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
-			//(D7.f[5])[kt   ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
-			//(D7.f[6])[kb   ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//D3Q27
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//index
-			unsigned int kzero = k;
-			unsigned int ke = k;
-			unsigned int kw = neighborX[k];
-			unsigned int kn = k;
-			unsigned int ks = neighborY[k];
-			unsigned int kt = k;
-			unsigned int kb = neighborZ[k];
-			unsigned int ksw = neighborY[kw];
-			unsigned int kne = k;
-			unsigned int kse = ks;
-			unsigned int knw = kw;
-			unsigned int kbw = neighborZ[kw];
-			unsigned int kte = k;
-			unsigned int kbe = kb;
-			unsigned int ktw = kw;
-			unsigned int kbs = neighborZ[ks];
-			unsigned int ktn = k;
-			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 = k;
-			unsigned int kbsw = neighborZ[ksw];
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
-
-			(D27.f[DIR_000])[kzero] = c8o27* ConcD*(c1o1 - cu_sq);
-			(D27.f[DIR_P00])[ke] = c2o27* ConcD*(c1o1 + c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
-			(D27.f[DIR_M00])[kw] = c2o27* ConcD*(c1o1 + c3o1*(-vx1) + c9o2*(-vx1)*(-vx1) - cu_sq);
-			(D27.f[DIR_0P0])[kn] = c2o27* ConcD*(c1o1 + c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
-			(D27.f[DIR_0M0])[ks] = c2o27* ConcD*(c1o1 + c3o1*(-vx2) + c9o2*(-vx2)*(-vx2) - cu_sq);
-			(D27.f[DIR_00P])[kt] = c2o27* ConcD*(c1o1 + c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
-			(D27.f[DIR_00M])[kb] = c2o27* ConcD*(c1o1 + c3o1*(-vx3) + c9o2*(-vx3)*(-vx3) - cu_sq);
-			(D27.f[DIR_PP0])[kne] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx2) + c9o2*(vx1 + vx2)*(vx1 + vx2) - cu_sq);
-			(D27.f[DIR_MM0])[ksw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx2) + c9o2*(-vx1 - vx2)*(-vx1 - vx2) - cu_sq);
-			(D27.f[DIR_PM0])[kse] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx2) + c9o2*(vx1 - vx2)*(vx1 - vx2) - cu_sq);
-			(D27.f[DIR_MP0])[knw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx2) + c9o2*(-vx1 + vx2)*(-vx1 + vx2) - cu_sq);
-			(D27.f[DIR_P0P])[kte] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx3) + c9o2*(vx1 + vx3)*(vx1 + vx3) - cu_sq);
-			(D27.f[DIR_M0M])[kbw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx3) + c9o2*(-vx1 - vx3)*(-vx1 - vx3) - cu_sq);
-			(D27.f[DIR_P0M])[kbe] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx3) + c9o2*(vx1 - vx3)*(vx1 - vx3) - cu_sq);
-			(D27.f[DIR_M0P])[ktw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx3) + c9o2*(-vx1 + vx3)*(-vx1 + vx3) - cu_sq);
-			(D27.f[DIR_0PP])[ktn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 + vx3) + c9o2*(vx2 + vx3)*(vx2 + vx3) - cu_sq);
-			(D27.f[DIR_0MM])[kbs] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 - vx3) + c9o2*(-vx2 - vx3)*(-vx2 - vx3) - cu_sq);
-			(D27.f[DIR_0PM])[kbn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 - vx3) + c9o2*(vx2 - vx3)*(vx2 - vx3) - cu_sq);
-			(D27.f[DIR_0MP])[kts] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 + vx3) + c9o2*(-vx2 + vx3)*(-vx2 + vx3) - cu_sq);
-			(D27.f[DIR_PPP])[ktne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 + vx3) + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) - cu_sq);
-			(D27.f[DIR_MMM])[kbsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 - vx3) + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) - cu_sq);
-			(D27.f[DIR_PPM])[kbne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 - vx3) + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) - cu_sq);
-			(D27.f[DIR_MMP])[ktsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 + vx3) + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) - cu_sq);
-			(D27.f[DIR_PMP])[ktse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 + vx3) + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) - cu_sq);
-			(D27.f[DIR_MPM])[kbnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 - vx3) + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) - cu_sq);
-			(D27.f[DIR_PMM])[kbse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 - vx3) + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) - cu_sq);
-			(D27.f[DIR_MPP])[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/InitCompSP27/InitCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
deleted file mode 100644
index 109ea18edf183b65106ce6ed86fea05d6b005d90..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
+++ /dev/null
@@ -1,466 +0,0 @@
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-#include "math.h"
-
-#include <stdio.h>
-
-__global__ void LB_Init_Comp_SP_27(unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned int* geoD,
-	real* rho,
-	real* ux,
-	real* uy,
-	real* uz,
-	unsigned int size_Mat,
-	real* DD,
-	bool EvenOrOdd)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<size_Mat)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      unsigned int BC;
-      BC        =   geoD[k];
-
-      if( BC != GEO_SOLID &&  BC != GEO_VOID)
-      {
-         Distributions27 D;
-         if (EvenOrOdd==true)
-         {
-            D.f[DIR_P00   ] = &DD[DIR_P00   *size_Mat];
-            D.f[DIR_M00   ] = &DD[DIR_M00   *size_Mat];
-            D.f[DIR_0P0   ] = &DD[DIR_0P0   *size_Mat];
-            D.f[DIR_0M0   ] = &DD[DIR_0M0   *size_Mat];
-            D.f[DIR_00P   ] = &DD[DIR_00P   *size_Mat];
-            D.f[DIR_00M   ] = &DD[DIR_00M   *size_Mat];
-            D.f[DIR_PP0  ] = &DD[DIR_PP0  *size_Mat];
-            D.f[DIR_MM0  ] = &DD[DIR_MM0  *size_Mat];
-            D.f[DIR_PM0  ] = &DD[DIR_PM0  *size_Mat];
-            D.f[DIR_MP0  ] = &DD[DIR_MP0  *size_Mat];
-            D.f[DIR_P0P  ] = &DD[DIR_P0P  *size_Mat];
-            D.f[DIR_M0M  ] = &DD[DIR_M0M  *size_Mat];
-            D.f[DIR_P0M  ] = &DD[DIR_P0M  *size_Mat];
-            D.f[DIR_M0P  ] = &DD[DIR_M0P  *size_Mat];
-            D.f[DIR_0PP  ] = &DD[DIR_0PP  *size_Mat];
-            D.f[DIR_0MM  ] = &DD[DIR_0MM  *size_Mat];
-            D.f[DIR_0PM  ] = &DD[DIR_0PM  *size_Mat];
-            D.f[DIR_0MP  ] = &DD[DIR_0MP  *size_Mat];
-            D.f[DIR_000] = &DD[DIR_000*size_Mat];
-            D.f[DIR_PPP ] = &DD[DIR_PPP *size_Mat];
-            D.f[DIR_MMP ] = &DD[DIR_MMP *size_Mat];
-            D.f[DIR_PMP ] = &DD[DIR_PMP *size_Mat];
-            D.f[DIR_MPP ] = &DD[DIR_MPP *size_Mat];
-            D.f[DIR_PPM ] = &DD[DIR_PPM *size_Mat];
-            D.f[DIR_MMM ] = &DD[DIR_MMM *size_Mat];
-            D.f[DIR_PMM ] = &DD[DIR_PMM *size_Mat];
-            D.f[DIR_MPM ] = &DD[DIR_MPM *size_Mat];
-         }
-         else
-         {
-            D.f[DIR_M00   ] = &DD[DIR_P00   *size_Mat];
-            D.f[DIR_P00   ] = &DD[DIR_M00   *size_Mat];
-            D.f[DIR_0M0   ] = &DD[DIR_0P0   *size_Mat];
-            D.f[DIR_0P0   ] = &DD[DIR_0M0   *size_Mat];
-            D.f[DIR_00M   ] = &DD[DIR_00P   *size_Mat];
-            D.f[DIR_00P   ] = &DD[DIR_00M   *size_Mat];
-            D.f[DIR_MM0  ] = &DD[DIR_PP0  *size_Mat];
-            D.f[DIR_PP0  ] = &DD[DIR_MM0  *size_Mat];
-            D.f[DIR_MP0  ] = &DD[DIR_PM0  *size_Mat];
-            D.f[DIR_PM0  ] = &DD[DIR_MP0  *size_Mat];
-            D.f[DIR_M0M  ] = &DD[DIR_P0P  *size_Mat];
-            D.f[DIR_P0P  ] = &DD[DIR_M0M  *size_Mat];
-            D.f[DIR_M0P  ] = &DD[DIR_P0M  *size_Mat];
-            D.f[DIR_P0M  ] = &DD[DIR_M0P  *size_Mat];
-            D.f[DIR_0MM  ] = &DD[DIR_0PP  *size_Mat];
-            D.f[DIR_0PP  ] = &DD[DIR_0MM  *size_Mat];
-            D.f[DIR_0MP  ] = &DD[DIR_0PM  *size_Mat];
-            D.f[DIR_0PM  ] = &DD[DIR_0MP  *size_Mat];
-            D.f[DIR_000] = &DD[DIR_000*size_Mat];
-            D.f[DIR_MMM ] = &DD[DIR_PPP *size_Mat];
-            D.f[DIR_PPM ] = &DD[DIR_MMP *size_Mat];
-            D.f[DIR_MPM ] = &DD[DIR_PMP *size_Mat];
-            D.f[DIR_PMM ] = &DD[DIR_MPP *size_Mat];
-            D.f[DIR_MMP ] = &DD[DIR_PPM *size_Mat];
-            D.f[DIR_PPP ] = &DD[DIR_MMM *size_Mat];
-            D.f[DIR_MPP ] = &DD[DIR_PMM *size_Mat];
-            D.f[DIR_PMP ] = &DD[DIR_MPM *size_Mat];
-         }
-         //////////////////////////////////////////////////////////////////////////
-         real drho = rho[k];//0.0f;//
-         real  vx1 = ux[k]; //0.0f;//
-         real  vx2 = uy[k]; //0.0f;//
-         real  vx3 = uz[k]; //0.0f;//
-         //////////////////////////////////////////////////////////////////////////
-         //index
-         //////////////////////////////////////////////////////////////////////////
-         unsigned int kzero= k;
-         unsigned int ke   = k;
-         unsigned int kw   = neighborX[k];
-         unsigned int kn   = k;
-         unsigned int ks   = neighborY[k];
-         unsigned int kt   = k;
-         unsigned int kb   = neighborZ[k];
-         unsigned int ksw  = neighborY[kw];
-         unsigned int kne  = k;
-         unsigned int kse  = ks;
-         unsigned int knw  = kw;
-         unsigned int kbw  = neighborZ[kw];
-         unsigned int kte  = k;
-         unsigned int kbe  = kb;
-         unsigned int ktw  = kw;
-         unsigned int kbs  = neighborZ[ks];
-         unsigned int ktn  = k;
-         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 = k;
-         unsigned int kbsw = neighborZ[ksw];
-         //////////////////////////////////////////////////////////////////////////
-         real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-         (D.f[DIR_000])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
-         (D.f[DIR_P00   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
-         (D.f[DIR_M00   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-         (D.f[DIR_0P0   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-         (D.f[DIR_0M0   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-         (D.f[DIR_00P   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
-         (D.f[DIR_00M   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-         (D.f[DIR_PP0  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-         (D.f[DIR_MM0  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-         (D.f[DIR_PM0  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-         (D.f[DIR_MP0  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-         (D.f[DIR_P0P  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-         (D.f[DIR_M0M  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-         (D.f[DIR_P0M  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-         (D.f[DIR_M0P  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-         (D.f[DIR_0PP  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-         (D.f[DIR_0MM  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-         (D.f[DIR_0PM  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-         (D.f[DIR_0MP  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-         (D.f[DIR_PPP ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-         (D.f[DIR_MMM ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-         (D.f[DIR_PPM ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-         (D.f[DIR_MMP ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-         (D.f[DIR_PMP ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-         (D.f[DIR_MPM ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-         (D.f[DIR_PMM ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-         (D.f[DIR_MPP ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
-      }
-   }
-}
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-__global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX,
-                                                   unsigned int* neighborY,
-                                                   unsigned int* neighborZ,
-                                                   unsigned int* neighborWSB,
-                                                   unsigned int* geoD,
-                                                   real* rho,
-                                                   real* ux,
-                                                   real* uy,
-                                                   real* uz,
-                                                   unsigned int size_Mat,
-                                                   real* DD,
-                                                   real omega,
-                                                   bool EvenOrOdd)
-{
-    ////////////////////////////////////////////////////////////////////////////////
-    const unsigned  x = threadIdx.x;  // Globaler x-Index 
-    const unsigned  y = blockIdx.x;   // Globaler y-Index 
-    const unsigned  z = blockIdx.y;   // Globaler z-Index 
-    
-    const unsigned nx = blockDim.x;
-    const unsigned ny = gridDim.x;
-    
-    const unsigned k = nx*(ny*z + y) + x;
-    //////////////////////////////////////////////////////////////////////////
-
-    if(k<size_Mat)
-    {
-        ////////////////////////////////////////////////////////////////////////////////
-        unsigned int BC;
-        BC = geoD[k];
-
-        if( BC != GEO_SOLID &&  BC != GEO_VOID)
-        {
-            Distributions27 D;
-            if (EvenOrOdd==true)
-            {
-                D.f[DIR_P00   ] = &DD[DIR_P00   *size_Mat];
-                D.f[DIR_M00   ] = &DD[DIR_M00   *size_Mat];
-                D.f[DIR_0P0   ] = &DD[DIR_0P0   *size_Mat];
-                D.f[DIR_0M0   ] = &DD[DIR_0M0   *size_Mat];
-                D.f[DIR_00P   ] = &DD[DIR_00P   *size_Mat];
-                D.f[DIR_00M   ] = &DD[DIR_00M   *size_Mat];
-                D.f[DIR_PP0  ] = &DD[DIR_PP0  *size_Mat];
-                D.f[DIR_MM0  ] = &DD[DIR_MM0  *size_Mat];
-                D.f[DIR_PM0  ] = &DD[DIR_PM0  *size_Mat];
-                D.f[DIR_MP0  ] = &DD[DIR_MP0  *size_Mat];
-                D.f[DIR_P0P  ] = &DD[DIR_P0P  *size_Mat];
-                D.f[DIR_M0M  ] = &DD[DIR_M0M  *size_Mat];
-                D.f[DIR_P0M  ] = &DD[DIR_P0M  *size_Mat];
-                D.f[DIR_M0P  ] = &DD[DIR_M0P  *size_Mat];
-                D.f[DIR_0PP  ] = &DD[DIR_0PP  *size_Mat];
-                D.f[DIR_0MM  ] = &DD[DIR_0MM  *size_Mat];
-                D.f[DIR_0PM  ] = &DD[DIR_0PM  *size_Mat];
-                D.f[DIR_0MP  ] = &DD[DIR_0MP  *size_Mat];
-                D.f[DIR_000] = &DD[DIR_000*size_Mat];
-                D.f[DIR_PPP ] = &DD[DIR_PPP *size_Mat];
-                D.f[DIR_MMP ] = &DD[DIR_MMP *size_Mat];
-                D.f[DIR_PMP ] = &DD[DIR_PMP *size_Mat];
-                D.f[DIR_MPP ] = &DD[DIR_MPP *size_Mat];
-                D.f[DIR_PPM ] = &DD[DIR_PPM *size_Mat];
-                D.f[DIR_MMM ] = &DD[DIR_MMM *size_Mat];
-                D.f[DIR_PMM ] = &DD[DIR_PMM *size_Mat];
-                D.f[DIR_MPM ] = &DD[DIR_MPM *size_Mat];
-            }
-            else
-            {
-                D.f[DIR_M00   ] = &DD[DIR_P00   *size_Mat];
-                D.f[DIR_P00   ] = &DD[DIR_M00   *size_Mat];
-                D.f[DIR_0M0   ] = &DD[DIR_0P0   *size_Mat];
-                D.f[DIR_0P0   ] = &DD[DIR_0M0   *size_Mat];
-                D.f[DIR_00M   ] = &DD[DIR_00P   *size_Mat];
-                D.f[DIR_00P   ] = &DD[DIR_00M   *size_Mat];
-                D.f[DIR_MM0  ] = &DD[DIR_PP0  *size_Mat];
-                D.f[DIR_PP0  ] = &DD[DIR_MM0  *size_Mat];
-                D.f[DIR_MP0  ] = &DD[DIR_PM0  *size_Mat];
-                D.f[DIR_PM0  ] = &DD[DIR_MP0  *size_Mat];
-                D.f[DIR_M0M  ] = &DD[DIR_P0P  *size_Mat];
-                D.f[DIR_P0P  ] = &DD[DIR_M0M  *size_Mat];
-                D.f[DIR_M0P  ] = &DD[DIR_P0M  *size_Mat];
-                D.f[DIR_P0M  ] = &DD[DIR_M0P  *size_Mat];
-                D.f[DIR_0MM  ] = &DD[DIR_0PP  *size_Mat];
-                D.f[DIR_0PP  ] = &DD[DIR_0MM  *size_Mat];
-                D.f[DIR_0MP  ] = &DD[DIR_0PM  *size_Mat];
-                D.f[DIR_0PM  ] = &DD[DIR_0MP  *size_Mat];
-                D.f[DIR_000] = &DD[DIR_000*size_Mat];
-                D.f[DIR_MMM ] = &DD[DIR_PPP *size_Mat];
-                D.f[DIR_PPM ] = &DD[DIR_MMP *size_Mat];
-                D.f[DIR_MPM ] = &DD[DIR_PMP *size_Mat];
-                D.f[DIR_PMM ] = &DD[DIR_MPP *size_Mat];
-                D.f[DIR_MMP ] = &DD[DIR_PPM *size_Mat];
-                D.f[DIR_PPP ] = &DD[DIR_MMM *size_Mat];
-                D.f[DIR_MPP ] = &DD[DIR_PMM *size_Mat];
-                D.f[DIR_PMP ] = &DD[DIR_MPM *size_Mat];
-            }
-            //////////////////////////////////////////////////////////////////////////
-            real drho = rho[k];//0.0f;//
-            real  vx1 = ux[k]; //0.0f;//
-            real  vx2 = uy[k]; //0.0f;//
-            real  vx3 = uz[k]; //0.0f;//
-            //////////////////////////////////////////////////////////////////////////
-            //index
-            //////////////////////////////////////////////////////////////////////////
-            unsigned int kzero= k;
-            unsigned int ke   = k;
-            unsigned int kw   = neighborX[k];
-            unsigned int kn   = k;
-            unsigned int ks   = neighborY[k];
-            unsigned int kt   = k;
-            unsigned int kb   = neighborZ[k];
-            unsigned int ksw  = neighborY[kw];
-            unsigned int kne  = k;
-            unsigned int kse  = ks;
-            unsigned int knw  = kw;
-            unsigned int kbw  = neighborZ[kw];
-            unsigned int kte  = k;
-            unsigned int kbe  = kb;
-            unsigned int ktw  = kw;
-            unsigned int kbs  = neighborZ[ks];
-            unsigned int ktn  = k;
-            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 = k;
-            unsigned int kbsw = neighborZ[ksw];
-	        //////////////////////////////////////////////////////////////////////////////
-	        //neighbor index
-	        uint kPx   = neighborX[k];
-	        uint kPy   = neighborY[k];
-	        uint kPz   = neighborZ[k];
-	        uint kMxyz = neighborWSB[k];
-	        uint kMx   = neighborZ[neighborY[kMxyz]];
-	        uint kMy   = neighborZ[neighborX[kMxyz]];
-	        uint kMz   = neighborY[neighborX[kMxyz]];
-            //////////////////////////////////////////////////////////////////////////
-	        //getVeloX//
-	        real vx1NeighborPx = ux[kPx];
-	        real vx1NeighborMx = ux[kMx];
-	        real vx1NeighborPy = ux[kPy];
-	        real vx1NeighborMy = ux[kMy];
-	        real vx1NeighborPz = ux[kPz];
-	        real vx1NeighborMz = ux[kMz];
-	        //getVeloY//
-	        real vx2NeighborPx = uy[kPx];
-	        real vx2NeighborMx = uy[kMx];
-	        real vx2NeighborPy = uy[kPy];
-	        real vx2NeighborMy = uy[kMy];
-	        real vx2NeighborPz = uy[kPz];
-	        real vx2NeighborMz = uy[kMz];
-	        //getVeloZ//
-	        real vx3NeighborPx = uz[kPx];
-	        real vx3NeighborMx = uz[kMx];
-	        real vx3NeighborPy = uz[kPy];
-	        real vx3NeighborMy = uz[kMy];
-	        real vx3NeighborPz = uz[kPz];
-	        real vx3NeighborMz = uz[kMz];
-            //////////////////////////////////////////////////////////////////////////
-
-	        real dvx1dx = (vx1NeighborPx - vx1NeighborMx) / c2o1;
-	        real dvx1dy = (vx1NeighborPy - vx1NeighborMy) / c2o1;
-	        real dvx1dz = (vx1NeighborPz - vx1NeighborMz) / c2o1;
-
-	        real dvx2dx = (vx2NeighborPx - vx2NeighborMx) / c2o1;
-	        real dvx2dy = (vx2NeighborPy - vx2NeighborMy) / c2o1;
-	        real dvx2dz = (vx2NeighborPz - vx2NeighborMz) / c2o1;
-
-	        real dvx3dx = (vx3NeighborPx - vx3NeighborMx) / c2o1;
-	        real dvx3dy = (vx3NeighborPy - vx3NeighborMy) / c2o1;
-	        real dvx3dz = (vx3NeighborPz - vx3NeighborMz) / c2o1;
-
-            //////////////////////////////////////////////////////////////////////////
-
-            // the following code is copy and pasted from VirtualFluidsVisitors/InitDistributionsBlockVisitor.cpp
-            // i.e. Konstantins code
-
-            real ax = dvx1dx;
-            real ay = dvx1dy;
-            real az = dvx1dz;
-
-            real bx = dvx2dx;
-            real by = dvx2dy;
-            real bz = dvx2dz;
-
-            real cx = dvx3dx;
-            real cy = dvx3dy;
-            real cz = dvx3dz;
-
-            real eps_new = c1o1;
-            real op      = c1o1;
-            real o       = omega;
-
-            real f_E    =            eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op));
-
-            real f_N    =    f_E   + eps_new *((2.*(ax - by))/(9.*o));
-            real f_T    =    f_E   + eps_new *((2.*(ax - cz))/(9.*o));
-            real f_NE   =            eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op));
-            real f_SE   =    f_NE  + eps_new *((  ay + bx )/(9.*o));
-            real f_TE   =            eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op));
-            real f_BE   =    f_TE  + eps_new *((  az + cx )/(9.*o));
-            real f_TN   =            eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op));
-            real f_BN   =    f_TN  + eps_new *((  bz + cy )/(9.*o));
-            real f_ZERO =            eps_new *((5.*(ax + by + cz))/(9.*op));
-            real f_TNE  =            eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o));
-            real f_TSW  =  - f_TNE - eps_new *((ay + bx)/(36.*o));
-            real f_TSE  =  - f_TNE - eps_new *((az + cx)/(36.*o));
-            real f_TNW  =  - f_TNE - eps_new *((bz + cy)/(36.*o));
-
-            //////////////////////////////////////////////////////////////////////////
-            real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-            (D.f[DIR_000])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
-            (D.f[DIR_P00   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
-            (D.f[DIR_M00   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-            (D.f[DIR_0P0   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-            (D.f[DIR_0M0   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-            (D.f[DIR_00P   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
-            (D.f[DIR_00M   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-            (D.f[DIR_PP0  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-            (D.f[DIR_MM0  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-            (D.f[DIR_PM0  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-            (D.f[DIR_MP0  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-            (D.f[DIR_P0P  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-            (D.f[DIR_M0M  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-            (D.f[DIR_P0M  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-            (D.f[DIR_M0P  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-            (D.f[DIR_0PP  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-            (D.f[DIR_0MM  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-            (D.f[DIR_0PM  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-            (D.f[DIR_0MP  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-            (D.f[DIR_PPP ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-            (D.f[DIR_MMM ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-            (D.f[DIR_PPM ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-            (D.f[DIR_MMP ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-            (D.f[DIR_PMP ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-            (D.f[DIR_MPM ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-            (D.f[DIR_PMM ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-            (D.f[DIR_MPP ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
-
-            //////////////////////////////////////////////////////////////////////////
-
-            (D.f[DIR_000])[kzero] += (c1o1+drho) * f_ZERO;
-            (D.f[DIR_P00   ])[ke   ] += (c1o1+drho) * f_E   ;
-            (D.f[DIR_M00   ])[kw   ] += (c1o1+drho) * f_E   ;
-            (D.f[DIR_0P0   ])[kn   ] += (c1o1+drho) * f_N   ;
-            (D.f[DIR_0M0   ])[ks   ] += (c1o1+drho) * f_N   ;
-            (D.f[DIR_00P   ])[kt   ] += (c1o1+drho) * f_T   ;
-            (D.f[DIR_00M   ])[kb   ] += (c1o1+drho) * f_T   ;
-            (D.f[DIR_PP0  ])[kne  ] += (c1o1+drho) * f_NE  ;
-            (D.f[DIR_MM0  ])[ksw  ] += (c1o1+drho) * f_NE  ;
-            (D.f[DIR_PM0  ])[kse  ] += (c1o1+drho) * f_SE  ;
-            (D.f[DIR_MP0  ])[knw  ] += (c1o1+drho) * f_SE  ;
-            (D.f[DIR_P0P  ])[kte  ] += (c1o1+drho) * f_TE  ;
-            (D.f[DIR_M0M  ])[kbw  ] += (c1o1+drho) * f_TE  ;
-            (D.f[DIR_P0M  ])[kbe  ] += (c1o1+drho) * f_BE  ;
-            (D.f[DIR_M0P  ])[ktw  ] += (c1o1+drho) * f_BE  ;
-            (D.f[DIR_0PP  ])[ktn  ] += (c1o1+drho) * f_TN  ;
-            (D.f[DIR_0MM  ])[kbs  ] += (c1o1+drho) * f_TN  ;
-            (D.f[DIR_0PM  ])[kbn  ] += (c1o1+drho) * f_BN  ;
-            (D.f[DIR_0MP  ])[kts  ] += (c1o1+drho) * f_BN  ;
-            (D.f[DIR_PPP ])[ktne ] += (c1o1+drho) * f_TNE ;
-            (D.f[DIR_MMM ])[kbsw ] += (c1o1+drho) * f_TNE ;
-            (D.f[DIR_PPM ])[kbne ] += (c1o1+drho) * f_TSW ;
-            (D.f[DIR_MMP ])[ktsw ] += (c1o1+drho) * f_TSW ;
-            (D.f[DIR_PMP ])[ktse ] += (c1o1+drho) * f_TSE ;
-            (D.f[DIR_MPM ])[kbnw ] += (c1o1+drho) * f_TSE ;
-            (D.f[DIR_PMM ])[kbse ] += (c1o1+drho) * f_TNW ;
-            (D.f[DIR_MPP ])[ktnw ] += (c1o1+drho) * f_TNW ;
-
-            //////////////////////////////////////////////////////////////////////////
-        }
-	    else
-	    {
-		    //////////////////////////////////////////////////////////////////////////
-		    Distributions27 D;
-		    D.f[DIR_000] = &DD[DIR_000*size_Mat];
-		    //////////////////////////////////////////////////////////////////////////
-		    (D.f[DIR_000])[k] = c96o1;
-		    //////////////////////////////////////////////////////////////////////////
-	    }
-   }
-}
\ 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
deleted file mode 100644
index 869169c525bf7f64a2c1ac9e1cf2d9678efdb28b..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu
+++ /dev/null
@@ -1,173 +0,0 @@
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-#include "math.h"
-
-__global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned int* geoD,
-	real* Conc,
-	real* ux,
-	real* uy,
-	real* uz,
-	unsigned int size_Mat,
-	real* DD27,
-	bool EvenOrOdd)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<size_Mat)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      unsigned int BC;
-      BC        =   geoD[k];
-
-      if( BC != GEO_SOLID && BC != GEO_VOID)
-      {
-         Distributions27 D27;
-         if (EvenOrOdd==true)
-         {
-            D27.f[DIR_P00   ] = &DD27[DIR_P00   *size_Mat];
-            D27.f[DIR_M00   ] = &DD27[DIR_M00   *size_Mat];
-            D27.f[DIR_0P0   ] = &DD27[DIR_0P0   *size_Mat];
-            D27.f[DIR_0M0   ] = &DD27[DIR_0M0   *size_Mat];
-            D27.f[DIR_00P   ] = &DD27[DIR_00P   *size_Mat];
-            D27.f[DIR_00M   ] = &DD27[DIR_00M   *size_Mat];
-            D27.f[DIR_PP0  ] = &DD27[DIR_PP0  *size_Mat];
-            D27.f[DIR_MM0  ] = &DD27[DIR_MM0  *size_Mat];
-            D27.f[DIR_PM0  ] = &DD27[DIR_PM0  *size_Mat];
-            D27.f[DIR_MP0  ] = &DD27[DIR_MP0  *size_Mat];
-            D27.f[DIR_P0P  ] = &DD27[DIR_P0P  *size_Mat];
-            D27.f[DIR_M0M  ] = &DD27[DIR_M0M  *size_Mat];
-            D27.f[DIR_P0M  ] = &DD27[DIR_P0M  *size_Mat];
-            D27.f[DIR_M0P  ] = &DD27[DIR_M0P  *size_Mat];
-            D27.f[DIR_0PP  ] = &DD27[DIR_0PP  *size_Mat];
-            D27.f[DIR_0MM  ] = &DD27[DIR_0MM  *size_Mat];
-            D27.f[DIR_0PM  ] = &DD27[DIR_0PM  *size_Mat];
-            D27.f[DIR_0MP  ] = &DD27[DIR_0MP  *size_Mat];
-            D27.f[DIR_000] = &DD27[DIR_000*size_Mat];
-            D27.f[DIR_PPP ] = &DD27[DIR_PPP *size_Mat];
-            D27.f[DIR_MMP ] = &DD27[DIR_MMP *size_Mat];
-            D27.f[DIR_PMP ] = &DD27[DIR_PMP *size_Mat];
-            D27.f[DIR_MPP ] = &DD27[DIR_MPP *size_Mat];
-            D27.f[DIR_PPM ] = &DD27[DIR_PPM *size_Mat];
-            D27.f[DIR_MMM ] = &DD27[DIR_MMM *size_Mat];
-            D27.f[DIR_PMM ] = &DD27[DIR_PMM *size_Mat];
-            D27.f[DIR_MPM ] = &DD27[DIR_MPM *size_Mat];
-         }
-         else
-         {
-            D27.f[DIR_M00   ] = &DD27[DIR_P00   *size_Mat];
-            D27.f[DIR_P00   ] = &DD27[DIR_M00   *size_Mat];
-            D27.f[DIR_0M0   ] = &DD27[DIR_0P0   *size_Mat];
-            D27.f[DIR_0P0   ] = &DD27[DIR_0M0   *size_Mat];
-            D27.f[DIR_00M   ] = &DD27[DIR_00P   *size_Mat];
-            D27.f[DIR_00P   ] = &DD27[DIR_00M   *size_Mat];
-            D27.f[DIR_MM0  ] = &DD27[DIR_PP0  *size_Mat];
-            D27.f[DIR_PP0  ] = &DD27[DIR_MM0  *size_Mat];
-            D27.f[DIR_MP0  ] = &DD27[DIR_PM0  *size_Mat];
-            D27.f[DIR_PM0  ] = &DD27[DIR_MP0  *size_Mat];
-            D27.f[DIR_M0M  ] = &DD27[DIR_P0P  *size_Mat];
-            D27.f[DIR_P0P  ] = &DD27[DIR_M0M  *size_Mat];
-            D27.f[DIR_M0P  ] = &DD27[DIR_P0M  *size_Mat];
-            D27.f[DIR_P0M  ] = &DD27[DIR_M0P  *size_Mat];
-            D27.f[DIR_0MM  ] = &DD27[DIR_0PP  *size_Mat];
-            D27.f[DIR_0PP  ] = &DD27[DIR_0MM  *size_Mat];
-            D27.f[DIR_0MP  ] = &DD27[DIR_0PM  *size_Mat];
-            D27.f[DIR_0PM  ] = &DD27[DIR_0MP  *size_Mat];
-            D27.f[DIR_000] = &DD27[DIR_000*size_Mat];
-            D27.f[DIR_MMM ] = &DD27[DIR_PPP *size_Mat];
-            D27.f[DIR_PPM ] = &DD27[DIR_MMP *size_Mat];
-            D27.f[DIR_MPM ] = &DD27[DIR_PMP *size_Mat];
-            D27.f[DIR_PMM ] = &DD27[DIR_MPP *size_Mat];
-            D27.f[DIR_MMP ] = &DD27[DIR_PPM *size_Mat];
-            D27.f[DIR_PPP ] = &DD27[DIR_MMM *size_Mat];
-            D27.f[DIR_MPP ] = &DD27[DIR_PMM *size_Mat];
-            D27.f[DIR_PMP ] = &DD27[DIR_MPM *size_Mat];
-         }
-         //////////////////////////////////////////////////////////////////////////
-         real ConcD = Conc[k];
-         real   vx1 = ux[k];
-         real   vx2 = uy[k];
-         real   vx3 = uz[k];
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //D3Q27
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //index
-         unsigned int kzero= k;
-         unsigned int ke   = k;
-         unsigned int kw   = neighborX[k];
-         unsigned int kn   = k;
-         unsigned int ks   = neighborY[k];
-         unsigned int kt   = k;
-         unsigned int kb   = neighborZ[k];
-         unsigned int ksw  = neighborY[kw];
-         unsigned int kne  = k;
-         unsigned int kse  = ks;
-         unsigned int knw  = kw;
-         unsigned int kbw  = neighborZ[kw];
-         unsigned int kte  = k;
-         unsigned int kbe  = kb;
-         unsigned int ktw  = kw;
-         unsigned int kbs  = neighborZ[ks];
-         unsigned int ktn  = k;
-         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 = k;
-         unsigned int kbsw = neighborZ[ksw];
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-         (D27.f[DIR_000])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
-         (D27.f[DIR_P00   ])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-         (D27.f[DIR_M00   ])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-         (D27.f[DIR_0P0   ])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-         (D27.f[DIR_0M0   ])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-         (D27.f[DIR_00P   ])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-         (D27.f[DIR_00M   ])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-         (D27.f[DIR_PP0  ])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-         (D27.f[DIR_MM0  ])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-         (D27.f[DIR_PM0  ])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-         (D27.f[DIR_MP0  ])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-         (D27.f[DIR_P0P  ])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-         (D27.f[DIR_M0M  ])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-         (D27.f[DIR_P0M  ])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-         (D27.f[DIR_M0P  ])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-         (D27.f[DIR_0PP  ])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-         (D27.f[DIR_0MM  ])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-         (D27.f[DIR_0PM  ])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-         (D27.f[DIR_0MP  ])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-         (D27.f[DIR_PPP ])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-         (D27.f[DIR_MMM ])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-         (D27.f[DIR_PPM ])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-         (D27.f[DIR_MMP ])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-         (D27.f[DIR_PMP ])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-         (D27.f[DIR_MPM ])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-         (D27.f[DIR_PMM ])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-         (D27.f[DIR_MPP ])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      }
-   }
-}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
deleted file mode 100644
index 87abb17176942594280fae7b7592f31303ba746d..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
+++ /dev/null
@@ -1,177 +0,0 @@
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-#include "math.h"
-
-__global__ void LB_Init_SP_27(unsigned int* neighborX,
-	unsigned int* neighborY,
-	unsigned int* neighborZ,
-	unsigned int* geoD,
-	real* rho,
-	real* ux,
-	real* uy,
-	real* uz,
-	unsigned int size_Mat,
-	real* DD,
-	bool EvenOrOdd)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<size_Mat)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      unsigned int BC;
-      BC        =   geoD[k];
-
-      if( BC != GEO_SOLID &&  BC != GEO_VOID)
-      {
-         Distributions27 D;
-         if (EvenOrOdd==true)
-         {
-            D.f[DIR_P00   ] = &DD[DIR_P00   *size_Mat];
-            D.f[DIR_M00   ] = &DD[DIR_M00   *size_Mat];
-            D.f[DIR_0P0   ] = &DD[DIR_0P0   *size_Mat];
-            D.f[DIR_0M0   ] = &DD[DIR_0M0   *size_Mat];
-            D.f[DIR_00P   ] = &DD[DIR_00P   *size_Mat];
-            D.f[DIR_00M   ] = &DD[DIR_00M   *size_Mat];
-            D.f[DIR_PP0  ] = &DD[DIR_PP0  *size_Mat];
-            D.f[DIR_MM0  ] = &DD[DIR_MM0  *size_Mat];
-            D.f[DIR_PM0  ] = &DD[DIR_PM0  *size_Mat];
-            D.f[DIR_MP0  ] = &DD[DIR_MP0  *size_Mat];
-            D.f[DIR_P0P  ] = &DD[DIR_P0P  *size_Mat];
-            D.f[DIR_M0M  ] = &DD[DIR_M0M  *size_Mat];
-            D.f[DIR_P0M  ] = &DD[DIR_P0M  *size_Mat];
-            D.f[DIR_M0P  ] = &DD[DIR_M0P  *size_Mat];
-            D.f[DIR_0PP  ] = &DD[DIR_0PP  *size_Mat];
-            D.f[DIR_0MM  ] = &DD[DIR_0MM  *size_Mat];
-            D.f[DIR_0PM  ] = &DD[DIR_0PM  *size_Mat];
-            D.f[DIR_0MP  ] = &DD[DIR_0MP  *size_Mat];
-            D.f[DIR_000] = &DD[DIR_000*size_Mat];
-            D.f[DIR_PPP ] = &DD[DIR_PPP *size_Mat];
-            D.f[DIR_MMP ] = &DD[DIR_MMP *size_Mat];
-            D.f[DIR_PMP ] = &DD[DIR_PMP *size_Mat];
-            D.f[DIR_MPP ] = &DD[DIR_MPP *size_Mat];
-            D.f[DIR_PPM ] = &DD[DIR_PPM *size_Mat];
-            D.f[DIR_MMM ] = &DD[DIR_MMM *size_Mat];
-            D.f[DIR_PMM ] = &DD[DIR_PMM *size_Mat];
-            D.f[DIR_MPM ] = &DD[DIR_MPM *size_Mat];
-         }
-         else
-         {
-            D.f[DIR_M00   ] = &DD[DIR_P00   *size_Mat];
-            D.f[DIR_P00   ] = &DD[DIR_M00   *size_Mat];
-            D.f[DIR_0M0   ] = &DD[DIR_0P0   *size_Mat];
-            D.f[DIR_0P0   ] = &DD[DIR_0M0   *size_Mat];
-            D.f[DIR_00M   ] = &DD[DIR_00P   *size_Mat];
-            D.f[DIR_00P   ] = &DD[DIR_00M   *size_Mat];
-            D.f[DIR_MM0  ] = &DD[DIR_PP0  *size_Mat];
-            D.f[DIR_PP0  ] = &DD[DIR_MM0  *size_Mat];
-            D.f[DIR_MP0  ] = &DD[DIR_PM0  *size_Mat];
-            D.f[DIR_PM0  ] = &DD[DIR_MP0  *size_Mat];
-            D.f[DIR_M0M  ] = &DD[DIR_P0P  *size_Mat];
-            D.f[DIR_P0P  ] = &DD[DIR_M0M  *size_Mat];
-            D.f[DIR_M0P  ] = &DD[DIR_P0M  *size_Mat];
-            D.f[DIR_P0M  ] = &DD[DIR_M0P  *size_Mat];
-            D.f[DIR_0MM  ] = &DD[DIR_0PP  *size_Mat];
-            D.f[DIR_0PP  ] = &DD[DIR_0MM  *size_Mat];
-            D.f[DIR_0MP  ] = &DD[DIR_0PM  *size_Mat];
-            D.f[DIR_0PM  ] = &DD[DIR_0MP  *size_Mat];
-            D.f[DIR_000] = &DD[DIR_000*size_Mat];
-            D.f[DIR_MMM ] = &DD[DIR_PPP *size_Mat];
-            D.f[DIR_PPM ] = &DD[DIR_MMP *size_Mat];
-            D.f[DIR_MPM ] = &DD[DIR_PMP *size_Mat];
-            D.f[DIR_PMM ] = &DD[DIR_MPP *size_Mat];
-            D.f[DIR_MMP ] = &DD[DIR_PPM *size_Mat];
-            D.f[DIR_PPP ] = &DD[DIR_MMM *size_Mat];
-            D.f[DIR_MPP ] = &DD[DIR_PMM *size_Mat];
-            D.f[DIR_PMP ] = &DD[DIR_MPM *size_Mat];
-         }
-         //////////////////////////////////////////////////////////////////////////
-         real drho = rho[k];//0.0f;//
-         real  vx1 = ux[k]; //0.0f;//
-         real  vx2 = uy[k]; //0.0f;//
-         real  vx3 = uz[k]; //0.0f;//
-         //////////////////////////////////////////////////////////////////////////
-         //index
-         //////////////////////////////////////////////////////////////////////////
-         unsigned int kzero= k;
-         unsigned int ke   = k;
-         unsigned int kw   = neighborX[k];
-         unsigned int kn   = k;
-         unsigned int ks   = neighborY[k];
-         unsigned int kt   = k;
-         unsigned int kb   = neighborZ[k];
-         unsigned int ksw  = neighborY[kw];
-         unsigned int kne  = k;
-         unsigned int kse  = ks;
-         unsigned int knw  = kw;
-         unsigned int kbw  = neighborZ[kw];
-         unsigned int kte  = k;
-         unsigned int kbe  = kb;
-         unsigned int ktw  = kw;
-         unsigned int kbs  = neighborZ[ks];
-         unsigned int ktn  = k;
-         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 = k;
-         unsigned int kbsw = neighborZ[ksw];
-         //////////////////////////////////////////////////////////////////////////
-         real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-         (D.f[DIR_000])[kzero] =   c8o27* (drho-cu_sq);
-         (D.f[DIR_P00   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-         (D.f[DIR_M00   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-         (D.f[DIR_0P0   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-         (D.f[DIR_0M0   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-         (D.f[DIR_00P   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-         (D.f[DIR_00M   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-         (D.f[DIR_PP0  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-         (D.f[DIR_MM0  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-         (D.f[DIR_PM0  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-         (D.f[DIR_MP0  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-         (D.f[DIR_P0P  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-         (D.f[DIR_M0M  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-         (D.f[DIR_P0M  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-         (D.f[DIR_M0P  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-         (D.f[DIR_0PP  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-         (D.f[DIR_0MM  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-         (D.f[DIR_0PM  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-         (D.f[DIR_0MP  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-         (D.f[DIR_PPP ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-         (D.f[DIR_MMM ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-         (D.f[DIR_PPM ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-         (D.f[DIR_MMP ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-         (D.f[DIR_PMP ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-         (D.f[DIR_MPM ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-         (D.f[DIR_PMM ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-         (D.f[DIR_MPP ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-      }
-	  else
-	  {
-		  //////////////////////////////////////////////////////////////////////////
-		  Distributions27 D;
-		  D.f[DIR_000] = &DD[DIR_000*size_Mat];
-		  //////////////////////////////////////////////////////////////////////////
-		  (D.f[DIR_000])[k] = c96o1;
-		  //////////////////////////////////////////////////////////////////////////
-	  }
-   }
-}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h b/src/gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h
deleted file mode 100644
index 2ecbed5fd6c4b84b92c05953a4c96ecdc3b988de..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef FIND_NEIGHBORS_H
-#define FIND_NEIGHBORS_H
-
-#include "Parameter/Parameter.h"
-#include "lbm/constants/D3Q27.h"
-
-using namespace vf::lbm::dir;
-
-// Only use for fluid nodes!
-inline uint getNeighborIndex(LBMSimulationParameter *parH, const uint position, const int direction)
-{
-    uint nodeIndex = position;
-
-    if (mapForPointerChasing.at(direction).counterInverse != 0) {
-        nodeIndex = parH->neighborInverse[nodeIndex];
-    }
-
-    for (uint x = 0; x < mapForPointerChasing.at(direction).counterX; x++) {
-        nodeIndex = parH->neighborX[nodeIndex];
-    }
-
-    for (uint y = 0; y < mapForPointerChasing.at(direction).counterY; y++) {
-        nodeIndex = parH->neighborY[nodeIndex];
-    }
-
-    for (uint z = 0; z < mapForPointerChasing.at(direction).counterZ; z++) {
-        nodeIndex = parH->neighborZ[nodeIndex];
-    }
-
-    return nodeIndex;
-}
-
-#endif
diff --git a/src/gpu/VirtualFluids_GPU/CMakeLists.txt b/src/gpu/core/CMakeLists.txt
similarity index 70%
rename from src/gpu/VirtualFluids_GPU/CMakeLists.txt
rename to src/gpu/core/CMakeLists.txt
index 686aa1bb79c6b7adb5e066a25492aae84f3d9025..7fa94c2b16aa35d11d926fecefa700466a8c5ebb 100644
--- a/src/gpu/VirtualFluids_GPU/CMakeLists.txt
+++ b/src/gpu/core/CMakeLists.txt
@@ -1,25 +1,25 @@
-project(VirtualFluids_GPU LANGUAGES CUDA CXX)
+project(gpu_core LANGUAGES CUDA CXX)
 
 
-vf_add_library(PUBLIC_LINK basics lbm parallel PRIVATE_LINK GridGenerator cuda_helper)
+vf_add_library(NAME gpu_core PUBLIC_LINK basics lbm parallel logger PRIVATE_LINK GridGenerator cuda_helper)
 
 #SET(TPN_WIN32 "/EHsc")
 #https://stackoverflow.com/questions/6832666/lnk2019-when-including-asio-headers-solution-generated-with-cmake
 #https://stackoverflow.com/questions/27442885/syntax-error-with-stdnumeric-limitsmax
 
-set_target_properties(VirtualFluids_GPU PROPERTIES CUDA_SEPARABLE_COMPILATION ON POSITION_INDEPENDENT_CODE ON)
+set_target_properties(gpu_core PROPERTIES CUDA_SEPARABLE_COMPILATION ON POSITION_INDEPENDENT_CODE ON)
 
 
 if(MSVC)
-    set_target_properties(VirtualFluids_GPU PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
+    set_target_properties(gpu_core PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
 endif()
 
-vf_add_tests()
+vf_add_tests(NAME gpu_core)
 
 if(BUILD_VF_UNIT_TESTS)
-    # set_target_properties(VirtualFluids_GPUTests PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
-    target_include_directories(VirtualFluids_GPUTests PRIVATE "${VF_THIRD_DIR}/cuda_samples/")
-    target_include_directories(VirtualFluids_GPUTests PRIVATE "${VF_ROOT_DIR}/src/gpu/GridGenerator/")
+    # set_target_properties(gpu_coreTests PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
+    target_include_directories(gpu_coreTests PRIVATE "${VF_THIRD_DIR}/cuda_samples/")
+    target_include_directories(gpu_coreTests PRIVATE "${VF_ROOT_DIR}/src/gpu/GridGenerator/")
     set_source_files_properties(Communication/ExchangeData27Test.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(Factories/BoundaryConditionFactoryTest.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp PROPERTIES LANGUAGE CUDA)
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.cpp b/src/gpu/core/Calculation/Calc2ndMoments.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.cpp
rename to src/gpu/core/Calculation/Calc2ndMoments.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.h b/src/gpu/core/Calculation/Calc2ndMoments.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.h
rename to src/gpu/core/Calculation/Calc2ndMoments.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp b/src/gpu/core/Calculation/CalcMedian.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp
rename to src/gpu/core/Calculation/CalcMedian.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.h b/src/gpu/core/Calculation/CalcMedian.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.h
rename to src/gpu/core/Calculation/CalcMedian.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.cpp b/src/gpu/core/Calculation/CalcTurbulenceIntensity.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.cpp
rename to src/gpu/core/Calculation/CalcTurbulenceIntensity.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.h b/src/gpu/core/Calculation/CalcTurbulenceIntensity.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.h
rename to src/gpu/core/Calculation/CalcTurbulenceIntensity.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CollisionStrategy.h b/src/gpu/core/Calculation/CollisionStrategy.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/CollisionStrategy.h
rename to src/gpu/core/Calculation/CollisionStrategy.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp b/src/gpu/core/Calculation/CollisisionStrategy.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp
rename to src/gpu/core/Calculation/CollisisionStrategy.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Cp.cpp b/src/gpu/core/Calculation/Cp.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/Cp.cpp
rename to src/gpu/core/Calculation/Cp.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Cp.h b/src/gpu/core/Calculation/Cp.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/Cp.h
rename to src/gpu/core/Calculation/Cp.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp b/src/gpu/core/Calculation/DragLift.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp
rename to src/gpu/core/Calculation/DragLift.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/DragLift.h b/src/gpu/core/Calculation/DragLift.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/DragLift.h
rename to src/gpu/core/Calculation/DragLift.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.cpp b/src/gpu/core/Calculation/ForceCalculations.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.cpp
rename to src/gpu/core/Calculation/ForceCalculations.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.h b/src/gpu/core/Calculation/ForceCalculations.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.h
rename to src/gpu/core/Calculation/ForceCalculations.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp b/src/gpu/core/Calculation/PlaneCalculations.cpp
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp
rename to src/gpu/core/Calculation/PlaneCalculations.cpp
index 6557a2a0730c14cc1b26097c5025827128d3a1ce..48896c9e1f809552092d10f538f0b184e523d3b8 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp
+++ b/src/gpu/core/Calculation/PlaneCalculations.cpp
@@ -23,13 +23,13 @@ void setSizeOfPlane(Parameter* para, int lev, unsigned int z)
       for (unsigned int i=1; i<para->getParH(lev)->gridNX + 2 * STARTOFFX - 1; i++)
       {
          mm[0]= para->getParH(lev)->nx*(para->getParH(lev)->ny*k + j) + i;
-         mm[1]= mm[0]                                                                       -1; //DIR_M00
-         mm[2]= mm[0]                                                -para->getParH(lev)->nx-1; //DIR_MM0
-         mm[3]= mm[0]                                                -para->getParH(lev)->nx;   //DIR_0M0
-         mm[4]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny);                          //DIR_00M
-         mm[5]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)                       -1; //DIR_M0M
-         mm[6]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx;   //DIR_0MM
-         mm[7]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx-1; //DIR_MMM
+         mm[1]= mm[0]                                                                       -1; //dM00
+         mm[2]= mm[0]                                                -para->getParH(lev)->nx-1; //dMM0
+         mm[3]= mm[0]                                                -para->getParH(lev)->nx;   //d0M0
+         mm[4]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny);                          //d00M
+         mm[5]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)                       -1; //dM0M
+         mm[6]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx;   //d0MM
+         mm[7]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx-1; //dMMM
 
          if ( para->getParH(lev)->geo[mm[0]] != GEO_VOID ||
               para->getParH(lev)->geo[mm[1]] != GEO_VOID ||
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.h b/src/gpu/core/Calculation/PlaneCalculations.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.h
rename to src/gpu/core/Calculation/PlaneCalculations.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.cpp b/src/gpu/core/Calculation/PorousMedia.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.cpp
rename to src/gpu/core/Calculation/PorousMedia.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.h b/src/gpu/core/Calculation/PorousMedia.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.h
rename to src/gpu/core/Calculation/PorousMedia.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.cpp b/src/gpu/core/Calculation/RefinementStrategy.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.cpp
rename to src/gpu/core/Calculation/RefinementStrategy.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.h b/src/gpu/core/Calculation/RefinementStrategy.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.h
rename to src/gpu/core/Calculation/RefinementStrategy.h
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/gpu/core/Calculation/UpdateGrid27.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
rename to src/gpu/core/Calculation/UpdateGrid27.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h b/src/gpu/core/Calculation/UpdateGrid27.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
rename to src/gpu/core/Calculation/UpdateGrid27.h
diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp b/src/gpu/core/Communication/ExchangeData27.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp
rename to src/gpu/core/Communication/ExchangeData27.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.h b/src/gpu/core/Communication/ExchangeData27.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.h
rename to src/gpu/core/Communication/ExchangeData27.h
diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp b/src/gpu/core/Communication/ExchangeData27Test.cpp
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
rename to src/gpu/core/Communication/ExchangeData27Test.cpp
index 473e8c1a5424cf7ddd05f6ed0a534814a3971dc6..c1d03928ec05f1b38920aa5a4b006418a3c6fe9b 100644
--- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
+++ b/src/gpu/core/Communication/ExchangeData27Test.cpp
@@ -3,7 +3,7 @@
 #include <filesystem>
 
 #include "ExchangeData27.h"
-#include "gpu/VirtualFluids_GPU/LBM/LB.h"
+#include "gpu/core/LBM/LB.h"
 
 #include <basics/config/ConfigurationFile.h>
 
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp b/src/gpu/core/DataStructureInitializer/GridProvider.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
rename to src/gpu/core/DataStructureInitializer/GridProvider.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h b/src/gpu/core/DataStructureInitializer/GridProvider.h
similarity index 95%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
rename to src/gpu/core/DataStructureInitializer/GridProvider.h
index 28d2f39e8b469f83672c6cbce162e867686d14ed..78451b14d231342a57b8881de99c3925e066ef4d 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
+++ b/src/gpu/core/DataStructureInitializer/GridProvider.h
@@ -6,8 +6,8 @@
 #include <memory>
 
 #include "LBM/LB.h"
-#include "PointerDefinitions.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/PointerDefinitions.h>
+
 #include "gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h"
 namespace vf::parallel
 {
@@ -18,7 +18,7 @@ class Parameter;
 class GridBuilder;
 class CudaMemoryManager;
 
-class VIRTUALFLUIDS_GPU_EXPORT GridProvider
+class GridProvider
 {
 public:
     static std::shared_ptr<GridProvider> makeGridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::parallel::Communicator& communicator);
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.h
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.h
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp
index 000e97e9a14e51d140dfa30cb325d2a04cd83f50..ead8794bf7994cee875e66953f5255d2ba1fb7d0 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
+++ b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp
@@ -648,9 +648,9 @@ void GridReader::modifyQElement(std::shared_ptr<BoundaryQs> boundaryQ, unsigned
 {
 	QforBoundaryConditions Q;
 	real* QQ = para->getParH(level)->geometryBC.q27[0];
-	Q.q27[vf::lbm::dir::DIR_000] = &QQ[vf::lbm::dir::DIR_000 * para->getParH(level)->geometryBC.numberOfBCnodes];
+	Q.q27[vf::lbm::dir::d000] = &QQ[vf::lbm::dir::d000 * para->getParH(level)->geometryBC.numberOfBCnodes];
 	for (unsigned int i = 0; i < boundaryQ->getSize(level); i++)
-		Q.q27[vf::lbm::dir::DIR_000][i] = 0.0f;
+		Q.q27[vf::lbm::dir::d000][i] = 0.0f;
 }
 
 /*------------------------------------------------------------------------------------------------*/
@@ -721,33 +721,33 @@ void GridReader::initalGridInformations()
 
 void GridReader::setQ27Size(QforBoundaryConditions &Q, real* QQ, unsigned int sizeQ) const
 {
-	Q.q27[DIR_P00] = &QQ[DIR_P00   *sizeQ];
-	Q.q27[DIR_M00] = &QQ[DIR_M00   *sizeQ];
-	Q.q27[DIR_0P0] = &QQ[DIR_0P0   *sizeQ];
-	Q.q27[DIR_0M0] = &QQ[DIR_0M0   *sizeQ];
-	Q.q27[DIR_00P] = &QQ[DIR_00P   *sizeQ];
-	Q.q27[DIR_00M] = &QQ[DIR_00M   *sizeQ];
-	Q.q27[DIR_PP0] = &QQ[DIR_PP0  *sizeQ];
-	Q.q27[DIR_MM0] = &QQ[DIR_MM0  *sizeQ];
-	Q.q27[DIR_PM0] = &QQ[DIR_PM0  *sizeQ];
-	Q.q27[DIR_MP0] = &QQ[DIR_MP0  *sizeQ];
-	Q.q27[DIR_P0P] = &QQ[DIR_P0P  *sizeQ];
-	Q.q27[DIR_M0M] = &QQ[DIR_M0M  *sizeQ];
-	Q.q27[DIR_P0M] = &QQ[DIR_P0M  *sizeQ];
-	Q.q27[DIR_M0P] = &QQ[DIR_M0P  *sizeQ];
-	Q.q27[DIR_0PP] = &QQ[DIR_0PP  *sizeQ];
-	Q.q27[DIR_0MM] = &QQ[DIR_0MM  *sizeQ];
-	Q.q27[DIR_0PM] = &QQ[DIR_0PM  *sizeQ];
-	Q.q27[DIR_0MP] = &QQ[DIR_0MP  *sizeQ];
-	Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-	Q.q27[DIR_PPP] = &QQ[DIR_PPP *sizeQ];
-	Q.q27[DIR_MMP] = &QQ[DIR_MMP *sizeQ];
-	Q.q27[DIR_PMP] = &QQ[DIR_PMP *sizeQ];
-	Q.q27[DIR_MPP] = &QQ[DIR_MPP *sizeQ];
-	Q.q27[DIR_PPM] = &QQ[DIR_PPM *sizeQ];
-	Q.q27[DIR_MMM] = &QQ[DIR_MMM *sizeQ];
-	Q.q27[DIR_PMM] = &QQ[DIR_PMM *sizeQ];
-	Q.q27[DIR_MPM] = &QQ[DIR_MPM *sizeQ];
+	Q.q27[dP00] = &QQ[dP00   *sizeQ];
+	Q.q27[dM00] = &QQ[dM00   *sizeQ];
+	Q.q27[d0P0] = &QQ[d0P0   *sizeQ];
+	Q.q27[d0M0] = &QQ[d0M0   *sizeQ];
+	Q.q27[d00P] = &QQ[d00P   *sizeQ];
+	Q.q27[d00M] = &QQ[d00M   *sizeQ];
+	Q.q27[dPP0] = &QQ[dPP0  *sizeQ];
+	Q.q27[dMM0] = &QQ[dMM0  *sizeQ];
+	Q.q27[dPM0] = &QQ[dPM0  *sizeQ];
+	Q.q27[dMP0] = &QQ[dMP0  *sizeQ];
+	Q.q27[dP0P] = &QQ[dP0P  *sizeQ];
+	Q.q27[dM0M] = &QQ[dM0M  *sizeQ];
+	Q.q27[dP0M] = &QQ[dP0M  *sizeQ];
+	Q.q27[dM0P] = &QQ[dM0P  *sizeQ];
+	Q.q27[d0PP] = &QQ[d0PP  *sizeQ];
+	Q.q27[d0MM] = &QQ[d0MM  *sizeQ];
+	Q.q27[d0PM] = &QQ[d0PM  *sizeQ];
+	Q.q27[d0MP] = &QQ[d0MP  *sizeQ];
+	Q.q27[d000] = &QQ[d000*sizeQ];
+	Q.q27[dPPP] = &QQ[dPPP *sizeQ];
+	Q.q27[dMMP] = &QQ[dMMP *sizeQ];
+	Q.q27[dPMP] = &QQ[dPMP *sizeQ];
+	Q.q27[dMPP] = &QQ[dMPP *sizeQ];
+	Q.q27[dPPM] = &QQ[dPPM *sizeQ];
+	Q.q27[dMMM] = &QQ[dMMM *sizeQ];
+	Q.q27[dPMM] = &QQ[dPMM *sizeQ];
+	Q.q27[dMPM] = &QQ[dMPM *sizeQ];
 }
 
 void GridReader::setSizeNoSlip(std::shared_ptr<BoundaryQs> boundaryQ, unsigned int level) const
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h
index d244e76569fe213978086ab412725e4450da66e4..84e3ad17989bd3d0bd9ffcd9ed36d87a8a7b494b 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
+++ b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h
@@ -9,14 +9,14 @@
 
 #include "LBM/LB.h"
 
-//#include "VirtualFluids_GPU_export.h"
+//
 
 class Parameter;
 class BoundaryValues;
 class BoundaryQs;
 class CoordNeighborGeoV;
 
-class VIRTUALFLUIDS_GPU_EXPORT GridReader : public GridProvider
+class GridReader : public GridProvider
 {
 private:
     bool binaer;
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.h
rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
index d8166c0374ec9b170b13120000ba757072e0bd16..cef51f3e0ed1ff3acb675f0423cec8b06af742f2 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
+++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
@@ -1138,7 +1138,7 @@ void GridGenerator::allocArrays_BoundaryQs()
             //////////////////////////////////////////////////////////////////
             for (int node_i = 0; node_i < numberOfGeometryNodes; node_i++)
             {
-                Q.q27[DIR_000][node_i] = 0.0f;
+                Q.q27[d000][node_i] = 0.0f;
             }
             //for(int test = 0; test < 3; test++)
             //{
@@ -1358,31 +1358,31 @@ std::string GridGenerator::checkNeighbor(int level, real x, real y, real z, int
 }
 
 void GridGenerator::getPointersToBoundaryConditions(QforBoundaryConditions& boundaryConditionStruct, real* subgridDistances, const unsigned int numberOfBCnodes){
-    boundaryConditionStruct.q27[DIR_P00] = &subgridDistances[DIR_P00 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_M00] = &subgridDistances[DIR_M00 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_0P0] = &subgridDistances[DIR_0P0 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_0M0] = &subgridDistances[DIR_0M0 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_00P] = &subgridDistances[DIR_00P * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_00M] = &subgridDistances[DIR_00M * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_PP0] = &subgridDistances[DIR_PP0 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_MM0] = &subgridDistances[DIR_MM0 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_PM0] = &subgridDistances[DIR_PM0 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_MP0] = &subgridDistances[DIR_MP0 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_P0P] = &subgridDistances[DIR_P0P * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_M0M] = &subgridDistances[DIR_M0M * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_P0M] = &subgridDistances[DIR_P0M * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_M0P] = &subgridDistances[DIR_M0P * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_0PP] = &subgridDistances[DIR_0PP * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_0MM] = &subgridDistances[DIR_0MM * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_0PM] = &subgridDistances[DIR_0PM * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_0MP] = &subgridDistances[DIR_0MP * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_000] = &subgridDistances[DIR_000 * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_PPP] = &subgridDistances[DIR_PPP * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_MMP] = &subgridDistances[DIR_MMP * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_PMP] = &subgridDistances[DIR_PMP * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_MPP] = &subgridDistances[DIR_MPP * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_PPM] = &subgridDistances[DIR_PPM * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_MMM] = &subgridDistances[DIR_MMM * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_PMM] = &subgridDistances[DIR_PMM * numberOfBCnodes];
-    boundaryConditionStruct.q27[DIR_MPM] = &subgridDistances[DIR_MPM * numberOfBCnodes];
+    boundaryConditionStruct.q27[dP00] = &subgridDistances[dP00 * numberOfBCnodes];
+    boundaryConditionStruct.q27[dM00] = &subgridDistances[dM00 * numberOfBCnodes];
+    boundaryConditionStruct.q27[d0P0] = &subgridDistances[d0P0 * numberOfBCnodes];
+    boundaryConditionStruct.q27[d0M0] = &subgridDistances[d0M0 * numberOfBCnodes];
+    boundaryConditionStruct.q27[d00P] = &subgridDistances[d00P * numberOfBCnodes];
+    boundaryConditionStruct.q27[d00M] = &subgridDistances[d00M * numberOfBCnodes];
+    boundaryConditionStruct.q27[dPP0] = &subgridDistances[dPP0 * numberOfBCnodes];
+    boundaryConditionStruct.q27[dMM0] = &subgridDistances[dMM0 * numberOfBCnodes];
+    boundaryConditionStruct.q27[dPM0] = &subgridDistances[dPM0 * numberOfBCnodes];
+    boundaryConditionStruct.q27[dMP0] = &subgridDistances[dMP0 * numberOfBCnodes];
+    boundaryConditionStruct.q27[dP0P] = &subgridDistances[dP0P * numberOfBCnodes];
+    boundaryConditionStruct.q27[dM0M] = &subgridDistances[dM0M * numberOfBCnodes];
+    boundaryConditionStruct.q27[dP0M] = &subgridDistances[dP0M * numberOfBCnodes];
+    boundaryConditionStruct.q27[dM0P] = &subgridDistances[dM0P * numberOfBCnodes];
+    boundaryConditionStruct.q27[d0PP] = &subgridDistances[d0PP * numberOfBCnodes];
+    boundaryConditionStruct.q27[d0MM] = &subgridDistances[d0MM * numberOfBCnodes];
+    boundaryConditionStruct.q27[d0PM] = &subgridDistances[d0PM * numberOfBCnodes];
+    boundaryConditionStruct.q27[d0MP] = &subgridDistances[d0MP * numberOfBCnodes];
+    boundaryConditionStruct.q27[d000] = &subgridDistances[d000 * numberOfBCnodes];
+    boundaryConditionStruct.q27[dPPP] = &subgridDistances[dPPP * numberOfBCnodes];
+    boundaryConditionStruct.q27[dMMP] = &subgridDistances[dMMP * numberOfBCnodes];
+    boundaryConditionStruct.q27[dPMP] = &subgridDistances[dPMP * numberOfBCnodes];
+    boundaryConditionStruct.q27[dMPP] = &subgridDistances[dMPP * numberOfBCnodes];
+    boundaryConditionStruct.q27[dPPM] = &subgridDistances[dPPM * numberOfBCnodes];
+    boundaryConditionStruct.q27[dMMM] = &subgridDistances[dMMM * numberOfBCnodes];
+    boundaryConditionStruct.q27[dPMM] = &subgridDistances[dPMM * numberOfBCnodes];
+    boundaryConditionStruct.q27[dMPM] = &subgridDistances[dMPM * numberOfBCnodes];
 }
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
index 9c0d50a06e587c2776c63d164f1d46c4ac910eab..9b1eafb431a88029f75af68706f80d493737128d 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
+++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
@@ -67,7 +67,7 @@ private:
     const uint mpiProcessID;
 
 public:
-    VIRTUALFLUIDS_GPU_EXPORT GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::parallel::Communicator& communicator);
+    GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::parallel::Communicator& communicator);
     ~GridGenerator() override;
     //! \brief overwrites the default IndexRearrangementForStreams
     void setIndexRearrangementForStreams(std::unique_ptr<IndexRearrangementForStreams>&& indexRearrangement);
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
index 8fc0f78d1f964339258dbeae1658445bc4547e4f..fbacf99d460fe64a83aa5aec0db4b43600d00941 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
+++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
@@ -1,7 +1,7 @@
 #include "GridGenerator.h"
 #include <gmock/gmock.h>
 
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 #include "GPU/CudaMemoryManager.h"
 #include "IndexRearrangementForStreams.h"
 #include "NullCommunicator.h"
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp
rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.cpp b/src/gpu/core/Factories/BoundaryConditionFactory.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.cpp
rename to src/gpu/core/Factories/BoundaryConditionFactory.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h b/src/gpu/core/Factories/BoundaryConditionFactory.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h
rename to src/gpu/core/Factories/BoundaryConditionFactory.h
diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp b/src/gpu/core/Factories/BoundaryConditionFactoryTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp
rename to src/gpu/core/Factories/BoundaryConditionFactoryTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.cpp b/src/gpu/core/Factories/GridScalingFactory.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.cpp
rename to src/gpu/core/Factories/GridScalingFactory.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h b/src/gpu/core/Factories/GridScalingFactory.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h
rename to src/gpu/core/Factories/GridScalingFactory.h
diff --git a/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.cpp b/src/gpu/core/FindInterface/FindInterface.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.cpp
rename to src/gpu/core/FindInterface/FindInterface.cpp
diff --git a/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h b/src/gpu/core/FindInterface/FindInterface.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h
rename to src/gpu/core/FindInterface/FindInterface.h
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp b/src/gpu/core/FindQ/DefineBCs.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp
rename to src/gpu/core/FindQ/DefineBCs.cpp
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h b/src/gpu/core/FindQ/DefineBCs.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h
rename to src/gpu/core/FindQ/DefineBCs.h
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp b/src/gpu/core/FindQ/FindQ.cpp
similarity index 59%
rename from src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp
rename to src/gpu/core/FindQ/FindQ.cpp
index bc12456ceb632b3249d8757fe23c811aad6ec541..a961fdf71e2f518c8cb41c0d57fe9c87616ec7d4 100644
--- a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp
+++ b/src/gpu/core/FindQ/FindQ.cpp
@@ -14,7 +14,7 @@ void findQ(Parameter* para, int lev)
    VF_LOG_CRITICAL("findQ() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    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};
@@ -41,33 +41,33 @@ void findQ(Parameter* para, int lev)
    //real        radius  = nny / 5.f;//2.56f;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QforBoundaryConditions Q;
-   Q.q27[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-   Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-   Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-   Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-   Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-   Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-   Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-   Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-   Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-   Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-   Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-   Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-   Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-   Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-   Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-   Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-   Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-   Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-   Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-   Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-   Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-   Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-   Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-   Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-   Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-   Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-   Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+   Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+   Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+   Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+   Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+   Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+   Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+   Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+   Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+   Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+   Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+   Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+   Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+   Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+   Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+   Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+   Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+   Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+   Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+   Q.q27[d000] = &QQ[d000*sizeQ];
+   Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+   Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+   Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+   Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+   Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+   Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+   Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+   Q.q27[dMPM ] = &QQ[dMPM *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
@@ -97,89 +97,89 @@ void findQ(Parameter* para, int lev)
                {
                   QIN.k[QIN.numberOfBCnodes]          = kk[m];
 
-                  //Q.q27[DIR_P00   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_000][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = 0.f;
-
-                  //Q.q27[DIR_P00   ][QIN.numberOfBCnodes] = ON[DIR_M00   ];
-                  //Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = ON[DIR_P00   ];
-                  //Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = ON[DIR_0M0   ];
-                  //Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = ON[DIR_0P0   ];
-                  //Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = ON[DIR_00M   ];
-                  //Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = ON[DIR_00P   ];
-                  //Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = ON[DIR_MM0  ];
-                  //Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = ON[DIR_PP0  ];
-                  //Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = ON[DIR_MP0  ];
-                  //Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = ON[DIR_PM0  ];
-                  //Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = ON[DIR_M0M  ];
-                  //Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = ON[DIR_P0P  ];
-                  //Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = ON[DIR_M0P  ];
-                  //Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = ON[DIR_P0M  ];
-                  //Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = ON[DIR_0MM  ];
-                  //Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = ON[DIR_0PP  ];
-                  //Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = ON[DIR_0MP  ];
-                  //Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = ON[DIR_0PM  ];
-                  //Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000];
-                  //Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_MMM ];
-                  //Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_PPM ];
-                  //Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_MPM ];
-                  //Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_PMM ];
-                  //Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_MMP ];
-                  //Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_PPP ];
-                  //Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_MPP ];
-                  //Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_PMP ];
-
-                  Q.q27[DIR_P00   ][QIN.numberOfBCnodes] = ON[DIR_P00   ];
-                  Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = ON[DIR_M00   ];
-                  Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = ON[DIR_0P0   ];
-                  Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = ON[DIR_0M0   ];
-                  Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = ON[DIR_00P   ];
-                  Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = ON[DIR_00M   ];
-                  Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = ON[DIR_PP0  ];
-                  Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = ON[DIR_MM0  ];
-                  Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = ON[DIR_PM0  ];
-                  Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = ON[DIR_MP0  ];
-                  Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = ON[DIR_P0P  ];
-                  Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = ON[DIR_M0M  ];
-                  Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = ON[DIR_P0M  ];
-                  Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = ON[DIR_M0P  ];
-                  Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = ON[DIR_0PP  ];
-                  Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = ON[DIR_0MM  ];
-                  Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = ON[DIR_0PM  ];
-                  Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = ON[DIR_0MP  ];
-                  Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000];
-                  Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ];
-                  Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ];
-                  Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ];
-                  Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ];
-                  Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ];
-                  Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ];
-                  Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ];
-                  Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ];
+                  //Q.q27[dP00   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dM00   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[d0P0   ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[d0M0   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[d00P   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[d00M   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dPP0  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[dMM0  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dPM0  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dMP0  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[dP0P  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dM0M  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dP0M  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dM0P  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[d0PP  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[d0MM  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[d0PM  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[d0MP  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[d000][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dPPP ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[dMMP ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dPMP ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dMPP ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[dPPM ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[dMMM ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dPMM ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[dMPM ][QIN.numberOfBCnodes] = 0.f;
+
+                  //Q.q27[dP00   ][QIN.numberOfBCnodes] = ON[dM00   ];
+                  //Q.q27[dM00   ][QIN.numberOfBCnodes] = ON[dP00   ];
+                  //Q.q27[d0P0   ][QIN.numberOfBCnodes] = ON[d0M0   ];
+                  //Q.q27[d0M0   ][QIN.numberOfBCnodes] = ON[d0P0   ];
+                  //Q.q27[d00P   ][QIN.numberOfBCnodes] = ON[d00M   ];
+                  //Q.q27[d00M   ][QIN.numberOfBCnodes] = ON[d00P   ];
+                  //Q.q27[dPP0  ][QIN.numberOfBCnodes] = ON[dMM0  ];
+                  //Q.q27[dMM0  ][QIN.numberOfBCnodes] = ON[dPP0  ];
+                  //Q.q27[dPM0  ][QIN.numberOfBCnodes] = ON[dMP0  ];
+                  //Q.q27[dMP0  ][QIN.numberOfBCnodes] = ON[dPM0  ];
+                  //Q.q27[dP0P  ][QIN.numberOfBCnodes] = ON[dM0M  ];
+                  //Q.q27[dM0M  ][QIN.numberOfBCnodes] = ON[dP0P  ];
+                  //Q.q27[dP0M  ][QIN.numberOfBCnodes] = ON[dM0P  ];
+                  //Q.q27[dM0P  ][QIN.numberOfBCnodes] = ON[dP0M  ];
+                  //Q.q27[d0PP  ][QIN.numberOfBCnodes] = ON[d0MM  ];
+                  //Q.q27[d0MM  ][QIN.numberOfBCnodes] = ON[d0PP  ];
+                  //Q.q27[d0PM  ][QIN.numberOfBCnodes] = ON[d0MP  ];
+                  //Q.q27[d0MP  ][QIN.numberOfBCnodes] = ON[d0PM  ];
+                  //Q.q27[d000][QIN.numberOfBCnodes] = ON[d000];
+                  //Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dMMM ];
+                  //Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dPPM ];
+                  //Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dMPM ];
+                  //Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dPMM ];
+                  //Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dMMP ];
+                  //Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dPPP ];
+                  //Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dMPP ];
+                  //Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dPMP ];
+
+                  Q.q27[dP00   ][QIN.numberOfBCnodes] = ON[dP00   ];
+                  Q.q27[dM00   ][QIN.numberOfBCnodes] = ON[dM00   ];
+                  Q.q27[d0P0   ][QIN.numberOfBCnodes] = ON[d0P0   ];
+                  Q.q27[d0M0   ][QIN.numberOfBCnodes] = ON[d0M0   ];
+                  Q.q27[d00P   ][QIN.numberOfBCnodes] = ON[d00P   ];
+                  Q.q27[d00M   ][QIN.numberOfBCnodes] = ON[d00M   ];
+                  Q.q27[dPP0  ][QIN.numberOfBCnodes] = ON[dPP0  ];
+                  Q.q27[dMM0  ][QIN.numberOfBCnodes] = ON[dMM0  ];
+                  Q.q27[dPM0  ][QIN.numberOfBCnodes] = ON[dPM0  ];
+                  Q.q27[dMP0  ][QIN.numberOfBCnodes] = ON[dMP0  ];
+                  Q.q27[dP0P  ][QIN.numberOfBCnodes] = ON[dP0P  ];
+                  Q.q27[dM0M  ][QIN.numberOfBCnodes] = ON[dM0M  ];
+                  Q.q27[dP0M  ][QIN.numberOfBCnodes] = ON[dP0M  ];
+                  Q.q27[dM0P  ][QIN.numberOfBCnodes] = ON[dM0P  ];
+                  Q.q27[d0PP  ][QIN.numberOfBCnodes] = ON[d0PP  ];
+                  Q.q27[d0MM  ][QIN.numberOfBCnodes] = ON[d0MM  ];
+                  Q.q27[d0PM  ][QIN.numberOfBCnodes] = ON[d0PM  ];
+                  Q.q27[d0MP  ][QIN.numberOfBCnodes] = ON[d0MP  ];
+                  Q.q27[d000][QIN.numberOfBCnodes] = ON[d000];
+                  Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ];
+                  Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ];
+                  Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ];
+                  Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ];
+                  Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ];
+                  Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ];
+                  Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ];
+                  Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ];
 
                   QIN.numberOfBCnodes++;
                }
@@ -199,7 +199,7 @@ void findKforQ(Parameter* para, int lev)
    VF_LOG_CRITICAL("findKforQ() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    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};
@@ -247,33 +247,33 @@ 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[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-   Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-   Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-   Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-   Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-   Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-   Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-   Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-   Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-   Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-   Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-   Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-   Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-   Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-   Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-   Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-   Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-   Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-   Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-   Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-   Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-   Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-   Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-   Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-   Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-   Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-   Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+   Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+   Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+   Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+   Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+   Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+   Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+   Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+   Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+   Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+   Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+   Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+   Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+   Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+   Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+   Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+   Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+   Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+   Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+   Q.q27[d000] = &QQ[d000*sizeQ];
+   Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+   Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+   Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+   Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+   Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+   Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+   Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+   Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
 
    // ! CAUTION ! Do not use this function!
    // As the order of the distributions was changed in July 2022, this does not work anymore.
@@ -282,7 +282,7 @@ void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int
     VF_LOG_CRITICAL("findQ_MG() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    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};
@@ -327,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[DIR_P00   ][QIN.numberOfBCnodes] = ON[DIR_P00   ];
-                  Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = ON[DIR_M00   ];
-                  Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = ON[DIR_0P0   ];
-                  Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = ON[DIR_0M0   ];
-                  Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = ON[DIR_00P   ];
-                  Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = ON[DIR_00M   ];
-                  Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = ON[DIR_PP0  ];
-                  Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = ON[DIR_MM0  ];
-                  Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = ON[DIR_PM0  ];
-                  Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = ON[DIR_MP0  ];
-                  Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = ON[DIR_P0P  ];
-                  Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = ON[DIR_M0M  ];
-                  Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = ON[DIR_P0M  ];
-                  Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = ON[DIR_M0P  ];
-                  Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = ON[DIR_0PP  ];
-                  Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = ON[DIR_0MM  ];
-                  Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = ON[DIR_0PM  ];
-                  Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = ON[DIR_0MP  ];
-                  Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000];
-                  Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ];
-                  Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ];
-                  Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ];
-                  Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ];
-                  Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ];
-                  Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ];
-                  Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ];
-                  Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ];
+                  Q.q27[dP00   ][QIN.numberOfBCnodes] = ON[dP00   ];
+                  Q.q27[dM00   ][QIN.numberOfBCnodes] = ON[dM00   ];
+                  Q.q27[d0P0   ][QIN.numberOfBCnodes] = ON[d0P0   ];
+                  Q.q27[d0M0   ][QIN.numberOfBCnodes] = ON[d0M0   ];
+                  Q.q27[d00P   ][QIN.numberOfBCnodes] = ON[d00P   ];
+                  Q.q27[d00M   ][QIN.numberOfBCnodes] = ON[d00M   ];
+                  Q.q27[dPP0  ][QIN.numberOfBCnodes] = ON[dPP0  ];
+                  Q.q27[dMM0  ][QIN.numberOfBCnodes] = ON[dMM0  ];
+                  Q.q27[dPM0  ][QIN.numberOfBCnodes] = ON[dPM0  ];
+                  Q.q27[dMP0  ][QIN.numberOfBCnodes] = ON[dMP0  ];
+                  Q.q27[dP0P  ][QIN.numberOfBCnodes] = ON[dP0P  ];
+                  Q.q27[dM0M  ][QIN.numberOfBCnodes] = ON[dM0M  ];
+                  Q.q27[dP0M  ][QIN.numberOfBCnodes] = ON[dP0M  ];
+                  Q.q27[dM0P  ][QIN.numberOfBCnodes] = ON[dM0P  ];
+                  Q.q27[d0PP  ][QIN.numberOfBCnodes] = ON[d0PP  ];
+                  Q.q27[d0MM  ][QIN.numberOfBCnodes] = ON[d0MM  ];
+                  Q.q27[d0PM  ][QIN.numberOfBCnodes] = ON[d0PM  ];
+                  Q.q27[d0MP  ][QIN.numberOfBCnodes] = ON[d0MP  ];
+                  Q.q27[d000][QIN.numberOfBCnodes] = ON[d000];
+                  Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ];
+                  Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ];
+                  Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ];
+                  Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ];
+                  Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ];
+                  Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ];
+                  Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ];
+                  Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ];
 
                   QIN.numberOfBCnodes++;
                }
@@ -373,7 +373,7 @@ void findKforQ_MG(int nx, int ny, unsigned int nnx, unsigned int nny, unsigned i
     VF_LOG_CRITICAL("findKforQ_MG() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    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};
@@ -448,33 +448,33 @@ void findQInflow(Parameter* para)
    QIN.numberOfBCnodes = 0;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QforBoundaryConditions Q;
-   Q.q27[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-   Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-   Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-   Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-   Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-   Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-   Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-   Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-   Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-   Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-   Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-   Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-   Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-   Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-   Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-   Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-   Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-   Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-   Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-   Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-   Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-   Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-   Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-   Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-   Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-   Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-   Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+   Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+   Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+   Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+   Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+   Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+   Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+   Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+   Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+   Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+   Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+   Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+   Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+   Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+   Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+   Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+   Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+   Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+   Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+   Q.q27[d000] = &QQ[d000*sizeQ];
+   Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+   Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+   Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+   Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+   Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+   Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+   Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+   Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
    //unsigned int lj = ((nny+STARTOFFY-2)-(STARTOFFY+1)-1);
@@ -497,33 +497,33 @@ 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[DIR_P00   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dP00   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dM00   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d00P   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d00M   ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dPP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dMM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dPM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dMP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dP0P  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dM0M  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dP0M  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dM0P  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d0PP  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d0MM  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[d0PM  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[d0MP  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)1.f;
 			   //////////////////////////////////////////////////////////////////////////
 
 
@@ -531,33 +531,33 @@ void findQInflow(Parameter* para)
    // 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[DIR_P00   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dP00   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dM00   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[d0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[d0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[d00P   ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[d00M   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dPP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dMM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dPM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dMP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dP0P  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[dM0M  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dP0M  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dM0P  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[d0PP  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[d0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[d0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[d0MP  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)-1.f;
 			   //////////////////////////////////////////////////////////////////////////
 			   QIN.numberOfBCnodes++;
             }
@@ -588,33 +588,33 @@ void findQInflow(Parameter* para)
    //               vy[QIN.numberOfBCnodes]             = 0.f;
    //               vz[QIN.numberOfBCnodes]             = u0;
 
-   //               Q.q27[DIR_P00   ][QIN.numberOfBCnodes] = ON[DIR_P00   ];
-   //               Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = ON[DIR_M00   ];
-   //               Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = ON[DIR_0P0   ];
-   //               Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = ON[DIR_0M0   ];
-   //               Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = ON[DIR_00P   ];
-   //               Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = ON[DIR_00M   ];
-   //               Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = ON[DIR_PP0  ];
-   //               Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = ON[DIR_MM0  ];
-   //               Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = ON[DIR_PM0  ];
-   //               Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = ON[DIR_MP0  ];
-   //               Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = ON[DIR_P0P  ];
-   //               Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = ON[DIR_M0M  ];
-   //               Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = ON[DIR_P0M  ];
-   //               Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = ON[DIR_M0P  ];
-   //               Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = ON[DIR_0PP  ];
-   //               Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = ON[DIR_0MM  ];
-   //               Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = ON[DIR_0PM  ];
-   //               Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = ON[DIR_0MP  ];
-   //               Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000];
-   //               Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ];
-   //               Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ];
-   //               Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ];
-   //               Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ];
-   //               Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ];
-   //               Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ];
-   //               Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ];
-   //               Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ];
+   //               Q.q27[dP00   ][QIN.numberOfBCnodes] = ON[dP00   ];
+   //               Q.q27[dM00   ][QIN.numberOfBCnodes] = ON[dM00   ];
+   //               Q.q27[d0P0   ][QIN.numberOfBCnodes] = ON[d0P0   ];
+   //               Q.q27[d0M0   ][QIN.numberOfBCnodes] = ON[d0M0   ];
+   //               Q.q27[d00P   ][QIN.numberOfBCnodes] = ON[d00P   ];
+   //               Q.q27[d00M   ][QIN.numberOfBCnodes] = ON[d00M   ];
+   //               Q.q27[dPP0  ][QIN.numberOfBCnodes] = ON[dPP0  ];
+   //               Q.q27[dMM0  ][QIN.numberOfBCnodes] = ON[dMM0  ];
+   //               Q.q27[dPM0  ][QIN.numberOfBCnodes] = ON[dPM0  ];
+   //               Q.q27[dMP0  ][QIN.numberOfBCnodes] = ON[dMP0  ];
+   //               Q.q27[dP0P  ][QIN.numberOfBCnodes] = ON[dP0P  ];
+   //               Q.q27[dM0M  ][QIN.numberOfBCnodes] = ON[dM0M  ];
+   //               Q.q27[dP0M  ][QIN.numberOfBCnodes] = ON[dP0M  ];
+   //               Q.q27[dM0P  ][QIN.numberOfBCnodes] = ON[dM0P  ];
+   //               Q.q27[d0PP  ][QIN.numberOfBCnodes] = ON[d0PP  ];
+   //               Q.q27[d0MM  ][QIN.numberOfBCnodes] = ON[d0MM  ];
+   //               Q.q27[d0PM  ][QIN.numberOfBCnodes] = ON[d0PM  ];
+   //               Q.q27[d0MP  ][QIN.numberOfBCnodes] = ON[d0MP  ];
+   //               Q.q27[d000][QIN.numberOfBCnodes] = ON[d000];
+   //               Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ];
+   //               Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ];
+   //               Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ];
+   //               Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ];
+   //               Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ];
+   //               Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ];
+   //               Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ];
+   //               Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ];
 
    //               QIN.numberOfBCnodes++;
    //            }
@@ -647,33 +647,33 @@ void findQInflow(Parameter* para)
    //               vy[QIN.numberOfBCnodes]             = 0.f;
    //               vz[QIN.numberOfBCnodes]             = 0.f;//u0;
 
-   //               Q.q27[DIR_P00   ][QIN.numberOfBCnodes] = ON[DIR_P00   ];
-   //               Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = ON[DIR_M00   ];
-   //               Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = ON[DIR_0P0   ];
-   //               Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = ON[DIR_0M0   ];
-   //               Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = ON[DIR_00P   ];
-   //               Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = ON[DIR_00M   ];
-   //               Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = ON[DIR_PP0  ];
-   //               Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = ON[DIR_MM0  ];
-   //               Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = ON[DIR_PM0  ];
-   //               Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = ON[DIR_MP0  ];
-   //               Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = ON[DIR_P0P  ];
-   //               Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = ON[DIR_M0M  ];
-   //               Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = ON[DIR_P0M  ];
-   //               Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = ON[DIR_M0P  ];
-   //               Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = ON[DIR_0PP  ];
-   //               Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = ON[DIR_0MM  ];
-   //               Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = ON[DIR_0PM  ];
-   //               Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = ON[DIR_0MP  ];
-   //               Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000];
-   //               Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ];
-   //               Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ];
-   //               Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ];
-   //               Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ];
-   //               Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ];
-   //               Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ];
-   //               Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ];
-   //               Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ];
+   //               Q.q27[dP00   ][QIN.numberOfBCnodes] = ON[dP00   ];
+   //               Q.q27[dM00   ][QIN.numberOfBCnodes] = ON[dM00   ];
+   //               Q.q27[d0P0   ][QIN.numberOfBCnodes] = ON[d0P0   ];
+   //               Q.q27[d0M0   ][QIN.numberOfBCnodes] = ON[d0M0   ];
+   //               Q.q27[d00P   ][QIN.numberOfBCnodes] = ON[d00P   ];
+   //               Q.q27[d00M   ][QIN.numberOfBCnodes] = ON[d00M   ];
+   //               Q.q27[dPP0  ][QIN.numberOfBCnodes] = ON[dPP0  ];
+   //               Q.q27[dMM0  ][QIN.numberOfBCnodes] = ON[dMM0  ];
+   //               Q.q27[dPM0  ][QIN.numberOfBCnodes] = ON[dPM0  ];
+   //               Q.q27[dMP0  ][QIN.numberOfBCnodes] = ON[dMP0  ];
+   //               Q.q27[dP0P  ][QIN.numberOfBCnodes] = ON[dP0P  ];
+   //               Q.q27[dM0M  ][QIN.numberOfBCnodes] = ON[dM0M  ];
+   //               Q.q27[dP0M  ][QIN.numberOfBCnodes] = ON[dP0M  ];
+   //               Q.q27[dM0P  ][QIN.numberOfBCnodes] = ON[dM0P  ];
+   //               Q.q27[d0PP  ][QIN.numberOfBCnodes] = ON[d0PP  ];
+   //               Q.q27[d0MM  ][QIN.numberOfBCnodes] = ON[d0MM  ];
+   //               Q.q27[d0PM  ][QIN.numberOfBCnodes] = ON[d0PM  ];
+   //               Q.q27[d0MP  ][QIN.numberOfBCnodes] = ON[d0MP  ];
+   //               Q.q27[d000][QIN.numberOfBCnodes] = ON[d000];
+   //               Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ];
+   //               Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ];
+   //               Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ];
+   //               Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ];
+   //               Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ];
+   //               Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ];
+   //               Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ];
+   //               Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ];
 
    //               QIN.numberOfBCnodes++;
    //            }
@@ -692,7 +692,7 @@ void findKforQInflow(Parameter* para)
     VF_LOG_CRITICAL("findKforQInflow() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    //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};
@@ -780,7 +780,7 @@ void findQOutflow(Parameter* para)
     VF_LOG_CRITICAL("findQOutflow() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    //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};
@@ -814,33 +814,33 @@ void findQOutflow(Parameter* para)
    QIN.numberOfBCnodes = 0;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QforBoundaryConditions Q;
-   Q.q27[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-   Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-   Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-   Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-   Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-   Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-   Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-   Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-   Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-   Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-   Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-   Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-   Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-   Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-   Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-   Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-   Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-   Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-   Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-   Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-   Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-   Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-   Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-   Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-   Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-   Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-   Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+   Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+   Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+   Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+   Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+   Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+   Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+   Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+   Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+   Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+   Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+   Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+   Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+   Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+   Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+   Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+   Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+   Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+   Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+   Q.q27[d000] = &QQ[d000*sizeQ];
+   Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+   Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+   Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+   Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+   Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+   Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+   Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+   Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
 
 
    //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
@@ -862,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[DIR_P00   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dP00   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dM00   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[d0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[d0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[d00P   ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[d00M   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dPP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dMM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dPM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dMP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dP0P  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[dM0M  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dP0M  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dM0P  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[d0PP  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[d0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[d0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[d0MP  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)-1.f;
                QIN.numberOfBCnodes++;
             }
        }
@@ -912,7 +912,7 @@ void findKforQOutflow(Parameter* para)
     VF_LOG_CRITICAL("findKforQOutflow() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
    //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};
@@ -976,36 +976,36 @@ void findKforQOutflow(Parameter* para)
 //                   unsigned int sizeQW, real* vxW, real* vyW, real* vzW, real*deltaVW, real* QQW, QforBoundaryConditions &QWin)
 //{
 //   QforBoundaryConditions QN;
-//   QN.q27[DIR_P00   ] = &QQN[DIR_P00   *sizeQN];
-//   QN.q27[DIR_M00   ] = &QQN[DIR_M00   *sizeQN];
-//   QN.q27[DIR_0P0   ] = &QQN[DIR_0P0   *sizeQN];
-//   QN.q27[DIR_0M0   ] = &QQN[DIR_0M0   *sizeQN];
-//   QN.q27[DIR_00P   ] = &QQN[DIR_00P   *sizeQN];
-//   QN.q27[DIR_00M   ] = &QQN[DIR_00M   *sizeQN];
-//   QN.q27[DIR_PP0  ] = &QQN[DIR_PP0  *sizeQN];
-//   QN.q27[DIR_MM0  ] = &QQN[DIR_MM0  *sizeQN];
-//   QN.q27[DIR_PM0  ] = &QQN[DIR_PM0  *sizeQN];
-//   QN.q27[DIR_MP0  ] = &QQN[DIR_MP0  *sizeQN];
-//   QN.q27[DIR_P0P  ] = &QQN[DIR_P0P  *sizeQN];
-//   QN.q27[DIR_M0M  ] = &QQN[DIR_M0M  *sizeQN];
-//   QN.q27[DIR_P0M  ] = &QQN[DIR_P0M  *sizeQN];
-//   QN.q27[DIR_M0P  ] = &QQN[DIR_M0P  *sizeQN];
-//   QN.q27[DIR_0PP  ] = &QQN[DIR_0PP  *sizeQN];
-//   QN.q27[DIR_0MM  ] = &QQN[DIR_0MM  *sizeQN];
-//   QN.q27[DIR_0PM  ] = &QQN[DIR_0PM  *sizeQN];
-//   QN.q27[DIR_0MP  ] = &QQN[DIR_0MP  *sizeQN];
-//   QN.q27[DIR_000] = &QQN[DIR_000*sizeQN];
-//   QN.q27[DIR_PPP ] = &QQN[DIR_PPP *sizeQN];
-//   QN.q27[DIR_MMP ] = &QQN[DIR_MMP *sizeQN];
-//   QN.q27[DIR_PMP ] = &QQN[DIR_PMP *sizeQN];
-//   QN.q27[DIR_MPP ] = &QQN[DIR_MPP *sizeQN];
-//   QN.q27[DIR_PPM ] = &QQN[DIR_PPM *sizeQN];
-//   QN.q27[DIR_MMM ] = &QQN[DIR_MMM *sizeQN];
-//   QN.q27[DIR_PMM ] = &QQN[DIR_PMM *sizeQN];
-//   QN.q27[DIR_MPM ] = &QQN[DIR_MPM *sizeQN];
+//   QN.q27[dP00   ] = &QQN[dP00   *sizeQN];
+//   QN.q27[dM00   ] = &QQN[dM00   *sizeQN];
+//   QN.q27[d0P0   ] = &QQN[d0P0   *sizeQN];
+//   QN.q27[d0M0   ] = &QQN[d0M0   *sizeQN];
+//   QN.q27[d00P   ] = &QQN[d00P   *sizeQN];
+//   QN.q27[d00M   ] = &QQN[d00M   *sizeQN];
+//   QN.q27[dPP0  ] = &QQN[dPP0  *sizeQN];
+//   QN.q27[dMM0  ] = &QQN[dMM0  *sizeQN];
+//   QN.q27[dPM0  ] = &QQN[dPM0  *sizeQN];
+//   QN.q27[dMP0  ] = &QQN[dMP0  *sizeQN];
+//   QN.q27[dP0P  ] = &QQN[dP0P  *sizeQN];
+//   QN.q27[dM0M  ] = &QQN[dM0M  *sizeQN];
+//   QN.q27[dP0M  ] = &QQN[dP0M  *sizeQN];
+//   QN.q27[dM0P  ] = &QQN[dM0P  *sizeQN];
+//   QN.q27[d0PP  ] = &QQN[d0PP  *sizeQN];
+//   QN.q27[d0MM  ] = &QQN[d0MM  *sizeQN];
+//   QN.q27[d0PM  ] = &QQN[d0PM  *sizeQN];
+//   QN.q27[d0MP  ] = &QQN[d0MP  *sizeQN];
+//   QN.q27[d000] = &QQN[d000*sizeQN];
+//   QN.q27[dPPP ] = &QQN[dPPP *sizeQN];
+//   QN.q27[dMMP ] = &QQN[dMMP *sizeQN];
+//   QN.q27[dPMP ] = &QQN[dPMP *sizeQN];
+//   QN.q27[dMPP ] = &QQN[dMPP *sizeQN];
+//   QN.q27[dPPM ] = &QQN[dPPM *sizeQN];
+//   QN.q27[dMMM ] = &QQN[dMMM *sizeQN];
+//   QN.q27[dPMM ] = &QQN[dPMM *sizeQN];
+//   QN.q27[dMPM ] = &QQN[dMPM *sizeQN];
 //
 //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+//   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
 //   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};
@@ -1018,7 +1018,7 @@ void findKforQOutflow(Parameter* para)
 //                      QforBoundaryConditions &QN, QforBoundaryConditions &QS, QforBoundaryConditions &QE, QforBoundaryConditions &QW)
 //{
 //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//   //////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+//   //////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
 //   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};
@@ -1069,7 +1069,7 @@ void findQPressX0(Parameter* para, int lev)
     VF_LOG_CRITICAL("findKforQPressX0() is deprecated! - see comment above for more information");
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+	//////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
 	//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};
@@ -1096,33 +1096,33 @@ void findQPressX0(Parameter* para, int lev)
 	QIN.numberOfBCnodes = 0;
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	QforBoundaryConditions Q;
-	Q.q27[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-	Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-	Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-	Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-	Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-	Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-	Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-	Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-	Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-	Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-	Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-	Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-	Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-	Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-	Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-	Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-	Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-	Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-	Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-	Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-	Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-	Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-	Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-	Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-	Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-	Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-	Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+	Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+	Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+	Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+	Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+	Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+	Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+	Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+	Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+	Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+	Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+	Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+	Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+	Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+	Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+	Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+	Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+	Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+	Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+	Q.q27[d000] = &QQ[d000*sizeQ];
+	Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+	Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+	Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+	Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+	Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+	Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+	Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+	Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
 
 
 	//unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
@@ -1145,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[DIR_P00   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dP00   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dM00   ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[d0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d00P   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d00M   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dMM0  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dPM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dMP0  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dP0P  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dM0M  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dP0M  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dM0P  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[d0PP  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0MP  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)1.f;
 				QIN.numberOfBCnodes++;
 			}
 		}
@@ -1187,7 +1187,7 @@ void findKforQPressX0(Parameter* para, int lev)
     VF_LOG_CRITICAL("findKforQPressX0() is deprecated! - see comment above for more information");
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+	//////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
 	//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};
@@ -1245,7 +1245,7 @@ void findQPressX1(Parameter* para, int lev)
     VF_LOG_CRITICAL("findQPressX1() is deprecated! - see comment above for more information");
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+	//////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
 	//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};
@@ -1272,33 +1272,33 @@ void findQPressX1(Parameter* para, int lev)
 	QIN.numberOfBCnodes = 0;
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	QforBoundaryConditions Q;
-	Q.q27[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-	Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-	Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-	Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-	Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-	Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-	Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-	Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-	Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-	Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-	Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-	Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-	Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-	Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-	Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-	Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-	Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-	Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-	Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-	Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-	Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-	Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-	Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-	Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-	Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-	Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-	Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+	Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+	Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+	Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+	Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+	Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+	Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+	Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+	Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+	Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+	Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+	Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+	Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+	Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+	Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+	Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+	Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+	Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+	Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+	Q.q27[d000] = &QQ[d000*sizeQ];
+	Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+	Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+	Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+	Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+	Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+	Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+	Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+	Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
 
 
 	//unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
@@ -1321,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[DIR_P00   ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_M00   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_00P   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_00M   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PP0  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_MM0  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PM0  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_MP0  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_P0P  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_M0M  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_P0M  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_M0P  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0PP  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_0MP  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dP00   ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dM00   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0P0   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0M0   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d00P   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d00M   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPP0  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dMM0  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPM0  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dMP0  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dP0P  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dM0M  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dP0M  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dM0P  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0PP  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0MM  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0PM  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d0MP  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)-1.f;
 				QIN.numberOfBCnodes++;
 			}
 		}
@@ -1363,7 +1363,7 @@ void findKforQPressX1(Parameter* para, int lev)
     VF_LOG_CRITICAL("findKforQPressX1() is deprecated! - see comment above for more information");
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//////////////  DIR_P00   DIR_M00   DIR_0P0   DIR_0M0   DIR_00P   DIR_00M  DIR_PP0  DIR_MM0  DIR_PM0  DIR_MP0  DIR_P0P  DIR_M0M  DIR_P0M  DIR_M0P  DIR_0PP  DIR_0MM  DIR_0PM  DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM  ////////////////////////
+	//////////////  dP00   dM00   d0P0   d0M0   d00P   d00M  dPP0  dMM0  dPM0  dMP0  dP0P  dM0M  dP0M  dM0P  d0PP  d0MM  d0PM  d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM  ////////////////////////
 	//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};
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.h b/src/gpu/core/FindQ/FindQ.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/FindQ/FindQ.h
rename to src/gpu/core/FindQ/FindQ.h
diff --git a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu b/src/gpu/core/GPU/AdvectionDiffusion27chim.cu
similarity index 59%
rename from src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu
rename to src/gpu/core/GPU/AdvectionDiffusion27chim.cu
index a22e7f6e842fcfb4474e009975eb65f1920513a9..d1b502f46e39e8c1aa82fbb78b2ac805291c71cb 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu
+++ b/src/gpu/core/GPU/AdvectionDiffusion27chim.cu
@@ -109,125 +109,125 @@ __global__ void Factorized_Central_Moments_Advection_Diffusion_Device_Kernel(
 		Distributions27 dist;
 		if (isEvenTimestep)
 		{
-			dist.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes];
-			dist.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes];
-			dist.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes];
-			dist.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes];
-			dist.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes];
-			dist.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes];
-			dist.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes];
-			dist.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes];
-			dist.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes];
-			dist.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes];
-			dist.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes];
-			dist.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes];
-			dist.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes];
-			dist.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes];
-			dist.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes];
-			dist.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes];
-			dist.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes];
-			dist.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes];
-			dist.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-			dist.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes];
-			dist.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes];
-			dist.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes];
-			dist.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes];
-			dist.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes];
-			dist.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes];
-			dist.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes];
-			dist.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes];
+			dist.f[dP00] = &distributions[dP00 * numberOfLBnodes];
+			dist.f[dM00] = &distributions[dM00 * numberOfLBnodes];
+			dist.f[d0P0] = &distributions[d0P0 * numberOfLBnodes];
+			dist.f[d0M0] = &distributions[d0M0 * numberOfLBnodes];
+			dist.f[d00P] = &distributions[d00P * numberOfLBnodes];
+			dist.f[d00M] = &distributions[d00M * numberOfLBnodes];
+			dist.f[dPP0] = &distributions[dPP0 * numberOfLBnodes];
+			dist.f[dMM0] = &distributions[dMM0 * numberOfLBnodes];
+			dist.f[dPM0] = &distributions[dPM0 * numberOfLBnodes];
+			dist.f[dMP0] = &distributions[dMP0 * numberOfLBnodes];
+			dist.f[dP0P] = &distributions[dP0P * numberOfLBnodes];
+			dist.f[dM0M] = &distributions[dM0M * numberOfLBnodes];
+			dist.f[dP0M] = &distributions[dP0M * numberOfLBnodes];
+			dist.f[dM0P] = &distributions[dM0P * numberOfLBnodes];
+			dist.f[d0PP] = &distributions[d0PP * numberOfLBnodes];
+			dist.f[d0MM] = &distributions[d0MM * numberOfLBnodes];
+			dist.f[d0PM] = &distributions[d0PM * numberOfLBnodes];
+			dist.f[d0MP] = &distributions[d0MP * numberOfLBnodes];
+			dist.f[d000] = &distributions[d000 * numberOfLBnodes];
+			dist.f[dPPP] = &distributions[dPPP * numberOfLBnodes];
+			dist.f[dMMP] = &distributions[dMMP * numberOfLBnodes];
+			dist.f[dPMP] = &distributions[dPMP * numberOfLBnodes];
+			dist.f[dMPP] = &distributions[dMPP * numberOfLBnodes];
+			dist.f[dPPM] = &distributions[dPPM * numberOfLBnodes];
+			dist.f[dMMM] = &distributions[dMMM * numberOfLBnodes];
+			dist.f[dPMM] = &distributions[dPMM * numberOfLBnodes];
+			dist.f[dMPM] = &distributions[dMPM * numberOfLBnodes];
 		}
 		else
 		{
-			dist.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes];
-			dist.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes];
-			dist.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes];
-			dist.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes];
-			dist.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes];
-			dist.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes];
-			dist.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes];
-			dist.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes];
-			dist.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes];
-			dist.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes];
-			dist.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes];
-			dist.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes];
-			dist.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes];
-			dist.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes];
-			dist.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes];
-			dist.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes];
-			dist.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes];
-			dist.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes];
-			dist.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes];
-			dist.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes];
-			dist.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes];
-			dist.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes];
-			dist.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes];
-			dist.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes];
-			dist.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes];
-			dist.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes];
-			dist.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes];
+			dist.f[dM00] = &distributions[dP00 * numberOfLBnodes];
+			dist.f[dP00] = &distributions[dM00 * numberOfLBnodes];
+			dist.f[d0M0] = &distributions[d0P0 * numberOfLBnodes];
+			dist.f[d0P0] = &distributions[d0M0 * numberOfLBnodes];
+			dist.f[d00M] = &distributions[d00P * numberOfLBnodes];
+			dist.f[d00P] = &distributions[d00M * numberOfLBnodes];
+			dist.f[dMM0] = &distributions[dPP0 * numberOfLBnodes];
+			dist.f[dPP0] = &distributions[dMM0 * numberOfLBnodes];
+			dist.f[dMP0] = &distributions[dPM0 * numberOfLBnodes];
+			dist.f[dPM0] = &distributions[dMP0 * numberOfLBnodes];
+			dist.f[dM0M] = &distributions[dP0P * numberOfLBnodes];
+			dist.f[dP0P] = &distributions[dM0M * numberOfLBnodes];
+			dist.f[dM0P] = &distributions[dP0M * numberOfLBnodes];
+			dist.f[dP0M] = &distributions[dM0P * numberOfLBnodes];
+			dist.f[d0MM] = &distributions[d0PP * numberOfLBnodes];
+			dist.f[d0PP] = &distributions[d0MM * numberOfLBnodes];
+			dist.f[d0MP] = &distributions[d0PM * numberOfLBnodes];
+			dist.f[d0PM] = &distributions[d0MP * numberOfLBnodes];
+			dist.f[d000] = &distributions[d000 * numberOfLBnodes];
+			dist.f[dMMM] = &distributions[dPPP * numberOfLBnodes];
+			dist.f[dPPM] = &distributions[dMMP * numberOfLBnodes];
+			dist.f[dMPM] = &distributions[dPMP * numberOfLBnodes];
+			dist.f[dPMM] = &distributions[dMPP * numberOfLBnodes];
+			dist.f[dMMP] = &distributions[dPPM * numberOfLBnodes];
+			dist.f[dPPP] = &distributions[dMMM * numberOfLBnodes];
+			dist.f[dMPP] = &distributions[dPMM * numberOfLBnodes];
+			dist.f[dPMP] = &distributions[dMPM * numberOfLBnodes];
 		}
 		////////////////////////////////////////////////////////////////////////////////
 		Distributions27 distAD;
 		if (isEvenTimestep)
 		{
-			distAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-			distAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-			distAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-			distAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-			distAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes];
-			distAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes];
-			distAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-			distAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-			distAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-			distAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-			distAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-			distAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-			distAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-			distAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-			distAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-			distAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-			distAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-			distAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-			distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-			distAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-			distAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-			distAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-			distAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-			distAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-			distAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-			distAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-			distAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes];
+			distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes];
+			distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes];
+			distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes];
+			distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes];
+			distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes];
+			distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes];
+			distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes];
+			distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes];
+			distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes];
+			distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes];
+			distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes];
+			distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes];
+			distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes];
+			distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes];
+			distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes];
+			distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes];
+			distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes];
+			distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes];
+			distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+			distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes];
+			distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes];
+			distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes];
+			distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes];
+			distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes];
+			distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes];
+			distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes];
+			distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes];
 		}
 		else
 		{
-			distAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-			distAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-			distAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-			distAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-			distAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes];
-			distAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes];
-			distAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-			distAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-			distAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-			distAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-			distAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-			distAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-			distAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-			distAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-			distAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-			distAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-			distAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-			distAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-			distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-			distAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-			distAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-			distAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-			distAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-			distAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-			distAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-			distAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-			distAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes];
+			distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes];
+			distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes];
+			distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes];
+			distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes];
+			distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes];
+			distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes];
+			distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes];
+			distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes];
+			distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes];
+			distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes];
+			distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes];
+			distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes];
+			distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes];
+			distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes];
+			distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes];
+			distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes];
+			distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes];
+			distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes];
+			distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+			distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes];
+			distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes];
+			distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes];
+			distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes];
+			distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes];
+			distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes];
+			distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes];
+			distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes];
 		}
 		////////////////////////////////////////////////////////////////////////////////
 		//! - Set neighbor indices (necessary for indirect addressing)
@@ -241,63 +241,63 @@ __global__ void Factorized_Central_Moments_Advection_Diffusion_Device_Kernel(
 		////////////////////////////////////////////////////////////////////////////////////
 		//! - Set local distributions Fluid
 		//!
-		real fcbb = (dist.f[DIR_P00])[k];
-		real fabb = (dist.f[DIR_M00])[kw];
-		real fbcb = (dist.f[DIR_0P0])[k];
-		real fbab = (dist.f[DIR_0M0])[ks];
-		real fbbc = (dist.f[DIR_00P])[k];
-		real fbba = (dist.f[DIR_00M])[kb];
-		real fccb = (dist.f[DIR_PP0])[k];
-		real faab = (dist.f[DIR_MM0])[ksw];
-		real fcab = (dist.f[DIR_PM0])[ks];
-		real facb = (dist.f[DIR_MP0])[kw];
-		real fcbc = (dist.f[DIR_P0P])[k];
-		real faba = (dist.f[DIR_M0M])[kbw];
-		real fcba = (dist.f[DIR_P0M])[kb];
-		real fabc = (dist.f[DIR_M0P])[kw];
-		real fbcc = (dist.f[DIR_0PP])[k];
-		real fbaa = (dist.f[DIR_0MM])[kbs];
-		real fbca = (dist.f[DIR_0PM])[kb];
-		real fbac = (dist.f[DIR_0MP])[ks];
-		real fbbb = (dist.f[DIR_000])[k];
-		real fccc = (dist.f[DIR_PPP])[k];
-		real faac = (dist.f[DIR_MMP])[ksw];
-		real fcac = (dist.f[DIR_PMP])[ks];
-		real facc = (dist.f[DIR_MPP])[kw];
-		real fcca = (dist.f[DIR_PPM])[kb];
-		real faaa = (dist.f[DIR_MMM])[kbsw];
-		real fcaa = (dist.f[DIR_PMM])[kbs];
-		real faca = (dist.f[DIR_MPM])[kbw];
+		real fcbb = (dist.f[dP00])[k];
+		real fabb = (dist.f[dM00])[kw];
+		real fbcb = (dist.f[d0P0])[k];
+		real fbab = (dist.f[d0M0])[ks];
+		real fbbc = (dist.f[d00P])[k];
+		real fbba = (dist.f[d00M])[kb];
+		real fccb = (dist.f[dPP0])[k];
+		real faab = (dist.f[dMM0])[ksw];
+		real fcab = (dist.f[dPM0])[ks];
+		real facb = (dist.f[dMP0])[kw];
+		real fcbc = (dist.f[dP0P])[k];
+		real faba = (dist.f[dM0M])[kbw];
+		real fcba = (dist.f[dP0M])[kb];
+		real fabc = (dist.f[dM0P])[kw];
+		real fbcc = (dist.f[d0PP])[k];
+		real fbaa = (dist.f[d0MM])[kbs];
+		real fbca = (dist.f[d0PM])[kb];
+		real fbac = (dist.f[d0MP])[ks];
+		real fbbb = (dist.f[d000])[k];
+		real fccc = (dist.f[dPPP])[k];
+		real faac = (dist.f[dMMP])[ksw];
+		real fcac = (dist.f[dPMP])[ks];
+		real facc = (dist.f[dMPP])[kw];
+		real fcca = (dist.f[dPPM])[kb];
+		real faaa = (dist.f[dMMM])[kbsw];
+		real fcaa = (dist.f[dPMM])[kbs];
+		real faca = (dist.f[dMPM])[kbw];
 		////////////////////////////////////////////////////////////////////////////////////
 		//! - Set local distributions Advection Diffusion
 		//!
-		real mfcbb = (distAD.f[DIR_P00])[k];
-		real mfabb = (distAD.f[DIR_M00])[kw];
-		real mfbcb = (distAD.f[DIR_0P0])[k];
-		real mfbab = (distAD.f[DIR_0M0])[ks];
-		real mfbbc = (distAD.f[DIR_00P])[k];
-		real mfbba = (distAD.f[DIR_00M])[kb];
-		real mfccb = (distAD.f[DIR_PP0])[k];
-		real mfaab = (distAD.f[DIR_MM0])[ksw];
-		real mfcab = (distAD.f[DIR_PM0])[ks];
-		real mfacb = (distAD.f[DIR_MP0])[kw];
-		real mfcbc = (distAD.f[DIR_P0P])[k];
-		real mfaba = (distAD.f[DIR_M0M])[kbw];
-		real mfcba = (distAD.f[DIR_P0M])[kb];
-		real mfabc = (distAD.f[DIR_M0P])[kw];
-		real mfbcc = (distAD.f[DIR_0PP])[k];
-		real mfbaa = (distAD.f[DIR_0MM])[kbs];
-		real mfbca = (distAD.f[DIR_0PM])[kb];
-		real mfbac = (distAD.f[DIR_0MP])[ks];
-		real mfbbb = (distAD.f[DIR_000])[k];
-		real mfccc = (distAD.f[DIR_PPP])[k];
-		real mfaac = (distAD.f[DIR_MMP])[ksw];
-		real mfcac = (distAD.f[DIR_PMP])[ks];
-		real mfacc = (distAD.f[DIR_MPP])[kw];
-		real mfcca = (distAD.f[DIR_PPM])[kb];
-		real mfaaa = (distAD.f[DIR_MMM])[kbsw];
-		real mfcaa = (distAD.f[DIR_PMM])[kbs];
-		real mfaca = (distAD.f[DIR_MPM])[kbw];
+		real mfcbb = (distAD.f[dP00])[k];
+		real mfabb = (distAD.f[dM00])[kw];
+		real mfbcb = (distAD.f[d0P0])[k];
+		real mfbab = (distAD.f[d0M0])[ks];
+		real mfbbc = (distAD.f[d00P])[k];
+		real mfbba = (distAD.f[d00M])[kb];
+		real mfccb = (distAD.f[dPP0])[k];
+		real mfaab = (distAD.f[dMM0])[ksw];
+		real mfcab = (distAD.f[dPM0])[ks];
+		real mfacb = (distAD.f[dMP0])[kw];
+		real mfcbc = (distAD.f[dP0P])[k];
+		real mfaba = (distAD.f[dM0M])[kbw];
+		real mfcba = (distAD.f[dP0M])[kb];
+		real mfabc = (distAD.f[dM0P])[kw];
+		real mfbcc = (distAD.f[d0PP])[k];
+		real mfbaa = (distAD.f[d0MM])[kbs];
+		real mfbca = (distAD.f[d0PM])[kb];
+		real mfbac = (distAD.f[d0MP])[ks];
+		real mfbbb = (distAD.f[d000])[k];
+		real mfccc = (distAD.f[dPPP])[k];
+		real mfaac = (distAD.f[dMMP])[ksw];
+		real mfcac = (distAD.f[dPMP])[ks];
+		real mfacc = (distAD.f[dMPP])[kw];
+		real mfcca = (distAD.f[dPPM])[kb];
+		real mfaaa = (distAD.f[dMMM])[kbsw];
+		real mfcaa = (distAD.f[dPMM])[kbs];
+		real mfaca = (distAD.f[dMPM])[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 @@ __global__ void Factorized_Central_Moments_Advection_Diffusion_Device_Kernel(
 		//! 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[DIR_P00])[k   ] = mfabb;
-		(distAD.f[DIR_M00])[kw  ] = mfcbb;
-		(distAD.f[DIR_0P0])[k   ] = mfbab;
-		(distAD.f[DIR_0M0])[ks  ] = mfbcb;
-		(distAD.f[DIR_00P])[k   ] = mfbba;
-		(distAD.f[DIR_00M])[kb  ] = mfbbc;
-		(distAD.f[DIR_PP0])[k   ] = mfaab;
-		(distAD.f[DIR_MM0])[ksw ] = mfccb;
-		(distAD.f[DIR_PM0])[ks  ] = mfacb;
-		(distAD.f[DIR_MP0])[kw  ] = mfcab;
-		(distAD.f[DIR_P0P])[k   ] = mfaba;
-		(distAD.f[DIR_M0M])[kbw ] = mfcbc;
-		(distAD.f[DIR_P0M])[kb  ] = mfabc;
-		(distAD.f[DIR_M0P])[kw  ] = mfcba;
-		(distAD.f[DIR_0PP])[k   ] = mfbaa;
-		(distAD.f[DIR_0MM])[kbs ] = mfbcc;
-		(distAD.f[DIR_0PM])[kb  ] = mfbac;
-		(distAD.f[DIR_0MP])[ks  ] = mfbca;
-		(distAD.f[DIR_000])[k   ] = mfbbb;
-		(distAD.f[DIR_PPP])[k   ] = mfaaa;
-		(distAD.f[DIR_PMP])[ks  ] = mfaca;
-		(distAD.f[DIR_PPM])[kb  ] = mfaac;
-		(distAD.f[DIR_PMM])[kbs ] = mfacc;
-		(distAD.f[DIR_MPP])[kw  ] = mfcaa;
-		(distAD.f[DIR_MMP])[ksw ] = mfcca;
-		(distAD.f[DIR_MPM])[kbw ] = mfcac;
-		(distAD.f[DIR_MMM])[kbsw] = mfccc;
+		(distAD.f[dP00])[k   ] = mfabb;
+		(distAD.f[dM00])[kw  ] = mfcbb;
+		(distAD.f[d0P0])[k   ] = mfbab;
+		(distAD.f[d0M0])[ks  ] = mfbcb;
+		(distAD.f[d00P])[k   ] = mfbba;
+		(distAD.f[d00M])[kb  ] = mfbbc;
+		(distAD.f[dPP0])[k   ] = mfaab;
+		(distAD.f[dMM0])[ksw ] = mfccb;
+		(distAD.f[dPM0])[ks  ] = mfacb;
+		(distAD.f[dMP0])[kw  ] = mfcab;
+		(distAD.f[dP0P])[k   ] = mfaba;
+		(distAD.f[dM0M])[kbw ] = mfcbc;
+		(distAD.f[dP0M])[kb  ] = mfabc;
+		(distAD.f[dM0P])[kw  ] = mfcba;
+		(distAD.f[d0PP])[k   ] = mfbaa;
+		(distAD.f[d0MM])[kbs ] = mfbcc;
+		(distAD.f[d0PM])[kb  ] = mfbac;
+		(distAD.f[d0MP])[ks  ] = mfbca;
+		(distAD.f[d000])[k   ] = mfbbb;
+		(distAD.f[dPPP])[k   ] = mfaaa;
+		(distAD.f[dPMP])[ks  ] = mfaca;
+		(distAD.f[dPPM])[kb  ] = mfaac;
+		(distAD.f[dPMM])[kbs ] = mfacc;
+		(distAD.f[dMPP])[kw  ] = mfcaa;
+		(distAD.f[dMMP])[ksw ] = mfcca;
+		(distAD.f[dMPM])[kbw ] = mfcac;
+		(distAD.f[dMMM])[kbsw] = mfccc;
 	}
 }
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu b/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..7d1bccaddbfd51a413c6833d0e4122e8447764c2
--- /dev/null
+++ b/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu
@@ -0,0 +1,7147 @@
+/* Device code */
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADPress7(  real* DD, 
+                                       real* DD7, 
+                                       real* temp,
+                                       real* velo,
+                                       real diffusivity,
+                                       int* k_Q, 
+                                       real* QQ,
+                                       unsigned int numberOfBCnodes, 
+                                       real om1, 
+                                       unsigned int* neighborX,
+                                       unsigned int* neighborY,
+                                       unsigned int* neighborZ,
+                                       unsigned long long numberOfLBnodes, 
+                                       bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions7 D7;
+   if (isEvenTimestep==true)
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[1] = &DD7[1*numberOfLBnodes];
+      D7.f[2] = &DD7[2*numberOfLBnodes];
+      D7.f[3] = &DD7[3*numberOfLBnodes];
+      D7.f[4] = &DD7[4*numberOfLBnodes];
+      D7.f[5] = &DD7[5*numberOfLBnodes];
+      D7.f[6] = &DD7[6*numberOfLBnodes];
+   }
+   else
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[2] = &DD7[1*numberOfLBnodes];
+      D7.f[1] = &DD7[2*numberOfLBnodes];
+      D7.f[4] = &DD7[3*numberOfLBnodes];
+      D7.f[3] = &DD7[4*numberOfLBnodes];
+      D7.f[6] = &DD7[5*numberOfLBnodes];
+      D7.f[5] = &DD7[6*numberOfLBnodes];
+   }
+
+
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      //q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      //q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      //q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      //q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      //q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      //q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      //q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      //q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      //q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      //q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      //q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      //q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      //q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      //q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      //q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      //q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      //q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      //q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      //q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      //q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      /*real drho*/;
+      //real vx1_Inflow   = zero;
+      //real vx2_Inflow   = zero;
+      //real vx3_Inflow   = velo[k];
+      //real ux_sq_Inflow = vx1_Inflow * vx1_Inflow;
+      //real uy_sq_Inflow = vx2_Inflow * vx2_Inflow;
+      //real uz_sq_Inflow = vx3_Inflow * vx3_Inflow;
+
+
+      //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[d000])[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); 
+
+      //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); 
+
+      //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); 
+
+      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[d000])[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));
+      real 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));
+      real 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 cu_sq       =1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
+      real ux_sq       = vx1 * vx1;
+      real uy_sq       = vx2 * vx2;
+      real uz_sq       = vx3 * vx3;
+      real omegaD     = c3o1 - sqrt(c3o1);
+      real Lam         = -(c1o2-c1o1/omegaD);
+      real nue_d       = Lam/c3o1;
+      //real ae          = zero;
+      real ae          = diffusivity/nue_d - c1o1;
+
+      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
+      real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
+      real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
+      //real TempD = temp[k];
+
+
+      f7_ZERO =  (D7.f[0])[kzero];
+      f7_W    =  (D7.f[1])[ke   ];
+      f7_E    =  (D7.f[2])[kw   ];
+      f7_S    =  (D7.f[3])[kn   ];
+      f7_N    =  (D7.f[4])[ks   ];
+      f7_B    =  (D7.f[5])[kt   ];
+      f7_T    =  (D7.f[6])[kb   ];
+
+      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
+
+      //feq7_ZERO = ConcD*(c1o3*(ae*(-3.0))-(ux_sq+uy_sq+uz_sq));
+      feq7_E    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
+      feq7_W    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
+      feq7_N    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
+      feq7_S    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
+      feq7_T    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
+      feq7_B    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
+
+      //feq7_ZERO = TempD*(c1o3*(ae*(-3.0f))-(ux_sq+uy_sq+uz_sq));
+      feqW7_E    = feq7_E;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
+      feqW7_W    = feq7_W;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
+      feqW7_N    = feq7_N;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
+      feqW7_S    = feq7_S;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
+      feqW7_T    = feq7_T;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
+      feqW7_B    = feq7_B;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
+
+      //////////////////////////////////////////////////////////////////////////
+      //pointertausch
+      if (isEvenTimestep==false)
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[1] = &DD7[1*numberOfLBnodes];
+         D7.f[2] = &DD7[2*numberOfLBnodes];
+         D7.f[3] = &DD7[3*numberOfLBnodes];
+         D7.f[4] = &DD7[4*numberOfLBnodes];
+         D7.f[5] = &DD7[5*numberOfLBnodes];
+         D7.f[6] = &DD7[6*numberOfLBnodes];
+      }
+      else
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[2] = &DD7[1*numberOfLBnodes];
+         D7.f[1] = &DD7[2*numberOfLBnodes];
+         D7.f[4] = &DD7[3*numberOfLBnodes];
+         D7.f[3] = &DD7[4*numberOfLBnodes];
+         D7.f[6] = &DD7[5*numberOfLBnodes];
+         D7.f[5] = &DD7[6*numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=0.1f;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //dP00
+      //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //dM00
+      //(D7.f[3])[kn   ] = f7_N - feq7_N + feqW7_S; //d0P0
+      //(D7.f[4])[ks   ] = f7_S - feq7_S + feqW7_N; //d0M0
+      //(D7.f[5])[kt   ] = f7_T - feq7_T + feqW7_B; //d00P
+      //(D7.f[6])[kb   ] = f7_B - feq7_B + feqW7_T; //d00M
+
+      //////////////////////////////////////////////////////////////////////////
+      //mit Q's
+      real /*feq,*/ q;
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[2])[kw]=(c2o1*feqW7_W-(f7_E*(q*omegaD-c1o1)-omegaD*feq7_E*(q-c1o1))/(omegaD-c1o1)+f7_W*q)/(q+c1o1);//f7_W - feq7_W + feqW7_E;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[1])[ke]=(c2o1*feqW7_E-(f7_W*(q*omegaD-c1o1)-omegaD*feq7_W*(q-c1o1))/(omegaD-c1o1)+f7_E*q)/(q+c1o1);//f7_E - feq7_E + feqW7_W;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[4])[ks]=(c2o1*feqW7_S-(f7_N*(q*omegaD-1.)-omegaD*feq7_N*(q-c1o1))/(omegaD-c1o1)+f7_S*q)/(q+c1o1);//f7_S - feq7_S + feqW7_N;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[3])[kn]=(c2o1*feqW7_N-(f7_S*(q*omegaD-c1o1)-omegaD*feq7_S*(q-c1o1))/(omegaD-c1o1)+f7_N*q)/(q+c1o1);//f7_N - feq7_N + feqW7_S;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[6])[kb]=(c2o1*feqW7_B-(f7_T*(q*omegaD-1.)-omegaD*feq7_T*(q-c1o1))/(omegaD-c1o1)+f7_B*q)/(q+c1o1);//f7_B - feq7_B + feqW7_T;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[5])[kt]=(c2o1*feqW7_T-(f7_B*(q*omegaD-c1o1)-omegaD*feq7_B*(q-c1o1))/(omegaD-c1o1)+f7_T*q)/(q+c1o1);//f7_T - feq7_T + feqW7_B;
+      }
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////ohne Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
+      //}
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADPress27( real* DD, 
+                                       real* DD27, 
+                                       real* temp,
+                                       real* velo,
+                                       real diffusivity,
+                                       int* k_Q, 
+                                       real* QQ,
+                                       unsigned int numberOfBCnodes, 
+                                       real om1, 
+                                       unsigned int* neighborX,
+                                       unsigned int* neighborY,
+                                       unsigned int* neighborZ,
+                                       unsigned long long numberOfLBnodes, 
+                                       bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_ZERO = (D.f[d000])[kzero];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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 + f_ZERO; 
+
+      //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); 
+
+
+      //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); 
+
+      //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)+ f_ZERO;
+      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));
+      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[dP00])[ke   ];
+      real f27_E    = (D27.f[dM00])[kw   ];
+      real f27_S    = (D27.f[d0P0])[kn   ];
+      real f27_N    = (D27.f[d0M0])[ks   ];
+      real f27_B    = (D27.f[d00P])[kt   ];
+      real f27_T    = (D27.f[d00M])[kb   ];
+      real f27_SW   = (D27.f[dPP0])[kne  ];
+      real f27_NE   = (D27.f[dMM0])[ksw  ];
+      real f27_NW   = (D27.f[dPM0])[kse  ];
+      real f27_SE   = (D27.f[dMP0])[knw  ];
+      real f27_BW   = (D27.f[dP0P])[kte  ];
+      real f27_TE   = (D27.f[dM0M])[kbw  ];
+      real f27_TW   = (D27.f[dP0M])[kbe  ];
+      real f27_BE   = (D27.f[dM0P])[ktw  ];
+      real f27_BS   = (D27.f[d0PP])[ktn  ];
+      real f27_TN   = (D27.f[d0MM])[kbs  ];
+      real f27_TS   = (D27.f[d0PM])[kbn  ];
+      real f27_BN   = (D27.f[d0MP])[kts  ];
+      real f27_ZERO = (D27.f[d000])[kzero];
+      real f27_BSW  = (D27.f[dPPP])[ktne ];
+      real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      real f27_BNW  = (D27.f[dPMP])[ktse ];
+      real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      real f27_TSW  = (D27.f[dPPM])[kbne ];
+      real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      real f27_TNW  = (D27.f[dPMM])[kbse ];
+      real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+                        f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+                        f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      ////real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      //real feq27_E    =   c2over27* (ConcD+(one+ConcD)*(three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq));
+      //real feq27_W    =   c2over27* (ConcD+(one+ConcD)*(three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq));
+      //real feq27_N    =   c2over27* (ConcD+(one+ConcD)*(three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq));
+      //real feq27_S    =   c2over27* (ConcD+(one+ConcD)*(three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq));
+      //real feq27_T    =   c2over27* (ConcD+(one+ConcD)*(three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq));
+      //real feq27_B    =   c2over27* (ConcD+(one+ConcD)*(three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq));
+      //real feq27_NE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      //real feq27_SW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      //real feq27_SE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      //real feq27_NW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      //real feq27_TE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      //real feq27_BW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      //real feq27_BE   =   c1over54* (ConcD+(one+ConcD)*(three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      //real feq27_TW   =   c1over54* (ConcD+(one+ConcD)*(three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      //real feq27_TN   =   c1over54* (ConcD+(one+ConcD)*(three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      //real feq27_BS   =   c1over54* (ConcD+(one+ConcD)*(three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      //real feq27_BN   =   c1over54* (ConcD+(one+ConcD)*(three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      //real feq27_TS   =   c1over54* (ConcD+(one+ConcD)*(three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      //real feq27_TNE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      //real feq27_BSW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      //real feq27_BNE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      //real feq27_TSW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      //real feq27_TSE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      //real feq27_BNW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      //real feq27_BSE  =   c1over216*(ConcD+(one+ConcD)*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      //real feq27_TNW  =   c1over216*(ConcD+(one+ConcD)*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      //
+      real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //real TempD = temp[k];
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      // velocity inflow
+      //vx1   = zero;
+      //vx2   = zero;
+      //vx3   = velo[k];
+
+      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      real feqW27_E    =  feq27_E  ;// c2over27* TempD*(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
+      real feqW27_W    =  feq27_W  ;// c2over27* TempD*(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
+      real feqW27_N    =  feq27_N  ;// c2over27* TempD*(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
+      real feqW27_S    =  feq27_S  ;// c2over27* TempD*(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feqW27_T    =  feq27_T  ;// c2over27* TempD*(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
+      real feqW27_B    =  feq27_B  ;// c2over27* TempD*(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
+      real feqW27_NE   =  feq27_NE ;// c1over54* TempD*(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feqW27_SW   =  feq27_SW ;// c1over54* TempD*(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feqW27_SE   =  feq27_SE ;// c1over54* TempD*(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feqW27_NW   =  feq27_NW ;// c1over54* TempD*(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feqW27_TE   =  feq27_TE ;// c1over54* TempD*(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feqW27_BW   =  feq27_BW ;// c1over54* TempD*(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feqW27_BE   =  feq27_BE ;// c1over54* TempD*(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feqW27_TW   =  feq27_TW ;// c1over54* TempD*(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feqW27_TN   =  feq27_TN ;// c1over54* TempD*(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feqW27_BS   =  feq27_BS ;// c1over54* TempD*(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feqW27_BN   =  feq27_BN ;// c1over54* TempD*(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feqW27_TS   =  feq27_TS ;// c1over54* TempD*(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feqW27_TNE  =  feq27_TNE;// c1over216*TempD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feqW27_BSW  =  feq27_BSW;// c1over216*TempD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feqW27_BNE  =  feq27_BNE;// c1over216*TempD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feqW27_TSW  =  feq27_TSW;// c1over216*TempD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feqW27_TSE  =  feq27_TSE;// c1over216*TempD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feqW27_BNW  =  feq27_BNW;// c1over216*TempD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feqW27_BSE  =  feq27_BSE;// c1over216*TempD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feqW27_TNW  =  feq27_TNW;// c1over216*TempD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADPressNEQNeighbor27(
+													real* DD,
+													real* DD27,
+													int* k_Q,
+													int* k_N,
+													int numberOfBCnodes,
+													unsigned int* neighborX,
+													unsigned int* neighborY,
+													unsigned int* neighborZ,
+													unsigned long long numberOfLBnodes,
+													bool isEvenTimestep
+												)
+{
+	Distributions27 D;
+	if (isEvenTimestep == true)
+	{
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	}
+	else
+	{
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	}
+
+	Distributions27 D27;
+	if (isEvenTimestep == true)
+	{
+		D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+		D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+		D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+		D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+		D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+		D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+		D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+		D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+		D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+		D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+		D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+		D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+		D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+		D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+		D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+		D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+		D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+		D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+		D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+		D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+		D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+		D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+		D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+		D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+		D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+		D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+		D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+	}
+	else
+	{
+		D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+		D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+		D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+		D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+		D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+		D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+		D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+		D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+		D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+		D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+		D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+		D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+		D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+		D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+		D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+		D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+		D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+		D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+		D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+		D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+		D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+		D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+		D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+		D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+		D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+		D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+		D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+	}
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if (k < numberOfBCnodes)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		//Fluid - BC Nodes
+		////////////////////////////////////////////////////////////////////////////////
+		//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];
+		////////////////////////////////////////////////////////////////////////////////
+		//distributions
+		real f_W =    (D.f[dP00])[ke];
+		real f_E =    (D.f[dM00])[kw];
+		real f_S =    (D.f[d0P0])[kn];
+		real f_N =    (D.f[d0M0])[ks];
+		real f_B =    (D.f[d00P])[kt];
+		real f_T =    (D.f[d00M])[kb];
+		real f_SW =   (D.f[dPP0])[kne];
+		real f_NE =   (D.f[dMM0])[ksw];
+		real f_NW =   (D.f[dPM0])[kse];
+		real f_SE =   (D.f[dMP0])[knw];
+		real f_BW =   (D.f[dP0P])[kte];
+		real f_TE =   (D.f[dM0M])[kbw];
+		real f_TW =   (D.f[dP0M])[kbe];
+		real f_BE =   (D.f[dM0P])[ktw];
+		real f_BS =   (D.f[d0PP])[ktn];
+		real f_TN =   (D.f[d0MM])[kbs];
+		real f_TS =   (D.f[d0PM])[kbn];
+		real f_BN =   (D.f[d0MP])[kts];
+		real f_ZERO = (D.f[d000])[kzero];
+		real f_BSW =  (D.f[dPPP])[ktne];
+		real f_BNE =  (D.f[dMMP])[ktsw];
+		real f_BNW =  (D.f[dPMP])[ktse];
+		real f_BSE =  (D.f[dMPP])[ktnw];
+		real f_TSW =  (D.f[dPPM])[kbne];
+		real f_TNE =  (D.f[dMMM])[kbsw];
+		real f_TNW =  (D.f[dPMM])[kbse];
+		real f_TSE =  (D.f[dMPM])[kbnw];
+		////////////////////////////////////////////////////////////////////////////////
+		//macroscopic values
+		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  ) +  f_ZERO;
+		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));
+		real 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));
+		real 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));
+		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//AD - BC Nodes
+		////////////////////////////////////////////////////////////////////////////////
+		//distributions
+		real f27_W =    (D27.f[dP00])[ke];
+		real f27_E =    (D27.f[dM00])[kw];
+		real f27_S =    (D27.f[d0P0])[kn];
+		real f27_N =    (D27.f[d0M0])[ks];
+		real f27_B =    (D27.f[d00P])[kt];
+		real f27_T =    (D27.f[d00M])[kb];
+		real f27_SW =   (D27.f[dPP0])[kne];
+		real f27_NE =   (D27.f[dMM0])[ksw];
+		real f27_NW =   (D27.f[dPM0])[kse];
+		real f27_SE =   (D27.f[dMP0])[knw];
+		real f27_BW =   (D27.f[dP0P])[kte];
+		real f27_TE =   (D27.f[dM0M])[kbw];
+		real f27_TW =   (D27.f[dP0M])[kbe];
+		real f27_BE =   (D27.f[dM0P])[ktw];
+		real f27_BS =   (D27.f[d0PP])[ktn];
+		real f27_TN =   (D27.f[d0MM])[kbs];
+		real f27_TS =   (D27.f[d0PM])[kbn];
+		real f27_BN =   (D27.f[d0MP])[kts];
+		real f27_ZERO = (D27.f[d000])[kzero];
+		real f27_BSW =  (D27.f[dPPP])[ktne];
+		real f27_BNE =  (D27.f[dMMP])[ktsw];
+		real f27_BNW =  (D27.f[dPMP])[ktse];
+		real f27_BSE =  (D27.f[dMPP])[ktnw];
+		real f27_TSW =  (D27.f[dPPM])[kbne];
+		real f27_TNE =  (D27.f[dMMM])[kbsw];
+		real f27_TNW =  (D27.f[dPMM])[kbse];
+		real f27_TSE =  (D27.f[dMPM])[kbnw];
+		////////////////////////////////////////////////////////////////////////////////
+		real cusq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
+		////////////////////////////////////////////////////////////////////////////////
+		//concentration
+		real ConcD = 
+			(f27_TNE + f27_BSW) + (f27_TSW + f27_BNE) + (f27_TSE + f27_BNW) + (f27_TNW + f27_BSE) + 
+			(f27_NE  + f27_SW ) + (f27_NW  + f27_SE ) + (f27_TE  + f27_BW ) + (f27_BE  + f27_TW ) + 
+			(f27_TN  + f27_BS ) + (f27_BN  + f27_TS ) +   						
+			(f27_E   + f27_W  ) + (f27_N   + f27_S  ) + (f27_T   + f27_B  ) +  f27_ZERO;
+		////////////////////////////////////////////////////////////////////////////////
+		//calculate non-equilibrium
+		f27_ZERO  -=  c8o27* (ConcD-(ConcD+c1o1)*cusq);
+		f27_E     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq));
+		f27_W     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq));
+		f27_N     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
+		f27_S     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
+		f27_T     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
+		f27_B     -=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
+		f27_NE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+		f27_SW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+		f27_SE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+		f27_NW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+		f27_TE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+		f27_BW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+		f27_BE    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+		f27_TW    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+		f27_TN    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+		f27_BS    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+		f27_BN    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+		f27_TS    -=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+		f27_TNE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+		f27_BSW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+		f27_BNE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+		f27_TSW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+		f27_TSE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+		f27_BNW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
+		f27_BSE   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
+		f27_TNW   -=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
+		////////////////////////////////////////////////////////////////////////////////
+		ConcD = c0o1;
+		////////////////////////////////////////////////////////////////////////////////
+		//add BC equilibrium
+		f27_ZERO  +=  c8o27* (ConcD-(ConcD+c1o1)*cusq);
+		f27_E     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq));
+		f27_W     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq));
+		f27_N     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
+		f27_S     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
+		f27_T     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
+		f27_B     +=  c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
+		f27_NE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+		f27_SW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+		f27_SE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+		f27_NW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+		f27_TE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+		f27_BW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+		f27_BE    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+		f27_TW    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+		f27_TN    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+		f27_BS    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+		f27_BN    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+		f27_TS    +=  c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+		f27_TNE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+		f27_BSW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+		f27_BNE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+		f27_TSW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+		f27_TSE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+		f27_BNW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
+		f27_BSE   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
+		f27_TNW   +=  c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
+		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        __syncthreads();
+		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//Neighbors of BC Nodes
+		////////////////////////////////////////////////////////////////////////////////
+		//index neighbor
+		unsigned int KNQK = k_N[k];
+		unsigned int kNzero = KNQK;
+		unsigned int kNe = KNQK;
+		unsigned int kNw = neighborX[KNQK];
+		unsigned int kNn = KNQK;
+		unsigned int kNs = neighborY[KNQK];
+		unsigned int kNt = KNQK;
+		unsigned int kNb = neighborZ[KNQK];
+		unsigned int kNsw = neighborY[kNw];
+		unsigned int kNne = KNQK;
+		unsigned int kNse = kNs;
+		unsigned int kNnw = kNw;
+		unsigned int kNbw = neighborZ[kNw];
+		unsigned int kNte = KNQK;
+		unsigned int kNbe = kNb;
+		unsigned int kNtw = kNw;
+		unsigned int kNbs = neighborZ[kNs];
+		unsigned int kNtn = KNQK;
+		unsigned int kNbn = kNb;
+		unsigned int kNts = kNs;
+		unsigned int kNtse = kNs;
+		unsigned int kNbnw = kNbw;
+		unsigned int kNtnw = kNw;
+		unsigned int kNbse = kNbs;
+		unsigned int kNtsw = kNsw;
+		unsigned int kNbne = kNb;
+		unsigned int kNtne = KNQK;
+		unsigned int kNbsw = neighborZ[kNsw];
+		////////////////////////////////////////////////////////////////////////////////
+		//update distributions at neighbor nodes
+        (D27.f[dP00])[kNe   ] = f27_W   ;  
+        (D27.f[dM00])[kNw   ] = f27_E   ;	
+        (D27.f[d0P0])[kNn   ] = f27_S   ;	
+        (D27.f[d0M0])[kNs   ] = f27_N   ;	
+        (D27.f[d00P])[kNt   ] = f27_B   ;	
+        (D27.f[d00M])[kNb   ] = f27_T   ;	
+        (D27.f[dPP0])[kNne  ] = f27_SW  ;	
+        (D27.f[dMM0])[kNsw  ] = f27_NE  ;	
+        (D27.f[dPM0])[kNse  ] = f27_NW  ;	
+        (D27.f[dMP0])[kNnw  ] = f27_SE  ;	
+        (D27.f[dP0P])[kNte  ] = f27_BW  ;	
+        (D27.f[dM0M])[kNbw  ] = f27_TE  ;	
+        (D27.f[dP0M])[kNbe  ] = f27_TW  ;	
+        (D27.f[dM0P])[kNtw  ] = f27_BE  ;	
+        (D27.f[d0PP])[kNtn  ] = f27_BS  ;	
+        (D27.f[d0MM])[kNbs  ] = f27_TN  ;	
+        (D27.f[d0PM])[kNbn  ] = f27_TS  ;	
+        (D27.f[d0MP])[kNts  ] = f27_BN  ;	
+        (D27.f[d000])[kNzero] = f27_ZERO;	
+        (D27.f[dPPP])[kNtne ] = f27_BSW ;	
+        (D27.f[dMMP])[kNtsw ] = f27_BNE ;	
+        (D27.f[dPMP])[kNtse ] = f27_BNW ;	
+        (D27.f[dMPP])[kNtnw ] = f27_BSE ;	
+        (D27.f[dPPM])[kNbne ] = f27_TSW ;	
+        (D27.f[dMMM])[kNbsw ] = f27_TNE ;	
+        (D27.f[dPMM])[kNbse ] = f27_TNW ;	
+        (D27.f[dMPM])[kNbnw ] = f27_TSE ;       
+	}
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADVel7( real* DD, 
+                                    real* DD7, 
+                                    real* temp,
+                                    real* velo,
+                                    real diffusivity,
+                                    int* k_Q, 
+                                    real* QQ,
+                                    unsigned int numberOfBCnodes, 
+                                    real om1, 
+                                    unsigned int* neighborX,
+                                    unsigned int* neighborY,
+                                    unsigned int* neighborZ,
+                                    unsigned long long numberOfLBnodes, 
+                                    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions7 D7;
+   if (isEvenTimestep==true)
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[1] = &DD7[1*numberOfLBnodes];
+      D7.f[2] = &DD7[2*numberOfLBnodes];
+      D7.f[3] = &DD7[3*numberOfLBnodes];
+      D7.f[4] = &DD7[4*numberOfLBnodes];
+      D7.f[5] = &DD7[5*numberOfLBnodes];
+      D7.f[6] = &DD7[6*numberOfLBnodes];
+   }
+   else
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[2] = &DD7[1*numberOfLBnodes];
+      D7.f[1] = &DD7[2*numberOfLBnodes];
+      D7.f[4] = &DD7[3*numberOfLBnodes];
+      D7.f[3] = &DD7[4*numberOfLBnodes];
+      D7.f[6] = &DD7[5*numberOfLBnodes];
+      D7.f[5] = &DD7[6*numberOfLBnodes];
+   }
+
+
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      //////////////////////////////////////////////////////////////////////////////////
+      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB;//, 
+
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      /*real drho*/;
+      real vx1_Inflow   = c0o1;
+      real vx2_Inflow   = c0o1;
+      real vx3_Inflow   = velo[k];
+      real ux_sq_Inflow = vx1_Inflow * vx1_Inflow;
+      real uy_sq_Inflow = vx2_Inflow * vx2_Inflow;
+      real uz_sq_Inflow = vx3_Inflow * vx3_Inflow;
+
+
+      ////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[d000])[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); 
+
+      //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); 
+
+      //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); 
+
+      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[d000])[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));
+      real 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));
+      real 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 cu_sq       =1.5f*(vx1*vx1+vx2*vx2+vx3*vx3);
+      real ux_sq       = vx1 * vx1;
+      real uy_sq       = vx2 * vx2;
+      real uz_sq       = vx3 * vx3;
+      real omegaD     = c3o1 - sqrt(c3o1);
+      real Lam         = -(c1o2-c1o1/omegaD);
+      real nue_d       = Lam/c3o1;
+      //real ae          = zero;
+      real ae          = diffusivity/nue_d - c1o1;
+
+      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
+      real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
+      real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
+      real TempD = temp[k];
+
+
+      f7_ZERO =  (D7.f[0])[kzero];
+      f7_W    =  (D7.f[1])[ke   ];
+      f7_E    =  (D7.f[2])[kw   ];
+      f7_S    =  (D7.f[3])[kn   ];
+      f7_N    =  (D7.f[4])[ks   ];
+      f7_B    =  (D7.f[5])[kt   ];
+      f7_T    =  (D7.f[6])[kb   ];
+
+      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
+
+      //feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      feq7_E    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
+      feq7_W    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
+      feq7_N    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
+      feq7_S    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
+      feq7_T    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
+      feq7_B    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
+
+      //feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      feqW7_E    = TempD*(c1o6*(ae+c1o1)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
+      feqW7_W    = TempD*(c1o6*(ae+c1o1)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
+      feqW7_N    = TempD*(c1o6*(ae+c1o1)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
+      feqW7_S    = TempD*(c1o6*(ae+c1o1)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
+      feqW7_T    = TempD*(c1o6*(ae+c1o1)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
+      feqW7_B    = TempD*(c1o6*(ae+c1o1)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
+
+      //////////////////////////////////////////////////////////////////////////
+      //pointertausch
+      if (isEvenTimestep==false)
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[1] = &DD7[1*numberOfLBnodes];
+         D7.f[2] = &DD7[2*numberOfLBnodes];
+         D7.f[3] = &DD7[3*numberOfLBnodes];
+         D7.f[4] = &DD7[4*numberOfLBnodes];
+         D7.f[5] = &DD7[5*numberOfLBnodes];
+         D7.f[6] = &DD7[6*numberOfLBnodes];
+      }
+      else
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[2] = &DD7[1*numberOfLBnodes];
+         D7.f[1] = &DD7[2*numberOfLBnodes];
+         D7.f[4] = &DD7[3*numberOfLBnodes];
+         D7.f[3] = &DD7[4*numberOfLBnodes];
+         D7.f[6] = &DD7[5*numberOfLBnodes];
+         D7.f[5] = &DD7[6*numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //dP00
+      //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //dM00
+      //(D7.f[3])[kn   ] = f7_N - feq7_N + feqW7_S; //d0P0
+      //(D7.f[4])[ks   ] = f7_S - feq7_S + feqW7_N; //d0M0
+      //(D7.f[5])[kt   ] = f7_T - feq7_T + feqW7_B; //d00P
+      //(D7.f[6])[kb   ] = f7_B - feq7_B + feqW7_T; //d00M
+
+      //////////////////////////////////////////////////////////////////////////
+      //mit Q's
+      real /*feq,*/ q;
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[2])[kw]=(c2o1*feqW7_W-(f7_E*(q*omegaD-c1o1)-omegaD*feq7_E*(q-c1o1))/(omegaD-c1o1)+f7_W*q)/(q+c1o1);//f7_W - feq7_W + feqW7_E;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[1])[ke]=(c2o1*feqW7_E-(f7_W*(q*omegaD-c1o1)-omegaD*feq7_W*(q-c1o1))/(omegaD-c1o1)+f7_E*q)/(q+c1o1);//f7_E - feq7_E + feqW7_W;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[4])[ks]=(c2o1*feqW7_S-(f7_N*(q*omegaD-c1o1)-omegaD*feq7_N*(q-c1o1))/(omegaD-c1o1)+f7_S*q)/(q+c1o1);//f7_S - feq7_S + feqW7_N;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[3])[kn]=(c2o1*feqW7_N-(f7_S*(q*omegaD-c1o1)-omegaD*feq7_S*(q-c1o1))/(omegaD-c1o1)+f7_N*q)/(q+c1o1);//f7_N - feq7_N + feqW7_S;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[6])[kb]=(c2o1*feqW7_B-(f7_T*(q*omegaD-c1o1)-omegaD*feq7_T*(q-c1o1))/(omegaD-c1o1)+f7_B*q)/(q+c1o1);//f7_B - feq7_B + feqW7_T;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         //q=0.;
+         (D7.f[5])[kt]=(c2o1*feqW7_T-(f7_B*(q*omegaD-c1o1)-omegaD*feq7_B*(q-c1o1))/(omegaD-c1o1)+f7_T*q)/(q+c1o1);//f7_T - feq7_T + feqW7_B;
+      }
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////ohne Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
+      //}
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADVel27(real* DD, 
+                                    real* DD27, 
+                                    real* temp,
+                                    real* velo,
+                                    real diffusivity,
+                                    int* k_Q, 
+                                    real* QQ,
+                                    unsigned int numberOfBCnodes, 
+                                    real om1, 
+                                    unsigned int* neighborX,
+                                    unsigned int* neighborY,
+                                    unsigned int* neighborZ,
+                                    unsigned long long numberOfLBnodes, 
+                                    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_ZERO = (D.f[d000])[kzero];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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 + f_ZERO; 
+
+      //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); 
+
+
+      //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); 
+
+      //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)+ f_ZERO;
+      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));
+      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[dP00])[ke   ];
+      //real f27_E    = (D27.f[dM00])[kw   ];
+      //real f27_S    = (D27.f[d0P0])[kn   ];
+      //real f27_N    = (D27.f[d0M0])[ks   ];
+      //real f27_B    = (D27.f[d00P])[kt   ];
+      //real f27_T    = (D27.f[d00M])[kb   ];
+      //real f27_SW   = (D27.f[dPP0])[kne  ];
+      //real f27_NE   = (D27.f[dMM0])[ksw  ];
+      //real f27_NW   = (D27.f[dPM0])[kse  ];
+      //real f27_SE   = (D27.f[dMP0])[knw  ];
+      //real f27_BW   = (D27.f[dP0P])[kte  ];
+      //real f27_TE   = (D27.f[dM0M])[kbw  ];
+      //real f27_TW   = (D27.f[dP0M])[kbe  ];
+      //real f27_BE   = (D27.f[dM0P])[ktw  ];
+      //real f27_BS   = (D27.f[d0PP])[ktn  ];
+      //real f27_TN   = (D27.f[d0MM])[kbs  ];
+      //real f27_TS   = (D27.f[d0PM])[kbn  ];
+      //real f27_BN   = (D27.f[d0MP])[kts  ];
+      //real f27_ZERO = (D27.f[d000])[kzero];
+      //real f27_BSW  = (D27.f[dPPP])[ktne ];
+      //real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      //real f27_BNW  = (D27.f[dPMP])[ktse ];
+      //real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      //real f27_TSW  = (D27.f[dPPM])[kbne ];
+      //real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      //real f27_TNW  = (D27.f[dPMM])[kbse ];
+      //real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+      //                  f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+      //                  f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      //real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      //real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      //real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      //real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      //real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      //real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      //real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      //real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      //real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      //real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      //real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      //real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      //real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      //real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      //real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      //real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      //real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      //real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      //real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      //real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      //real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      //real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      //real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      //real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      //real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      //real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real TempD = temp[k];
+      //real TempD = four;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      // velocity inflow
+      //vx1   = velo[k]; //zero;
+      //vx2   = zero; //velo[k];//zero;//velo[k];
+      //vx3   = zero;
+
+      ////real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      //real feqW27_E    =   c2over27* (TempD+(one+TempD)*(three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq));
+      //real feqW27_W    =   c2over27* (TempD+(one+TempD)*(three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq));
+      //real feqW27_N    =   c2over27* (TempD+(one+TempD)*(three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq));
+      //real feqW27_S    =   c2over27* (TempD+(one+TempD)*(three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq));
+      //real feqW27_T    =   c2over27* (TempD+(one+TempD)*(three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq));
+      //real feqW27_B    =   c2over27* (TempD+(one+TempD)*(three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq));
+      //real feqW27_NE   =   c1over54* (TempD+(one+TempD)*(three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      //real feqW27_SW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      //real feqW27_SE   =   c1over54* (TempD+(one+TempD)*(three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      //real feqW27_NW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      //real feqW27_TE   =   c1over54* (TempD+(one+TempD)*(three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      //real feqW27_BW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      //real feqW27_BE   =   c1over54* (TempD+(one+TempD)*(three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      //real feqW27_TW   =   c1over54* (TempD+(one+TempD)*(three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      //real feqW27_TN   =   c1over54* (TempD+(one+TempD)*(three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      //real feqW27_BS   =   c1over54* (TempD+(one+TempD)*(three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      //real feqW27_BN   =   c1over54* (TempD+(one+TempD)*(three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      //real feqW27_TS   =   c1over54* (TempD+(one+TempD)*(three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      //real feqW27_TNE  =   c1over216*(TempD+(one+TempD)*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      //real feqW27_BSW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      //real feqW27_BNE  =   c1over216*(TempD+(one+TempD)*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      //real feqW27_TSW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      //real feqW27_TSE  =   c1over216*(TempD+(one+TempD)*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      //real feqW27_BNW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      //real feqW27_BSE  =   c1over216*(TempD+(one+TempD)*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      //real feqW27_TNW  =   c1over216*(TempD+(one+TempD)*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      //
+      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //(D27.f[dM00])[kw  ]= four;
+      //(D27.f[dP00])[ke  ]= four;
+      //(D27.f[d0M0])[ks  ]= four;
+      //(D27.f[d0P0])[kn  ]= four;
+      //(D27.f[d00M])[kb  ]= four;
+      //(D27.f[d00P])[kt  ]= four;
+      //(D27.f[dMM0])[ksw ]= four;
+      //(D27.f[dPP0])[kne ]= four;
+      //(D27.f[dMP0])[knw ]= four;
+      //(D27.f[dPM0])[kse ]= four;
+      //(D27.f[dM0M])[kbw ]= four;
+      //(D27.f[dP0P])[kte ]= four;
+      //(D27.f[dM0P])[ktw ]= four;
+      //(D27.f[dP0M])[kbe ]= four;
+      //(D27.f[d0MM])[kbs ]= four;
+      //(D27.f[d0PP])[ktn ]= four;
+      //(D27.f[d0MP])[kts ]= four;
+      //(D27.f[d0PM])[kbn ]= four;
+      //(D27.f[dMMM])[kbsw]= four;
+      //(D27.f[dPPP])[ktne]= four;
+      //(D27.f[dMMP])[ktsw]= four;
+      //(D27.f[dPPM])[kbne]= four;
+      //(D27.f[dMPM])[kbnw]= four;
+      //(D27.f[dPMP])[ktse]= four;
+      //(D27.f[dMPP])[ktnw]= four;
+      //(D27.f[dPMM])[kbse]= four;
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QAD7( real* DD, 
+                                 real* DD7, 
+                                 real* temp,
+                                 real diffusivity,
+                                 int* k_Q, 
+                                 real* QQ,
+                                 unsigned int numberOfBCnodes, 
+                                 real om1, 
+                                 unsigned int* neighborX,
+                                 unsigned int* neighborY,
+                                 unsigned int* neighborZ,
+                                 unsigned long long numberOfLBnodes, 
+                                 bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions7 D7;
+   if (isEvenTimestep==true)
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[1] = &DD7[1*numberOfLBnodes];
+      D7.f[2] = &DD7[2*numberOfLBnodes];
+      D7.f[3] = &DD7[3*numberOfLBnodes];
+      D7.f[4] = &DD7[4*numberOfLBnodes];
+      D7.f[5] = &DD7[5*numberOfLBnodes];
+      D7.f[6] = &DD7[6*numberOfLBnodes];
+   }
+   else
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[2] = &DD7[1*numberOfLBnodes];
+      D7.f[1] = &DD7[2*numberOfLBnodes];
+      D7.f[4] = &DD7[3*numberOfLBnodes];
+      D7.f[3] = &DD7[4*numberOfLBnodes];
+      D7.f[6] = &DD7[5*numberOfLBnodes];
+      D7.f[5] = &DD7[6*numberOfLBnodes];
+   }
+
+
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      //q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      //q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      //q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      //q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      //q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      //q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      //q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      //q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      //q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      //q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      //q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      //q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      //q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      //q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      //q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      //q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      //q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      //q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      //q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      //q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[d000])[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); 
+
+
+      //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); 
+
+      //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[d000])[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));
+      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 cu_sq       =c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      real ux_sq       = vx1 * vx1;
+      real uy_sq       = vx2 * vx2;
+      real uz_sq       = vx3 * vx3;
+      real omegaD     = c3o1 - sqrt(c3o1);
+      real Lam         = -(c1o2-c1o1/omegaD);
+      real nue_d       = Lam/c3o1;
+      //real ae          = zero;
+      real ae          = diffusivity/nue_d - c1o1;
+
+      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
+      real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
+      real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
+      real TempD = temp[k];
+
+
+      f7_ZERO =  (D7.f[0])[kzero];
+      f7_W    =  (D7.f[1])[ke   ];
+      f7_E    =  (D7.f[2])[kw   ];
+      f7_S    =  (D7.f[3])[kn   ];
+      f7_N    =  (D7.f[4])[ks   ];
+      f7_B    =  (D7.f[5])[kt   ];
+      f7_T    =  (D7.f[6])[kb   ];
+
+      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
+
+      //feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      feq7_E    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
+      feq7_W    = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
+      feq7_N    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
+      feq7_S    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
+      feq7_T    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
+      feq7_B    = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
+
+      //feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      feqW7_E    = TempD*(c1o6*(ae+c1o1));//+c1o2*(ux_sq)+vx1*c1o2);
+      feqW7_W    = TempD*(c1o6*(ae+c1o1));//+c1o2*(ux_sq)-vx1*c1o2);
+      feqW7_N    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uy_sq)+vx2*c1o2);
+      feqW7_S    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uy_sq)-vx2*c1o2);
+      feqW7_T    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uz_sq)+vx3*c1o2);
+      feqW7_B    = TempD*(c1o6*(ae+c1o1));//+c1o2*(uz_sq)-vx3*c1o2);
+
+      //////////////////////////////////////////////////////////////////////////
+      //pointertausch
+      if (isEvenTimestep==false)
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[1] = &DD7[1*numberOfLBnodes];
+         D7.f[2] = &DD7[2*numberOfLBnodes];
+         D7.f[3] = &DD7[3*numberOfLBnodes];
+         D7.f[4] = &DD7[4*numberOfLBnodes];
+         D7.f[5] = &DD7[5*numberOfLBnodes];
+         D7.f[6] = &DD7[6*numberOfLBnodes];
+      }
+      else
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[2] = &DD7[1*numberOfLBnodes];
+         D7.f[1] = &DD7[2*numberOfLBnodes];
+         D7.f[4] = &DD7[3*numberOfLBnodes];
+         D7.f[3] = &DD7[4*numberOfLBnodes];
+         D7.f[6] = &DD7[5*numberOfLBnodes];
+         D7.f[5] = &DD7[6*numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //dP00
+      //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //dM00
+      //(D7.f[3])[kn   ] = f7_N - feq7_N + feqW7_S; //d0P0
+      //(D7.f[4])[ks   ] = f7_S - feq7_S + feqW7_N; //d0M0
+      //(D7.f[5])[kt   ] = f7_T - feq7_T + feqW7_B; //d00P
+      //(D7.f[6])[kb   ] = f7_B - feq7_B + feqW7_T; //d00M
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////mit Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
+      //}
+
+      //////////////////////////////////////////////////////////////////////////
+      //ohne Q's
+      real /*feq,*/ q;
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADDirichlet27(
+											 real* DD, 
+											 real* DD27, 
+											 real* temp,
+											 real diffusivity,
+											 int* k_Q, 
+											 real* QQ,
+											 unsigned int numberOfBCnodes, 
+											 real om1, 
+											 unsigned int* neighborX,
+											 unsigned int* neighborY,
+											 unsigned int* neighborZ,
+											 unsigned long long numberOfLBnodes, 
+											 bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_ZERO = (D.f[d000])[kzero];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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 + f_ZERO; 
+
+      //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); 
+
+
+      //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); 
+
+      //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)+f_ZERO;
+      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));
+      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[dP00])[ke   ];
+      real f27_E    = (D27.f[dM00])[kw   ];
+      real f27_S    = (D27.f[d0P0])[kn   ];
+      real f27_N    = (D27.f[d0M0])[ks   ];
+      real f27_B    = (D27.f[d00P])[kt   ];
+      real f27_T    = (D27.f[d00M])[kb   ];
+      real f27_SW   = (D27.f[dPP0])[kne  ];
+      real f27_NE   = (D27.f[dMM0])[ksw  ];
+      real f27_NW   = (D27.f[dPM0])[kse  ];
+      real f27_SE   = (D27.f[dMP0])[knw  ];
+      real f27_BW   = (D27.f[dP0P])[kte  ];
+      real f27_TE   = (D27.f[dM0M])[kbw  ];
+      real f27_TW   = (D27.f[dP0M])[kbe  ];
+      real f27_BE   = (D27.f[dM0P])[ktw  ];
+      real f27_BS   = (D27.f[d0PP])[ktn  ];
+      real f27_TN   = (D27.f[d0MM])[kbs  ];
+      real f27_TS   = (D27.f[d0PM])[kbn  ];
+      real f27_BN   = (D27.f[d0MP])[kts  ];
+      real f27_ZERO = (D27.f[d000])[kzero];
+      real f27_BSW  = (D27.f[dPPP])[ktne ];
+      real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      real f27_BNW  = (D27.f[dPMP])[ktse ];
+      real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      real f27_TSW  = (D27.f[dPPM])[kbne ];
+      real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      real f27_TNW  = (D27.f[dPMM])[kbse ];
+      real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+         f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+         f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real TempD = temp[k];//one;//temp[k];
+
+      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=0.1f;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[  ke   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[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[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADBB27( real* DD, 
+                                   real* DD27, 
+                                   real* temp,
+                                   real diffusivity,
+                                   int* k_Q, 
+                                   real* QQ,
+                                   unsigned int numberOfBCnodes, 
+                                   real om1, 
+                                   unsigned int* neighborX,
+                                   unsigned int* neighborY,
+                                   unsigned int* neighborZ,
+                                   unsigned long long numberOfLBnodes, 
+                                   bool isEvenTimestep)
+{
+   //Distributions27 D;
+   //if (isEvenTimestep==true)
+   //{
+   //   D.f[dP00] = &DD[dP00 * size_Mat];
+   //   D.f[dM00] = &DD[dM00 * size_Mat];
+   //   D.f[d0P0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0M0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00P] = &DD[d00P * size_Mat];
+   //   D.f[d00M] = &DD[d00M * size_Mat];
+   //   D.f[dPP0] = &DD[dPP0 * size_Mat];
+   //   D.f[dMM0] = &DD[dMM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dPM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dMP0 * size_Mat];
+   //   D.f[dP0P] = &DD[dP0P * size_Mat];
+   //   D.f[dM0M] = &DD[dM0M * size_Mat];
+   //   D.f[dP0M] = &DD[dP0M * size_Mat];
+   //   D.f[dM0P] = &DD[dM0P * size_Mat];
+   //   D.f[d0PP] = &DD[d0PP * size_Mat];
+   //   D.f[d0MM] = &DD[d0MM * size_Mat];
+   //   D.f[d0PM] = &DD[d0PM * size_Mat];
+   //   D.f[d0MP] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dPPP * size_Mat];
+   //   D.f[dMMP] = &DD[dMMP * size_Mat];
+   //   D.f[dPMP] = &DD[dPMP * size_Mat];
+   //   D.f[dMPP] = &DD[dMPP * size_Mat];
+   //   D.f[dPPM] = &DD[dPPM * size_Mat];
+   //   D.f[dMMM] = &DD[dMMM * size_Mat];
+   //   D.f[dPMM] = &DD[dPMM * size_Mat];
+   //   D.f[dMPM] = &DD[dMPM * size_Mat];
+   //} 
+   //else
+   //{
+   //   D.f[dM00] = &DD[dP00 * size_Mat];
+   //   D.f[dP00] = &DD[dM00 * size_Mat];
+   //   D.f[d0M0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0P0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00M] = &DD[d00P * size_Mat];
+   //   D.f[d00P] = &DD[d00M * size_Mat];
+   //   D.f[dMM0] = &DD[dPP0 * size_Mat];
+   //   D.f[dPP0] = &DD[dMM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dPM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dMP0 * size_Mat];
+   //   D.f[dM0M] = &DD[dP0P * size_Mat];
+   //   D.f[dP0P] = &DD[dM0M * size_Mat];
+   //   D.f[dM0P] = &DD[dP0M * size_Mat];
+   //   D.f[dP0M] = &DD[dM0P * size_Mat];
+   //   D.f[d0MM] = &DD[d0PP * size_Mat];
+   //   D.f[d0PP] = &DD[d0MM * size_Mat];
+   //   D.f[d0MP] = &DD[d0PM * size_Mat];
+   //   D.f[d0PM] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dMMM * size_Mat];
+   //   D.f[dMMP] = &DD[dPPM * size_Mat];
+   //   D.f[dPMP] = &DD[dMPM * size_Mat];
+   //   D.f[dMPP] = &DD[dPMM * size_Mat];
+   //   D.f[dPPM] = &DD[dMMP * size_Mat];
+   //   D.f[dMMM] = &DD[dPPP * size_Mat];
+   //   D.f[dPMM] = &DD[dMPP * size_Mat];
+   //   D.f[dMPM] = &DD[dPMP * size_Mat];
+   //}
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      //real f_E    = (D.f[dM00])[kw   ];
+      //real f_S    = (D.f[d0P0])[kn   ];
+      //real f_N    = (D.f[d0M0])[ks   ];
+      //real f_B    = (D.f[d00P])[kt   ];
+      //real f_T    = (D.f[d00M])[kb   ];
+      //real f_SW   = (D.f[dPP0])[kne  ];
+      //real f_NE   = (D.f[dMM0])[ksw  ];
+      //real f_NW   = (D.f[dPM0])[kse  ];
+      //real f_SE   = (D.f[dMP0])[knw  ];
+      //real f_BW   = (D.f[dP0P])[kte  ];
+      //real f_TE   = (D.f[dM0M])[kbw  ];
+      //real f_TW   = (D.f[dP0M])[kbe  ];
+      //real f_BE   = (D.f[dM0P])[ktw  ];
+      //real f_BS   = (D.f[d0PP])[ktn  ];
+      //real f_TN   = (D.f[d0MM])[kbs  ];
+      //real f_TS   = (D.f[d0PM])[kbn  ];
+      //real f_BN   = (D.f[d0MP])[kts  ];
+      //real f_ZERO = (D.f[d000])[kzero];
+      //real f_BSW  = (D.f[dPPP])[ktne ];
+      //real f_BNE  = (D.f[dMMP])[ktsw ];
+      //real f_BNW  = (D.f[dPMP])[ktse ];
+      //real f_BSE  = (D.f[dMPP])[ktnw ];
+      //real f_TSW  = (D.f[dPPM])[kbne ];
+      //real f_TNE  = (D.f[dMMM])[kbsw ];
+      //real f_TNW  = (D.f[dPMM])[kbse ];
+      //real f_TSE  = (D.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      //real vx1, vx2, vx3, /*drho, feq,*/ q;
+      real 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 + f_ZERO; 
+
+      //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); 
+
+
+      //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); 
+
+      //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)+f_ZERO;
+      //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));
+      //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[dP00])[ke   ];
+      real f27_E    = (D27.f[dM00])[kw   ];
+      real f27_S    = (D27.f[d0P0])[kn   ];
+      real f27_N    = (D27.f[d0M0])[ks   ];
+      real f27_B    = (D27.f[d00P])[kt   ];
+      real f27_T    = (D27.f[d00M])[kb   ];
+      real f27_SW   = (D27.f[dPP0])[kne  ];
+      real f27_NE   = (D27.f[dMM0])[ksw  ];
+      real f27_NW   = (D27.f[dPM0])[kse  ];
+      real f27_SE   = (D27.f[dMP0])[knw  ];
+      real f27_BW   = (D27.f[dP0P])[kte  ];
+      real f27_TE   = (D27.f[dM0M])[kbw  ];
+      real f27_TW   = (D27.f[dP0M])[kbe  ];
+      real f27_BE   = (D27.f[dM0P])[ktw  ];
+      real f27_BS   = (D27.f[d0PP])[ktn  ];
+      real f27_TN   = (D27.f[d0MM])[kbs  ];
+      real f27_TS   = (D27.f[d0PM])[kbn  ];
+      real f27_BN   = (D27.f[d0MP])[kts  ];
+      //real f27_ZERO = (D27.f[d000])[kzero];
+      real f27_BSW  = (D27.f[dPPP])[ktne ];
+      real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      real f27_BNW  = (D27.f[dPMP])[ktse ];
+      real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      real f27_TSW  = (D27.f[dPPM])[kbne ];
+      real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      real f27_TNW  = (D27.f[dPMM])[kbse ];
+      real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      //real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+      //   f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+      //   f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      //real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      //real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      //real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      //real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      //real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      //real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      //real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      //real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      //real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      //real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      //real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      //real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      //real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      //real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      //real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      //real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      //real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      //real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      //real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      //real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      //real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      //real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      //real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      //real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      //real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      //real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //real TempD = temp[k];
+
+      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      //real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      //real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      //real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      //real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      //real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      //real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      //real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      //real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      //real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      //real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      //real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      //real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      //real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      //real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      //real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      //real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      //real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      //real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      //real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      //real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      //real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      //real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      //real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      //real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      //real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      //real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=0.1f;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw  ]=f27_E  ;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke  ]=f27_W  ;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks  ]=f27_N  ;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn  ]=f27_S  ;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb  ]=f27_T  ;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt  ]=f27_B  ;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=f27_NE ;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=f27_SW ;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=f27_SE ;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=f27_NW ;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=f27_TE ;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=f27_BW ;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=f27_BE ;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=f27_TW ;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=f27_TN ;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=f27_BS ;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=f27_BN ;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=f27_TS ;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=f27_TNE;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=f27_BSW;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=f27_BNE;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=f27_TSW;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=f27_TSE;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=f27_BNW;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=f27_BSE;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=f27_TNW;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//////																																		  //////
+//////                 										incomp   																		  //////
+//////																																		  //////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QNoSlipADincomp7(
+											 real* DD, 
+											 real* DD7, 
+											 real* temp,
+											 real diffusivity,
+											 int* k_Q, 
+											 real* QQ,
+											 unsigned int numberOfBCnodes, 
+											 real om1, 
+											 unsigned int* neighborX,
+											 unsigned int* neighborY,
+											 unsigned int* neighborZ,
+											 unsigned long long numberOfLBnodes, 
+											 bool isEvenTimestep)
+{
+   //Distributions27 D;
+   //if (isEvenTimestep==true)
+   //{
+   //   D.f[dP00] = &DD[dP00 * size_Mat];
+   //   D.f[dM00] = &DD[dM00 * size_Mat];
+   //   D.f[d0P0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0M0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00P] = &DD[d00P * size_Mat];
+   //   D.f[d00M] = &DD[d00M * size_Mat];
+   //   D.f[dPP0] = &DD[dPP0 * size_Mat];
+   //   D.f[dMM0] = &DD[dMM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dPM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dMP0 * size_Mat];
+   //   D.f[dP0P] = &DD[dP0P * size_Mat];
+   //   D.f[dM0M] = &DD[dM0M * size_Mat];
+   //   D.f[dP0M] = &DD[dP0M * size_Mat];
+   //   D.f[dM0P] = &DD[dM0P * size_Mat];
+   //   D.f[d0PP] = &DD[d0PP * size_Mat];
+   //   D.f[d0MM] = &DD[d0MM * size_Mat];
+   //   D.f[d0PM] = &DD[d0PM * size_Mat];
+   //   D.f[d0MP] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dPPP * size_Mat];
+   //   D.f[dMMP] = &DD[dMMP * size_Mat];
+   //   D.f[dPMP] = &DD[dPMP * size_Mat];
+   //   D.f[dMPP] = &DD[dMPP * size_Mat];
+   //   D.f[dPPM] = &DD[dPPM * size_Mat];
+   //   D.f[dMMM] = &DD[dMMM * size_Mat];
+   //   D.f[dPMM] = &DD[dPMM * size_Mat];
+   //   D.f[dMPM] = &DD[dMPM * size_Mat];
+   //} 
+   //else
+   //{
+   //   D.f[dM00] = &DD[dP00 * size_Mat];
+   //   D.f[dP00] = &DD[dM00 * size_Mat];
+   //   D.f[d0M0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0P0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00M] = &DD[d00P * size_Mat];
+   //   D.f[d00P] = &DD[d00M * size_Mat];
+   //   D.f[dMM0] = &DD[dPP0 * size_Mat];
+   //   D.f[dPP0] = &DD[dMM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dPM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dMP0 * size_Mat];
+   //   D.f[dM0M] = &DD[dP0P * size_Mat];
+   //   D.f[dP0P] = &DD[dM0M * size_Mat];
+   //   D.f[dM0P] = &DD[dP0M * size_Mat];
+   //   D.f[dP0M] = &DD[dM0P * size_Mat];
+   //   D.f[d0MM] = &DD[d0PP * size_Mat];
+   //   D.f[d0PP] = &DD[d0MM * size_Mat];
+   //   D.f[d0MP] = &DD[d0PM * size_Mat];
+   //   D.f[d0PM] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dMMM * size_Mat];
+   //   D.f[dMMP] = &DD[dPPM * size_Mat];
+   //   D.f[dPMP] = &DD[dMPM * size_Mat];
+   //   D.f[dMPP] = &DD[dPMM * size_Mat];
+   //   D.f[dPPM] = &DD[dMMP * size_Mat];
+   //   D.f[dMMM] = &DD[dPPP * size_Mat];
+   //   D.f[dPMM] = &DD[dMPP * size_Mat];
+   //   D.f[dMPM] = &DD[dPMP * size_Mat];
+   //}
+
+   Distributions7 D7;
+   if (isEvenTimestep==true)
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[1] = &DD7[1*numberOfLBnodes];
+      D7.f[2] = &DD7[2*numberOfLBnodes];
+      D7.f[3] = &DD7[3*numberOfLBnodes];
+      D7.f[4] = &DD7[4*numberOfLBnodes];
+      D7.f[5] = &DD7[5*numberOfLBnodes];
+      D7.f[6] = &DD7[6*numberOfLBnodes];
+   }
+   else
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[2] = &DD7[1*numberOfLBnodes];
+      D7.f[1] = &DD7[2*numberOfLBnodes];
+      D7.f[4] = &DD7[3*numberOfLBnodes];
+      D7.f[3] = &DD7[4*numberOfLBnodes];
+      D7.f[6] = &DD7[5*numberOfLBnodes];
+      D7.f[5] = &DD7[6*numberOfLBnodes];
+   }
+
+
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      //////////////////////////////////////////////////////////////////////////////////
+      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB;
+
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * 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];
+      //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 f_W    = (D.f[dP00])[ke   ];
+      //real f_E    = (D.f[dM00])[kw   ];
+      //real f_S    = (D.f[d0P0])[kn   ];
+      //real f_N    = (D.f[d0M0])[ks   ];
+      //real f_B    = (D.f[d00P])[kt   ];
+      //real f_T    = (D.f[d00M])[kb   ];
+      //real f_SW   = (D.f[dPP0])[kne  ];
+      //real f_NE   = (D.f[dMM0])[ksw  ];
+      //real f_NW   = (D.f[dPM0])[kse  ];
+      //real f_SE   = (D.f[dMP0])[knw  ];
+      //real f_BW   = (D.f[dP0P])[kte  ];
+      //real f_TE   = (D.f[dM0M])[kbw  ];
+      //real f_TW   = (D.f[dP0M])[kbe  ];
+      //real f_BE   = (D.f[dM0P])[ktw  ];
+      //real f_BS   = (D.f[d0PP])[ktn  ];
+      //real f_TN   = (D.f[d0MM])[kbs  ];
+      //real f_TS   = (D.f[d0PM])[kbn  ];
+      //real f_BN   = (D.f[d0MP])[kts  ];
+      //real f_BSW  = (D.f[dPPP])[ktne ];
+      //real f_BNE  = (D.f[dMMP])[ktsw ];
+      //real f_BNW  = (D.f[dPMP])[ktse ];
+      //real f_BSE  = (D.f[dMPP])[ktnw ];
+      //real f_TSW  = (D.f[dPPM])[kbne ];
+      //real f_TNE  = (D.f[dMMM])[kbsw ];
+      //real f_TNW  = (D.f[dPMM])[kbse ];
+      //real f_TSE  = (D.f[dMPM])[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));
+		 ////d�rrrrrty !!!!!!!!!!!!!
+   //      real vx1     =  ten * ((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     =  ten * ((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     =  ten * ((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 cu_sq       =c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      //real ux_sq       = vx1 * vx1;
+      //real uy_sq       = vx2 * vx2;
+      //real uz_sq       = vx3 * vx3;
+      ////////////////////////////////////////////////////////////////////////////////
+	  //BGK
+      //real omegaD     = three - sqrt(three);
+      //real Lam         = -(c1o2-one/omegaD);
+      //real nue_d       = Lam/three;
+      //real ae          = diffusivity/nue_d - one; //zero;
+
+      real f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
+      //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
+      //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
+      real TempD = temp[k];
+
+
+      //f7_ZERO =  (D7.f[0])[kzero];
+      f7_W    =  (D7.f[1])[ke   ];
+      f7_E    =  (D7.f[2])[kw   ];
+      f7_S    =  (D7.f[3])[kn   ];
+      f7_N    =  (D7.f[4])[ks   ];
+      f7_B    =  (D7.f[5])[kt   ];
+      f7_T    =  (D7.f[6])[kb   ];
+
+      //real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
+
+      ////feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      //feq7_E    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
+      //feq7_W    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
+      //feq7_N    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
+      //feq7_S    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
+      //feq7_T    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
+      //feq7_B    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
+
+      ////feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      //feqW7_E    = TempD*(c1o6*(ae+one));//+c1o2*(ux_sq)+vx1*c1o2);
+      //feqW7_W    = TempD*(c1o6*(ae+one));//+c1o2*(ux_sq)-vx1*c1o2);
+      //feqW7_N    = TempD*(c1o6*(ae+one));//+c1o2*(uy_sq)+vx2*c1o2);
+      //feqW7_S    = TempD*(c1o6*(ae+one));//+c1o2*(uy_sq)-vx2*c1o2);
+      //feqW7_T    = TempD*(c1o6*(ae+one));//+c1o2*(uz_sq)+vx3*c1o2);
+      //feqW7_B    = TempD*(c1o6*(ae+one));//+c1o2*(uz_sq)-vx3*c1o2);
+
+      ////////////////////////////////////////////////////////////////////////////////
+	  //TRT
+      real cs2     = c1o4;
+      //////////////////////////////////////////////////////////////////////////
+      //pointertausch
+      if (isEvenTimestep==false)
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[1] = &DD7[1*numberOfLBnodes];
+         D7.f[2] = &DD7[2*numberOfLBnodes];
+         D7.f[3] = &DD7[3*numberOfLBnodes];
+         D7.f[4] = &DD7[4*numberOfLBnodes];
+         D7.f[5] = &DD7[5*numberOfLBnodes];
+         D7.f[6] = &DD7[6*numberOfLBnodes];
+      }
+      else
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[2] = &DD7[1*numberOfLBnodes];
+         D7.f[1] = &DD7[2*numberOfLBnodes];
+         D7.f[4] = &DD7[3*numberOfLBnodes];
+         D7.f[3] = &DD7[4*numberOfLBnodes];
+         D7.f[6] = &DD7[5*numberOfLBnodes];
+         D7.f[5] = &DD7[6*numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////mit Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=zero;
+      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
+      //}
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////ohne Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[2])[kw]=f7_W;// - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[1])[ke]=f7_E;// - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[4])[ks]=f7_S;// - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[3])[kn]=f7_N;// - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[6])[kb]=f7_B;// - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[5])[kt]=f7_T;// - feq7_T + feqW7_B;
+      //}
+
+
+      //////////////////////////////////////////////////////////////////////////
+      //ohne Q's aber mit TRT
+      real /*feq,*/ q;
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[2])[kw]= -f7_W + cs2 * TempD;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[1])[ke]= -f7_E + cs2 * TempD;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[4])[ks]= -f7_S + cs2 * TempD;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[3])[kn]= -f7_N + cs2 * TempD;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[6])[kb]= -f7_B + cs2 * TempD;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[5])[kt]= -f7_T + cs2 * TempD;
+      }
+
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QNoSlipADincomp27(
+											 real* DD, 
+											 real* DD27, 
+											 real* temp,
+											 real diffusivity,
+											 int* k_Q, 
+											 real* QQ,
+											 unsigned int numberOfBCnodes, 
+											 real om1, 
+											 unsigned int* neighborX,
+											 unsigned int* neighborY,
+											 unsigned int* neighborZ,
+											 unsigned long long numberOfLBnodes, 
+											 bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      //real f_ZERO = (D.f[d000])[kzero];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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[dP00])[ke   ];
+      real f27_E    = (D27.f[dM00])[kw   ];
+      real f27_S    = (D27.f[d0P0])[kn   ];
+      real f27_N    = (D27.f[d0M0])[ks   ];
+      real f27_B    = (D27.f[d00P])[kt   ];
+      real f27_T    = (D27.f[d00M])[kb   ];
+      real f27_SW   = (D27.f[dPP0])[kne  ];
+      real f27_NE   = (D27.f[dMM0])[ksw  ];
+      real f27_NW   = (D27.f[dPM0])[kse  ];
+      real f27_SE   = (D27.f[dMP0])[knw  ];
+      real f27_BW   = (D27.f[dP0P])[kte  ];
+      real f27_TE   = (D27.f[dM0M])[kbw  ];
+      real f27_TW   = (D27.f[dP0M])[kbe  ];
+      real f27_BE   = (D27.f[dM0P])[ktw  ];
+      real f27_BS   = (D27.f[d0PP])[ktn  ];
+      real f27_TN   = (D27.f[d0MM])[kbs  ];
+      real f27_TS   = (D27.f[d0PM])[kbn  ];
+      real f27_BN   = (D27.f[d0MP])[kts  ];
+      real f27_ZERO = (D27.f[d000])[kzero];
+      real f27_BSW  = (D27.f[dPPP])[ktne ];
+      real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      real f27_BNW  = (D27.f[dPMP])[ktse ];
+      real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      real f27_TSW  = (D27.f[dPPM])[kbne ];
+      real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      real f27_TNW  = (D27.f[dPMM])[kbse ];
+      real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+         f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+         f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real TempD = temp[k];
+
+      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=0.1f;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  real q;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADVeloIncomp7(
+											real* DD, 
+											real* DD7, 
+											real* temp,
+											real* velo,
+											real diffusivity,
+											int* k_Q, 
+											real* QQ,
+											unsigned int numberOfBCnodes, 
+											real om1, 
+											unsigned int* neighborX,
+											unsigned int* neighborY,
+											unsigned int* neighborZ,
+											unsigned long long numberOfLBnodes, 
+											bool isEvenTimestep)
+{
+   //Distributions27 D;
+   //if (isEvenTimestep==true)
+   //{
+   //   D.f[dP00] = &DD[dP00 * size_Mat];
+   //   D.f[dM00] = &DD[dM00 * size_Mat];
+   //   D.f[d0P0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0M0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00P] = &DD[d00P * size_Mat];
+   //   D.f[d00M] = &DD[d00M * size_Mat];
+   //   D.f[dPP0] = &DD[dPP0 * size_Mat];
+   //   D.f[dMM0] = &DD[dMM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dPM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dMP0 * size_Mat];
+   //   D.f[dP0P] = &DD[dP0P * size_Mat];
+   //   D.f[dM0M] = &DD[dM0M * size_Mat];
+   //   D.f[dP0M] = &DD[dP0M * size_Mat];
+   //   D.f[dM0P] = &DD[dM0P * size_Mat];
+   //   D.f[d0PP] = &DD[d0PP * size_Mat];
+   //   D.f[d0MM] = &DD[d0MM * size_Mat];
+   //   D.f[d0PM] = &DD[d0PM * size_Mat];
+   //   D.f[d0MP] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dPPP * size_Mat];
+   //   D.f[dMMP] = &DD[dMMP * size_Mat];
+   //   D.f[dPMP] = &DD[dPMP * size_Mat];
+   //   D.f[dMPP] = &DD[dMPP * size_Mat];
+   //   D.f[dPPM] = &DD[dPPM * size_Mat];
+   //   D.f[dMMM] = &DD[dMMM * size_Mat];
+   //   D.f[dPMM] = &DD[dPMM * size_Mat];
+   //   D.f[dMPM] = &DD[dMPM * size_Mat];
+   //} 
+   //else
+   //{
+   //   D.f[dM00] = &DD[dP00 * size_Mat];
+   //   D.f[dP00] = &DD[dM00 * size_Mat];
+   //   D.f[d0M0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0P0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00M] = &DD[d00P * size_Mat];
+   //   D.f[d00P] = &DD[d00M * size_Mat];
+   //   D.f[dMM0] = &DD[dPP0 * size_Mat];
+   //   D.f[dPP0] = &DD[dMM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dPM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dMP0 * size_Mat];
+   //   D.f[dM0M] = &DD[dP0P * size_Mat];
+   //   D.f[dP0P] = &DD[dM0M * size_Mat];
+   //   D.f[dM0P] = &DD[dP0M * size_Mat];
+   //   D.f[dP0M] = &DD[dM0P * size_Mat];
+   //   D.f[d0MM] = &DD[d0PP * size_Mat];
+   //   D.f[d0PP] = &DD[d0MM * size_Mat];
+   //   D.f[d0MP] = &DD[d0PM * size_Mat];
+   //   D.f[d0PM] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dMMM * size_Mat];
+   //   D.f[dMMP] = &DD[dPPM * size_Mat];
+   //   D.f[dPMP] = &DD[dMPM * size_Mat];
+   //   D.f[dMPP] = &DD[dPMM * size_Mat];
+   //   D.f[dPPM] = &DD[dMMP * size_Mat];
+   //   D.f[dMMM] = &DD[dPPP * size_Mat];
+   //   D.f[dPMM] = &DD[dMPP * size_Mat];
+   //   D.f[dMPM] = &DD[dPMP * size_Mat];
+   //}
+
+   Distributions7 D7;
+   if (isEvenTimestep==true)
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[1] = &DD7[1*numberOfLBnodes];
+      D7.f[2] = &DD7[2*numberOfLBnodes];
+      D7.f[3] = &DD7[3*numberOfLBnodes];
+      D7.f[4] = &DD7[4*numberOfLBnodes];
+      D7.f[5] = &DD7[5*numberOfLBnodes];
+      D7.f[6] = &DD7[6*numberOfLBnodes];
+   }
+   else
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[2] = &DD7[1*numberOfLBnodes];
+      D7.f[1] = &DD7[2*numberOfLBnodes];
+      D7.f[4] = &DD7[3*numberOfLBnodes];
+      D7.f[3] = &DD7[4*numberOfLBnodes];
+      D7.f[6] = &DD7[5*numberOfLBnodes];
+      D7.f[5] = &DD7[6*numberOfLBnodes];
+   }
+
+
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      //////////////////////////////////////////////////////////////////////////////////
+      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB; 
+
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * 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];
+      //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 f_W    = (D.f[dP00])[ke   ];
+      //real f_E    = (D.f[dM00])[kw   ];
+      //real f_S    = (D.f[d0P0])[kn   ];
+      //real f_N    = (D.f[d0M0])[ks   ];
+      //real f_B    = (D.f[d00P])[kt   ];
+      //real f_T    = (D.f[d00M])[kb   ];
+      //real f_SW   = (D.f[dPP0])[kne  ];
+      //real f_NE   = (D.f[dMM0])[ksw  ];
+      //real f_NW   = (D.f[dPM0])[kse  ];
+      //real f_SE   = (D.f[dMP0])[knw  ];
+      //real f_BW   = (D.f[dP0P])[kte  ];
+      //real f_TE   = (D.f[dM0M])[kbw  ];
+      //real f_TW   = (D.f[dP0M])[kbe  ];
+      //real f_BE   = (D.f[dM0P])[ktw  ];
+      //real f_BS   = (D.f[d0PP])[ktn  ];
+      //real f_TN   = (D.f[d0MM])[kbs  ];
+      //real f_TS   = (D.f[d0PM])[kbn  ];
+      //real f_BN   = (D.f[d0MP])[kts  ];
+      //real f_BSW  = (D.f[dPPP])[ktne ];
+      //real f_BNE  = (D.f[dMMP])[ktsw ];
+      //real f_BNW  = (D.f[dPMP])[ktse ];
+      //real f_BSE  = (D.f[dMPP])[ktnw ];
+      //real f_TSW  = (D.f[dPPM])[kbne ];
+      //real f_TNE  = (D.f[dMMM])[kbsw ];
+      //real f_TNW  = (D.f[dPMM])[kbse ];
+      //real f_TSE  = (D.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      //real vx1_Inflow   = c0o1;
+      //real vx2_Inflow   = velo[k];
+      //real vx3_Inflow   = c0o1;
+      //real ux_sq_Inflow = vx1_Inflow * vx1_Inflow;
+      //real uy_sq_Inflow = vx2_Inflow * vx2_Inflow;
+      //real uz_sq_Inflow = vx3_Inflow * vx3_Inflow;
+      ////////////////////////////////////////////////////////////////////////////////
+      //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));
+		 ////d�rrrrrty !!!!!!!!!!!!!
+   //      real vx1     =  ten * ((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     =  ten * ((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     =  ten * ((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 cu_sq       =1.5f*(vx1*vx1+vx2*vx2+vx3*vx3);
+      //real ux_sq       = vx1 * vx1;
+      //real uy_sq       = vx2 * vx2;
+      //real uz_sq       = vx3 * vx3;
+
+      real f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
+      //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
+      //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
+      real TempD = temp[k];
+
+      //f7_ZERO =  (D7.f[0])[kzero];
+      f7_W    =  (D7.f[1])[ke   ];
+      f7_E    =  (D7.f[2])[kw   ];
+      f7_S    =  (D7.f[3])[kn   ];
+      f7_N    =  (D7.f[4])[ks   ];
+      f7_B    =  (D7.f[5])[kt   ];
+      f7_T    =  (D7.f[6])[kb   ];
+
+      //real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
+
+      ////////////////////////////////////////////////////////////////////////////////
+	  //BGK
+      //real omegaD     = three - sqrt(three);
+      //real Lam         = -(c1o2-one/omegaD);
+      //real nue_d       = Lam/three;
+      ////real ae          = zero;
+      //real ae          = diffusivity/nue_d - one;
+
+      ////feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      //feq7_E    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
+      //feq7_W    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
+      //feq7_N    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
+      //feq7_S    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
+      //feq7_T    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
+      //feq7_B    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
+
+      ////feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+      //feqW7_E    = TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
+      //feqW7_W    = TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
+      //feqW7_N    = TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
+      //feqW7_S    = TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
+      //feqW7_T    = TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
+      //feqW7_B    = TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
+
+   //      ////////////////////////////////////////////////////////////////////////////////
+		 ////TRT  Yoshida Kernel - based on Ying
+         real cs2         = c1o4;
+   //      real Lam         = diffusivity/(one)/cs2;
+   //      real omegaD      = - one / (Lam + c1o2);
+   //      real ae          = zero;
+   //      ////////////////////////////////////////////////////////////////////////////////
+		 //real Mom000 = f7_ZERO + f7_W + f7_E + f7_N + f7_S + f7_T + f7_B; //1
+   //      real Mom100 = f7_E - f7_W;
+   //      real Mom010 = f7_N - f7_S;
+   //      real Mom001 = f7_T - f7_B;
+   //      real Mom222 = six*f7_ZERO - f7_W - f7_E - f7_N - f7_S - f7_T - f7_B;
+   //      real Mom200 = two*f7_W + two*f7_E - f7_N - f7_S - f7_T - f7_B;
+   //      real Mom022 = f7_N + f7_S - f7_T - f7_B;
+
+   //      real Meq000 = ConcD;
+   //      real Meq100 = ConcD*vx1;
+   //      real Meq010 = ConcD*vx2;
+   //      real Meq001 = ConcD*vx3;
+   //      real Meq222 = c3o4*ConcD;
+   //      real Meq200 = zero;
+   //      real Meq022 = zero;
+
+   //      // relaxation TRT Yoshida
+
+   //      // odd 
+   //      Mom100 = omegaD * (Mom100-Meq100);
+   //      Mom010 = omegaD * (Mom010-Meq010);
+   //      Mom001 = omegaD * (Mom001-Meq001);
+   //      
+   //      // even
+   //      Mom000 = -one*(Mom000-Meq000);
+   //      Mom222 = -one*(Mom222-Meq222);
+   //      Mom200 = -one*(Mom200-Meq200);
+   //      Mom022 = -one*(Mom022-Meq022);
+   //      
+   //      //Back transformation to distributions
+   //      f7_ZERO = f7_ZERO + c1o7*Mom000 + c1o7*Mom222;                                                  //1
+   //      f7_E    = f7_E    + c1o7*Mom000 + c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200;                 //2
+   //      f7_W    = f7_W    + c1o7*Mom000 - c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200;                 //3
+   //      f7_N    = f7_N    + c1o7*Mom000 + c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //4
+   //      f7_S    = f7_S    + c1o7*Mom000 - c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //5
+   //      f7_T    = f7_T    + c1o7*Mom000 + c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //6
+   //      f7_B    = f7_B    + c1o7*Mom000 - c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //7
+
+
+
+
+
+      //////////////////////////////////////////////////////////////////////////
+      //pointertausch
+      if (isEvenTimestep==false)
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[1] = &DD7[1*numberOfLBnodes];
+         D7.f[2] = &DD7[2*numberOfLBnodes];
+         D7.f[3] = &DD7[3*numberOfLBnodes];
+         D7.f[4] = &DD7[4*numberOfLBnodes];
+         D7.f[5] = &DD7[5*numberOfLBnodes];
+         D7.f[6] = &DD7[6*numberOfLBnodes];
+      }
+      else
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[2] = &DD7[1*numberOfLBnodes];
+         D7.f[1] = &DD7[2*numberOfLBnodes];
+         D7.f[4] = &DD7[3*numberOfLBnodes];
+         D7.f[3] = &DD7[4*numberOfLBnodes];
+         D7.f[6] = &DD7[5*numberOfLBnodes];
+         D7.f[5] = &DD7[6*numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////mit Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
+      //}
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////ohne Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
+      //}
+
+      //////////////////////////////////////////////////////////////////////////
+      //ohne Q's aber mit TRT
+      real /*feq,*/ q;
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[2])[kw]= -f7_W + cs2 * TempD;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[1])[ke]= -f7_E + cs2 * TempD;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[4])[ks]= -f7_S + cs2 * TempD;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[3])[kn]= -f7_N + cs2 * TempD;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[6])[kb]= -f7_B + cs2 * TempD;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[5])[kt]= -f7_T + cs2 * TempD;
+      }
+
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADVeloIncomp27(
+											real* DD, 
+											real* DD27, 
+											real* temp,
+											real* velo,
+											real diffusivity,
+											int* k_Q, 
+											real* QQ,
+											unsigned int numberOfBCnodes, 
+											real om1, 
+											unsigned int* neighborX,
+											unsigned int* neighborY,
+											unsigned int* neighborZ,
+											unsigned long long numberOfLBnodes, 
+											bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      //real f_ZERO = (D.f[d000])[kzero];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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[dP00])[ke   ];
+      //real f27_E    = (D27.f[dM00])[kw   ];
+      //real f27_S    = (D27.f[d0P0])[kn   ];
+      //real f27_N    = (D27.f[d0M0])[ks   ];
+      //real f27_B    = (D27.f[d00P])[kt   ];
+      //real f27_T    = (D27.f[d00M])[kb   ];
+      //real f27_SW   = (D27.f[dPP0])[kne  ];
+      //real f27_NE   = (D27.f[dMM0])[ksw  ];
+      //real f27_NW   = (D27.f[dPM0])[kse  ];
+      //real f27_SE   = (D27.f[dMP0])[knw  ];
+      //real f27_BW   = (D27.f[dP0P])[kte  ];
+      //real f27_TE   = (D27.f[dM0M])[kbw  ];
+      //real f27_TW   = (D27.f[dP0M])[kbe  ];
+      //real f27_BE   = (D27.f[dM0P])[ktw  ];
+      //real f27_BS   = (D27.f[d0PP])[ktn  ];
+      //real f27_TN   = (D27.f[d0MM])[kbs  ];
+      //real f27_TS   = (D27.f[d0PM])[kbn  ];
+      //real f27_BN   = (D27.f[d0MP])[kts  ];
+      //real f27_ZERO = (D27.f[d000])[kzero];
+      //real f27_BSW  = (D27.f[dPPP])[ktne ];
+      //real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      //real f27_BNW  = (D27.f[dPMP])[ktse ];
+      //real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      //real f27_TSW  = (D27.f[dPPM])[kbne ];
+      //real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      //real f27_TNW  = (D27.f[dPMM])[kbse ];
+      //real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+      //                  f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+      //                  f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      //real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      //real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      //real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      //real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      //real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      //real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      //real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      //real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      //real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      //real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      //real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      //real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      //real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      //real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      //real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      //real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      //real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      //real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      //real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      //real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      //real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      //real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      //real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      //real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      //real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      //real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real TempD = temp[k];
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      // velocity inflow
+      vx1   = velo[k];//zero;
+      vx2   = c0o1;//velo[k];
+      vx3   = c0o1;
+
+      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      real feqW27_E    =   c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feqW27_W    =   c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feqW27_N    =   c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feqW27_S    =   c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feqW27_T    =   c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feqW27_B    =   c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feqW27_NE   =   c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feqW27_SW   =   c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feqW27_SE   =   c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feqW27_NW   =   c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feqW27_TE   =   c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feqW27_BW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feqW27_BE   =   c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feqW27_TW   =   c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feqW27_TN   =   c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feqW27_BS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feqW27_BN   =   c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feqW27_TS   =   c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feqW27_TNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feqW27_BSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feqW27_BNE  =   c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feqW27_TSW  =   c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feqW27_TSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feqW27_BNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feqW27_BSE  =   c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feqW27_TNW  =   c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real q;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADPressIncomp7( real* DD, 
+										   real* DD7, 
+										   real* temp,
+										   real* velo,
+										   real diffusivity,
+										   int* k_Q, 
+										   real* QQ,
+										   unsigned int numberOfBCnodes, 
+										   real om1, 
+										   unsigned int* neighborX,
+										   unsigned int* neighborY,
+										   unsigned int* neighborZ,
+										   unsigned long long numberOfLBnodes, 
+										   bool isEvenTimestep)
+{
+  /* Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * size_Mat];
+      D.f[dM00] = &DD[dM00 * size_Mat];
+      D.f[d0P0] = &DD[d0P0 * size_Mat];
+      D.f[d0M0] = &DD[d0M0 * size_Mat];
+      D.f[d00P] = &DD[d00P * size_Mat];
+      D.f[d00M] = &DD[d00M * size_Mat];
+      D.f[dPP0] = &DD[dPP0 * size_Mat];
+      D.f[dMM0] = &DD[dMM0 * size_Mat];
+      D.f[dPM0] = &DD[dPM0 * size_Mat];
+      D.f[dMP0] = &DD[dMP0 * size_Mat];
+      D.f[dP0P] = &DD[dP0P * size_Mat];
+      D.f[dM0M] = &DD[dM0M * size_Mat];
+      D.f[dP0M] = &DD[dP0M * size_Mat];
+      D.f[dM0P] = &DD[dM0P * size_Mat];
+      D.f[d0PP] = &DD[d0PP * size_Mat];
+      D.f[d0MM] = &DD[d0MM * size_Mat];
+      D.f[d0PM] = &DD[d0PM * size_Mat];
+      D.f[d0MP] = &DD[d0MP * size_Mat];
+      D.f[d000] = &DD[d000 * size_Mat];
+      D.f[dPPP] = &DD[dPPP * size_Mat];
+      D.f[dMMP] = &DD[dMMP * size_Mat];
+      D.f[dPMP] = &DD[dPMP * size_Mat];
+      D.f[dMPP] = &DD[dMPP * size_Mat];
+      D.f[dPPM] = &DD[dPPM * size_Mat];
+      D.f[dMMM] = &DD[dMMM * size_Mat];
+      D.f[dPMM] = &DD[dPMM * size_Mat];
+      D.f[dMPM] = &DD[dMPM * size_Mat];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * size_Mat];
+      D.f[dP00] = &DD[dM00 * size_Mat];
+      D.f[d0M0] = &DD[d0P0 * size_Mat];
+      D.f[d0P0] = &DD[d0M0 * size_Mat];
+      D.f[d00M] = &DD[d00P * size_Mat];
+      D.f[d00P] = &DD[d00M * size_Mat];
+      D.f[dMM0] = &DD[dPP0 * size_Mat];
+      D.f[dPP0] = &DD[dMM0 * size_Mat];
+      D.f[dMP0] = &DD[dPM0 * size_Mat];
+      D.f[dPM0] = &DD[dMP0 * size_Mat];
+      D.f[dM0M] = &DD[dP0P * size_Mat];
+      D.f[dP0P] = &DD[dM0M * size_Mat];
+      D.f[dM0P] = &DD[dP0M * size_Mat];
+      D.f[dP0M] = &DD[dM0P * size_Mat];
+      D.f[d0MM] = &DD[d0PP * size_Mat];
+      D.f[d0PP] = &DD[d0MM * size_Mat];
+      D.f[d0MP] = &DD[d0PM * size_Mat];
+      D.f[d0PM] = &DD[d0MP * size_Mat];
+      D.f[d000] = &DD[d000 * size_Mat];
+      D.f[dPPP] = &DD[dMMM * size_Mat];
+      D.f[dMMP] = &DD[dPPM * size_Mat];
+      D.f[dPMP] = &DD[dMPM * size_Mat];
+      D.f[dMPP] = &DD[dPMM * size_Mat];
+      D.f[dPPM] = &DD[dMMP * size_Mat];
+      D.f[dMMM] = &DD[dPPP * size_Mat];
+      D.f[dPMM] = &DD[dMPP * size_Mat];
+      D.f[dMPM] = &DD[dPMP * size_Mat];
+   }*/
+
+   Distributions7 D7;
+   if (isEvenTimestep==true)
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[1] = &DD7[1*numberOfLBnodes];
+      D7.f[2] = &DD7[2*numberOfLBnodes];
+      D7.f[3] = &DD7[3*numberOfLBnodes];
+      D7.f[4] = &DD7[4*numberOfLBnodes];
+      D7.f[5] = &DD7[5*numberOfLBnodes];
+      D7.f[6] = &DD7[6*numberOfLBnodes];
+   }
+   else
+   {
+      D7.f[0] = &DD7[0*numberOfLBnodes];
+      D7.f[2] = &DD7[1*numberOfLBnodes];
+      D7.f[1] = &DD7[2*numberOfLBnodes];
+      D7.f[4] = &DD7[3*numberOfLBnodes];
+      D7.f[3] = &DD7[4*numberOfLBnodes];
+      D7.f[6] = &DD7[5*numberOfLBnodes];
+      D7.f[5] = &DD7[6*numberOfLBnodes];
+   }
+
+
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      //////////////////////////////////////////////////////////////////////////////////
+      real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB; 
+
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * 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];
+      //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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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));
+		 ////d�rrrrrty !!!!!!!!!!!!!
+   //      real vx1     =  ten * ((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     =  ten * ((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     =  ten * ((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 cu_sq       =1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
+      //real ux_sq       = vx1 * vx1;
+      //real uy_sq       = vx2 * vx2;
+      //real uz_sq       = vx3 * vx3;
+      //////////////////////////////////////////////////////////////////////////
+	  //BGK
+      //real omegaD     = three - sqrt(three);
+      //real Lam         = -(c1o2-one/omegaD);
+      //real nue_d       = Lam/three;
+      ////real ae          = zero;
+      //real ae          = diffusivity/nue_d - one;
+
+      real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B;
+      //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B;
+      //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B;
+      //real TempD = temp[k];
+
+
+      f7_ZERO =  (D7.f[0])[kzero];
+      f7_W    =  (D7.f[1])[ke   ];
+      f7_E    =  (D7.f[2])[kw   ];
+      f7_S    =  (D7.f[3])[kn   ];
+      f7_N    =  (D7.f[4])[ks   ];
+      f7_B    =  (D7.f[5])[kt   ];
+      f7_T    =  (D7.f[6])[kb   ];
+
+      real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B;
+
+      ////feq7_ZERO = ConcD*(c1o3*(ae*(-3.0))-(ux_sq+uy_sq+uz_sq));
+      //feq7_E    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
+      //feq7_W    = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
+      //feq7_N    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
+      //feq7_S    = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
+      //feq7_T    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
+      //feq7_B    = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
+
+      ////feq7_ZERO = TempD*(c1o3*(ae*(-3.0f))-(ux_sq+uy_sq+uz_sq));
+      //feqW7_E    = feq7_E;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2);
+      //feqW7_W    = feq7_W;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2);
+      //feqW7_N    = feq7_N;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2);
+      //feqW7_S    = feq7_S;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2);
+      //feqW7_T    = feq7_T;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2);
+      //feqW7_B    = feq7_B;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2);
+
+      //////////////////////////////////////////////////////////////////////////
+	  //TRT  Yoshida Kernel - based on Ying
+      real cs2         = c1o4;
+      real Lam         = diffusivity/(c1o1)/cs2;
+      //real omegaD      = - c1o1 / (Lam + c1o2);
+      real nue_d       = Lam/c3o1;
+
+      //////////////////////////////////////////////////////////////////////////
+      //pointertausch
+      if (isEvenTimestep==false)
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[1] = &DD7[1*numberOfLBnodes];
+         D7.f[2] = &DD7[2*numberOfLBnodes];
+         D7.f[3] = &DD7[3*numberOfLBnodes];
+         D7.f[4] = &DD7[4*numberOfLBnodes];
+         D7.f[5] = &DD7[5*numberOfLBnodes];
+         D7.f[6] = &DD7[6*numberOfLBnodes];
+      }
+      else
+      {
+         D7.f[0] = &DD7[0*numberOfLBnodes];
+         D7.f[2] = &DD7[1*numberOfLBnodes];
+         D7.f[1] = &DD7[2*numberOfLBnodes];
+         D7.f[4] = &DD7[3*numberOfLBnodes];
+         D7.f[3] = &DD7[4*numberOfLBnodes];
+         D7.f[6] = &DD7[5*numberOfLBnodes];
+         D7.f[5] = &DD7[6*numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////mit Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-1.)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-1.)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   //q=0.;
+      //   (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B;
+      //}
+
+      ////////////////////////////////////////////////////////////////////////////
+      ////ohne Q's
+      //real /*feq,*/ q;
+      //q = q_dirE[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[2])[kw]= 0.1;//test
+      //   //(D7.f[2])[kw]=f7_W - feq7_W + feqW7_E;
+      //}
+
+      //q = q_dirW[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[1])[ke]= 0.1;//test
+      //   //(D7.f[1])[ke]=f7_E - feq7_E + feqW7_W;
+      //}
+
+      //q = q_dirN[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[4])[ks]= 0.1;//test
+      //   //(D7.f[4])[ks]=f7_S - feq7_S + feqW7_N;
+      //}
+
+      //q = q_dirS[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[3])[kn]= 0.1;//test
+      //   //(D7.f[3])[kn]=f7_N - feq7_N + feqW7_S;
+      //}
+
+      //q = q_dirT[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[6])[kb]= 0.1;//test
+      //   //(D7.f[6])[kb]=f7_B - feq7_B + feqW7_T;
+      //}
+
+      //q = q_dirB[k];
+      //if (q>=zero && q<=one)
+      //{
+      //   (D7.f[5])[kt]= 0.1;//test
+      //   //(D7.f[5])[kt]=f7_T - feq7_T + feqW7_B;
+      //}
+
+
+      //////////////////////////////////////////////////////////////////////////
+      //ohne Q's aber mit TRT
+      real /*feq,*/ q;
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[2])[kw]= f7_W + nue_d * ConcD;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[1])[ke]= f7_E + nue_d * ConcD;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[4])[ks]= f7_S + nue_d * ConcD;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[3])[kn]= f7_N + nue_d * ConcD;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[6])[kb]= f7_B + nue_d * ConcD;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D7.f[5])[kt]= f7_T + nue_d * ConcD;
+      }
+
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QADPressIncomp27(
+											   real* DD,
+											   real* DD27,
+											   real* temp,
+											   real* velo,
+											   real diffusivity,
+											   int* k_Q, 
+											   real* QQ,
+											   unsigned int numberOfBCnodes, 
+											   real om1, 
+											   unsigned int* neighborX,
+											   unsigned int* neighborY,
+											   unsigned int* neighborZ,
+											   unsigned long long numberOfLBnodes, 
+											   bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+
+   Distributions27 D27;
+   if (isEvenTimestep==true)
+   {
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k < 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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      //real f_ZERO = (D.f[d000])[kzero];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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[dP00])[ke   ];
+      //real f27_E    = (D27.f[dM00])[kw   ];
+      //real f27_S    = (D27.f[d0P0])[kn   ];
+      //real f27_N    = (D27.f[d0M0])[ks   ];
+      //real f27_B    = (D27.f[d00P])[kt   ];
+      //real f27_T    = (D27.f[d00M])[kb   ];
+      //real f27_SW   = (D27.f[dPP0])[kne  ];
+      //real f27_NE   = (D27.f[dMM0])[ksw  ];
+      //real f27_NW   = (D27.f[dPM0])[kse  ];
+      //real f27_SE   = (D27.f[dMP0])[knw  ];
+      //real f27_BW   = (D27.f[dP0P])[kte  ];
+      //real f27_TE   = (D27.f[dM0M])[kbw  ];
+      //real f27_TW   = (D27.f[dP0M])[kbe  ];
+      //real f27_BE   = (D27.f[dM0P])[ktw  ];
+      //real f27_BS   = (D27.f[d0PP])[ktn  ];
+      //real f27_TN   = (D27.f[d0MM])[kbs  ];
+      //real f27_TS   = (D27.f[d0PM])[kbn  ];
+      //real f27_BN   = (D27.f[d0MP])[kts  ];
+      //real f27_ZERO = (D27.f[d000])[kzero];
+      //real f27_BSW  = (D27.f[dPPP])[ktne ];
+      //real f27_BNE  = (D27.f[dMMP])[ktsw ];
+      //real f27_BNW  = (D27.f[dPMP])[ktse ];
+      //real f27_BSE  = (D27.f[dMPP])[ktnw ];
+      //real f27_TSW  = (D27.f[dPPM])[kbne ];
+      //real f27_TNE  = (D27.f[dMMM])[kbsw ];
+      //real f27_TNW  = (D27.f[dPMM])[kbse ];
+      //real f27_TSE  = (D27.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      ////////////////////////////////////////////////////////////////////////////////
+      //real ConcD =   f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW +
+                        //f27_BN  + f27_TS  + f27_TN  + f27_BS  + f27_BE  + f27_TW  + f27_TE  + f27_BW  + f27_SE + f27_NW + f27_NE + f27_SW + 
+                        //f27_T   + f27_B   + f27_N   + f27_S   + f27_E   + f27_W   + f27_ZERO; 
+
+      //real feq27_ZERO =   c8over27* ConcD*(one-cu_sq);
+      /*real feq27_E    =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      real feq27_W    =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      real feq27_N    =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      real feq27_S    =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      real feq27_T    =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      real feq27_B    =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      real feq27_NE   =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      real feq27_SW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      real feq27_SE   =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      real feq27_NW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      real feq27_TE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      real feq27_BW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      real feq27_BE   =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      real feq27_TW   =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      real feq27_TN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      real feq27_BS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      real feq27_BN   =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      real feq27_TS   =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      real feq27_TNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      real feq27_BSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      real feq27_BNE  =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      real feq27_TSW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      real feq27_TSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      real feq27_BNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      real feq27_BSE  =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      real feq27_TNW  =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);*/
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real TempD = temp[k];
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      // velocity inflow
+      //vx1   = zero;
+      //vx2   = zero;
+      //vx3   = velo[k];
+
+      //real feqW27_ZERO =   c8over27* TempD*(one-cu_sq);
+      real feqW27_E    =  c2o27* TempD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq); //feq27_E  ;// 
+      real feqW27_W    =  c2o27* TempD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq); //feq27_W  ;// 
+      real feqW27_N    =  c2o27* TempD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq); //feq27_N  ;// 
+      real feqW27_S    =  c2o27* TempD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); //feq27_S  ;// 
+      real feqW27_T    =  c2o27* TempD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); //feq27_T  ;// 
+      real feqW27_B    =  c2o27* TempD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); //feq27_B  ;// 
+      real feqW27_NE   =  c1o54* TempD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); //feq27_NE ;// 
+      real feqW27_SW   =  c1o54* TempD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); //feq27_SW ;// 
+      real feqW27_SE   =  c1o54* TempD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); //feq27_SE ;// 
+      real feqW27_NW   =  c1o54* TempD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); //feq27_NW ;// 
+      real feqW27_TE   =  c1o54* TempD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); //feq27_TE ;// 
+      real feqW27_BW   =  c1o54* TempD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); //feq27_BW ;// 
+      real feqW27_BE   =  c1o54* TempD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); //feq27_BE ;// 
+      real feqW27_TW   =  c1o54* TempD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); //feq27_TW ;// 
+      real feqW27_TN   =  c1o54* TempD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); //feq27_TN ;// 
+      real feqW27_BS   =  c1o54* TempD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); //feq27_BS ;// 
+      real feqW27_BN   =  c1o54* TempD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); //feq27_BN ;// 
+      real feqW27_TS   =  c1o54* TempD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); //feq27_TS ;// 
+      real feqW27_TNE  =  c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); //feq27_TNE;// 
+      real feqW27_BSW  =  c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); //feq27_BSW;// 
+      real feqW27_BNE  =  c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); //feq27_BNE;// 
+      real feqW27_TSW  =  c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); //feq27_TSW;// 
+      real feqW27_TSE  =  c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); //feq27_TSE;// 
+      real feqW27_BNW  =  c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); //feq27_BNW;// 
+      real feqW27_BSE  =  c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); //feq27_BSE;// 
+      real feqW27_TNW  =  c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //feq27_TNW;// 
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real omegaD     = c3o1 - sqrt(c3o1);
+      //real Lam        = -(c1o2-one/omegaD);
+      //real nue_d      = Lam/three;
+      //real ae         = zero;
+      //real ae         = diffusivity/nue_d - one;
+
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+         D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+         D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+         D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+         D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+         D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+         D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+         D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+         D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+         D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+         D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+         D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+         D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+         D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+         D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+         D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+         D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+         D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+         D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+         D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+         D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+         D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
+         D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+         D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+         D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+         D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+         D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real q;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+inline __device__ real calcDistributionBC_AD_interpol(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) {
+    real feq = weight * concentration * (c1o1 + c3o1 * v + c9o2 * v * v * concentration - v_sq * concentration);
+    return (c1o1 - q) / (c1o1 + q) * ((f - feq * omegaDiffusivity) / (c1o1 - omegaDiffusivity)) + (q * (f + finf) - c6o1 * weight * (jTangential)) / (c1o1 + q);
+}
+////////////////////////////////////////////////////////////////////////////////
+inline __device__ real calcDistributionBC_AD(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) {
+    return f - c6o1 * weight * jTangential;
+}
+
+
+// has to be excecuted before Fluid BCs
+//////////////////////////////////////////////////////////////////////////////
+__global__ void AD_SlipVelDeviceComp(
+    real *normalX,
+    real *normalY,
+    real *normalZ,
+    real *distributions,
+    real *distributionsAD,
+    int *QindexArray,
+    real *Qarrays,
+    uint numberOfBCnodes,
+    real omegaDiffusivity,
+    uint* neighborX,
+    uint* neighborY,
+    uint* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+    Distributions27 D;
+    if (isEvenTimestep)
+    {
+        D.f[dP00] = &distributions[dP00 * numberOfLBnodes];
+        D.f[dM00] = &distributions[dM00 * numberOfLBnodes];
+        D.f[d0P0] = &distributions[d0P0 * numberOfLBnodes];
+        D.f[d0M0] = &distributions[d0M0 * numberOfLBnodes];
+        D.f[d00P] = &distributions[d00P * numberOfLBnodes];
+        D.f[d00M] = &distributions[d00M * numberOfLBnodes];
+        D.f[dPP0] = &distributions[dPP0 * numberOfLBnodes];
+        D.f[dMM0] = &distributions[dMM0 * numberOfLBnodes];
+        D.f[dPM0] = &distributions[dPM0 * numberOfLBnodes];
+        D.f[dMP0] = &distributions[dMP0 * numberOfLBnodes];
+        D.f[dP0P] = &distributions[dP0P * numberOfLBnodes];
+        D.f[dM0M] = &distributions[dM0M * numberOfLBnodes];
+        D.f[dP0M] = &distributions[dP0M * numberOfLBnodes];
+        D.f[dM0P] = &distributions[dM0P * numberOfLBnodes];
+        D.f[d0PP] = &distributions[d0PP * numberOfLBnodes];
+        D.f[d0MM] = &distributions[d0MM * numberOfLBnodes];
+        D.f[d0PM] = &distributions[d0PM * numberOfLBnodes];
+        D.f[d0MP] = &distributions[d0MP * numberOfLBnodes];
+        D.f[d000] = &distributions[d000 * numberOfLBnodes];
+        D.f[dPPP] = &distributions[dPPP * numberOfLBnodes];
+        D.f[dMMP] = &distributions[dMMP * numberOfLBnodes];
+        D.f[dPMP] = &distributions[dPMP * numberOfLBnodes];
+        D.f[dMPP] = &distributions[dMPP * numberOfLBnodes];
+        D.f[dPPM] = &distributions[dPPM * numberOfLBnodes];
+        D.f[dMMM] = &distributions[dMMM * numberOfLBnodes];
+        D.f[dPMM] = &distributions[dPMM * numberOfLBnodes];
+        D.f[dMPM] = &distributions[dMPM * numberOfLBnodes];
+    }
+    else
+    {
+        D.f[dM00] = &distributions[dP00 * numberOfLBnodes];
+        D.f[dP00] = &distributions[dM00 * numberOfLBnodes];
+        D.f[d0M0] = &distributions[d0P0 * numberOfLBnodes];
+        D.f[d0P0] = &distributions[d0M0 * numberOfLBnodes];
+        D.f[d00M] = &distributions[d00P * numberOfLBnodes];
+        D.f[d00P] = &distributions[d00M * numberOfLBnodes];
+        D.f[dMM0] = &distributions[dPP0 * numberOfLBnodes];
+        D.f[dPP0] = &distributions[dMM0 * numberOfLBnodes];
+        D.f[dMP0] = &distributions[dPM0 * numberOfLBnodes];
+        D.f[dPM0] = &distributions[dMP0 * numberOfLBnodes];
+        D.f[dM0M] = &distributions[dP0P * numberOfLBnodes];
+        D.f[dP0P] = &distributions[dM0M * numberOfLBnodes];
+        D.f[dM0P] = &distributions[dP0M * numberOfLBnodes];
+        D.f[dP0M] = &distributions[dM0P * numberOfLBnodes];
+        D.f[d0MM] = &distributions[d0PP * numberOfLBnodes];
+        D.f[d0PP] = &distributions[d0MM * numberOfLBnodes];
+        D.f[d0MP] = &distributions[d0PM * numberOfLBnodes];
+        D.f[d0PM] = &distributions[d0MP * numberOfLBnodes];
+        D.f[d000] = &distributions[d000 * numberOfLBnodes];
+        D.f[dPPP] = &distributions[dMMM * numberOfLBnodes];
+        D.f[dMMP] = &distributions[dPPM * numberOfLBnodes];
+        D.f[dPMP] = &distributions[dMPM * numberOfLBnodes];
+        D.f[dMPP] = &distributions[dPMM * numberOfLBnodes];
+        D.f[dPPM] = &distributions[dMMP * numberOfLBnodes];
+        D.f[dMMM] = &distributions[dPPP * numberOfLBnodes];
+        D.f[dPMM] = &distributions[dMPP * numberOfLBnodes];
+        D.f[dMPM] = &distributions[dPMP * numberOfLBnodes];
+    }
+    ////////////////////////////////////////////////////////////////////////////////
+    Distributions27 DAD;
+    if (isEvenTimestep)
+    {
+        DAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes];
+        DAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes];
+        DAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes];
+        DAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes];
+        DAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes];
+        DAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes];
+        DAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes];
+        DAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes];
+        DAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes];
+        DAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes];
+        DAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes];
+        DAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes];
+        DAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes];
+        DAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes];
+        DAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes];
+        DAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes];
+        DAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes];
+        DAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes];
+        DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+        DAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes];
+        DAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes];
+        DAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes];
+        DAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes];
+        DAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes];
+        DAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes];
+        DAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes];
+        DAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes];
+    }
+    else
+    {
+        DAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes];
+        DAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes];
+        DAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes];
+        DAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes];
+        DAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes];
+        DAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes];
+        DAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes];
+        DAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes];
+        DAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes];
+        DAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes];
+        DAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes];
+        DAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes];
+        DAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes];
+        DAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes];
+        DAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes];
+        DAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes];
+        DAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes];
+        DAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes];
+        DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+        DAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes];
+        DAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes];
+        DAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes];
+        DAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes];
+        DAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes];
+        DAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes];
+        DAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes];
+        DAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes];
+    }
+    ////////////////////////////////////////////////////////////////////////////////
+    const unsigned  x = threadIdx.x;  // Globaler x-Index
+    const unsigned  y = blockIdx.x;   // Globaler y-Index
+    const unsigned  z = blockIdx.y;   // Globaler z-Index
+
+    const unsigned nx = blockDim.x;
+    const unsigned ny = gridDim.x;
+
+    const unsigned k = nx * (ny * z + y) + x;
+    //////////////////////////////////////////////////////////////////////////
+
+    if (k < numberOfBCnodes)
+    {
+        ////////////////////////////////////////////////////////////////////////////////
+        real NormX = normalX[k];
+        real NormY = normalY[k];
+        real NormZ = normalZ[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   = &Qarrays[dP00 * numberOfBCnodes];
+        q_dirW   = &Qarrays[dM00 * numberOfBCnodes];
+        q_dirN   = &Qarrays[d0P0 * numberOfBCnodes];
+        q_dirS   = &Qarrays[d0M0 * numberOfBCnodes];
+        q_dirT   = &Qarrays[d00P * numberOfBCnodes];
+        q_dirB   = &Qarrays[d00M * numberOfBCnodes];
+        q_dirNE  = &Qarrays[dPP0 * numberOfBCnodes];
+        q_dirSW  = &Qarrays[dMM0 * numberOfBCnodes];
+        q_dirSE  = &Qarrays[dPM0 * numberOfBCnodes];
+        q_dirNW  = &Qarrays[dMP0 * numberOfBCnodes];
+        q_dirTE  = &Qarrays[dP0P * numberOfBCnodes];
+        q_dirBW  = &Qarrays[dM0M * numberOfBCnodes];
+        q_dirBE  = &Qarrays[dP0M * numberOfBCnodes];
+        q_dirTW  = &Qarrays[dM0P * numberOfBCnodes];
+        q_dirTN  = &Qarrays[d0PP * numberOfBCnodes];
+        q_dirBS  = &Qarrays[d0MM * numberOfBCnodes];
+        q_dirBN  = &Qarrays[d0PM * numberOfBCnodes];
+        q_dirTS  = &Qarrays[d0MP * numberOfBCnodes];
+        q_dirTNE = &Qarrays[dPPP * numberOfBCnodes];
+        q_dirTSW = &Qarrays[dMMP * numberOfBCnodes];
+        q_dirTSE = &Qarrays[dPMP * numberOfBCnodes];
+        q_dirTNW = &Qarrays[dMPP * numberOfBCnodes];
+        q_dirBNE = &Qarrays[dPPM * numberOfBCnodes];
+        q_dirBSW = &Qarrays[dMMM * numberOfBCnodes];
+        q_dirBSE = &Qarrays[dPMM * numberOfBCnodes];
+        q_dirBNW = &Qarrays[dMPM * numberOfBCnodes];
+        ////////////////////////////////////////////////////////////////////////////////
+        //index
+        unsigned int KQK   = QindexArray[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 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[dP00])[ke];
+        f_E   = (D.f[dM00])[kw];
+        f_S   = (D.f[d0P0])[kn];
+        f_N   = (D.f[d0M0])[ks];
+        f_B   = (D.f[d00P])[kt];
+        f_T   = (D.f[d00M])[kb];
+        f_SW  = (D.f[dPP0])[kne];
+        f_NE  = (D.f[dMM0])[ksw];
+        f_NW  = (D.f[dPM0])[kse];
+        f_SE  = (D.f[dMP0])[knw];
+        f_BW  = (D.f[dP0P])[kte];
+        f_TE  = (D.f[dM0M])[kbw];
+        f_TW  = (D.f[dP0M])[kbe];
+        f_BE  = (D.f[dM0P])[ktw];
+        f_BS  = (D.f[d0PP])[ktn];
+        f_TN  = (D.f[d0MM])[kbs];
+        f_TS  = (D.f[d0PM])[kbn];
+        f_BN  = (D.f[d0MP])[kts];
+        f_BSW = (D.f[dPPP])[ktne];
+        f_BNE = (D.f[dMMP])[ktsw];
+        f_BNW = (D.f[dPMP])[ktse];
+        f_BSE = (D.f[dMPP])[ktnw];
+        f_TSW = (D.f[dPPM])[kbne];
+        f_TNE = (D.f[dMMM])[kbsw];
+        f_TNW = (D.f[dPMM])[kbse];
+        f_TSE = (D.f[dMPM])[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[d000])[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);
+
+
+        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 cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho);
+
+        ////////////////////////////////////////////////////////////////////////////////
+        f_W   = (DAD.f[dP00])[ke];
+        f_E   = (DAD.f[dM00])[kw];
+        f_S   = (DAD.f[d0P0])[kn];
+        f_N   = (DAD.f[d0M0])[ks];
+        f_B   = (DAD.f[d00P])[kt];
+        f_T   = (DAD.f[d00M])[kb];
+        f_SW  = (DAD.f[dPP0])[kne];
+        f_NE  = (DAD.f[dMM0])[ksw];
+        f_NW  = (DAD.f[dPM0])[kse];
+        f_SE  = (DAD.f[dMP0])[knw];
+        f_BW  = (DAD.f[dP0P])[kte];
+        f_TE  = (DAD.f[dM0M])[kbw];
+        f_TW  = (DAD.f[dP0M])[kbe];
+        f_BE  = (DAD.f[dM0P])[ktw];
+        f_BS  = (DAD.f[d0PP])[ktn];
+        f_TN  = (DAD.f[d0MM])[kbs];
+        f_TS  = (DAD.f[d0PM])[kbn];
+        f_BN  = (DAD.f[d0MP])[kts];
+        f_BSW = (DAD.f[dPPP])[ktne];
+        f_BNE = (DAD.f[dMMP])[ktsw];
+        f_BNW = (DAD.f[dPMP])[ktse];
+        f_BSE = (DAD.f[dMPP])[ktnw];
+        f_TSW = (DAD.f[dPPM])[kbne];
+        f_TNE = (DAD.f[dMMM])[kbsw];
+        f_TNW = (DAD.f[dPMM])[kbse];
+        f_TSE = (DAD.f[dMPM])[kbnw];
+        //////////////////////////////////////////////////////////////////////////
+        if (!isEvenTimestep)
+        {
+            DAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes];
+            DAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes];
+            DAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes];
+            DAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes];
+            DAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes];
+            DAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes];
+            DAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes];
+            DAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes];
+            DAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes];
+            DAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes];
+            DAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes];
+            DAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes];
+            DAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes];
+            DAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes];
+            DAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes];
+            DAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes];
+            DAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes];
+            DAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes];
+            DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+            DAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes];
+            DAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes];
+            DAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes];
+            DAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes];
+            DAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes];
+            DAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes];
+            DAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes];
+            DAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes];
+        }
+        else
+        {
+            DAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes];
+            DAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes];
+            DAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes];
+            DAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes];
+            DAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes];
+            DAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes];
+            DAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes];
+            DAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes];
+            DAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes];
+            DAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes];
+            DAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes];
+            DAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes];
+            DAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes];
+            DAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes];
+            DAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes];
+            DAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes];
+            DAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes];
+            DAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes];
+            DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+            DAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes];
+            DAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes];
+            DAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes];
+            DAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes];
+            DAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes];
+            DAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes];
+            DAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes];
+            DAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes];
+        }
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        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[d000])[kzero]);
+
+        real jx1 =
+            (((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)) - (vx1 * concentration);
+
+        real jx2 =
+            ((-(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 * concentration);
+
+        real jx3 =
+            (((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 * concentration);
+
+        //jx1 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity);
+        //jx2 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity);
+        //jx3 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity);
+
+        real NormJ = jx1 * NormX + jx2 * NormY + jx3 * NormZ;
+
+        real jTan1 = jx1 - NormJ * NormX;
+        real jTan2 = jx2 - NormJ * NormY;
+        real jTan3 = jx3 - NormJ * NormZ;
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        q = q_dirE[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2+vx3, cu_sq, f_TNW, f_BSE, omegaDiffusivity, -jTan1+jTan2+jTan3, concentration); }
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/core/GPU/CP27.cu b/src/gpu/core/GPU/CP27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..55717462bc4fbcb75bb1d55c193e0d4ea222aac8
--- /dev/null
+++ b/src/gpu/core/GPU/CP27.cu
@@ -0,0 +1,146 @@
+/* Device code */
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+////////////////////////////////////////////////////////////////////////////////
+__global__ void CalcCP27(real* DD, 
+									int* cpIndex, 
+									int nonCp, 
+									double *cpPress,
+									unsigned int* neighborX,
+									unsigned int* neighborY,
+									unsigned int* neighborZ,
+									unsigned long long numberOfLBnodes, 
+									bool isEvenTimestep)
+{
+	Distributions27 D;
+	if (isEvenTimestep==true)
+	{
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	} 
+	else
+	{
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	}
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if(k<nonCp)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		//index
+		unsigned int KQK  = cpIndex[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];
+		////////////////////////////////////////////////////////////////////////////////
+		double PressCP;
+
+		PressCP  =   (D.f[dP00])[ke  ]+ (D.f[dM00])[kw  ]+ 
+                     (D.f[d0P0])[kn  ]+ (D.f[d0M0])[ks  ]+
+                     (D.f[d00P])[kt  ]+ (D.f[d00M])[kb  ]+
+                     (D.f[dPP0])[kne ]+ (D.f[dMM0])[ksw ]+
+                     (D.f[dPM0])[kse ]+ (D.f[dMP0])[knw ]+
+                     (D.f[dP0P])[kte ]+ (D.f[dM0M])[kbw ]+
+                     (D.f[dP0M])[kbe ]+ (D.f[dM0P])[ktw ]+
+                     (D.f[d0PP])[ktn ]+ (D.f[d0MM])[kbs ]+
+                     (D.f[d0PM])[kbn ]+ (D.f[d0MP])[kts ]+
+                     (D.f[d000])[kzero]+ 
+                     (D.f[dPPP])[ktne]+ (D.f[dMMP])[ktsw]+ 
+                     (D.f[dPMP])[ktse]+ (D.f[dMPP])[ktnw]+ 
+                     (D.f[dPPM])[kbne]+ (D.f[dMMM])[kbsw]+ 
+                     (D.f[dPMM])[kbse]+ (D.f[dMPM])[kbnw];
+		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		cpPress[k] = PressCP;
+		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	}
+}
+
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu b/src/gpu/core/GPU/Calc2ndMoments27.cu
similarity index 71%
rename from src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu
rename to src/gpu/core/GPU/Calc2ndMoments27.cu
index 15b8ecefee35463895d8bf5a48cc64868763bf93..edd48091e7429bc5e3221fc1bd8b8420f67f22da 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu
+++ b/src/gpu/core/GPU/Calc2ndMoments27.cu
@@ -23,63 +23,63 @@ __global__ void LBCalc2ndMomentsIncompSP27(  real* kxyFromfcNEQ,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
    } 
    else
    {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -125,33 +125,33 @@ __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[DIR_P00])[ke   ];
-	  f_W    = (D.f[DIR_M00])[kw   ];
-	  f_N    = (D.f[DIR_0P0])[kn   ];
-	  f_S    = (D.f[DIR_0M0])[ks   ];
-	  f_T    = (D.f[DIR_00P])[kt   ];
-	  f_B    = (D.f[DIR_00M])[kb   ];
-	  f_NE   = (D.f[DIR_PP0])[kne  ];
-	  f_SW   = (D.f[DIR_MM0])[ksw  ];
-	  f_SE   = (D.f[DIR_PM0])[kse  ];
-	  f_NW   = (D.f[DIR_MP0])[knw  ];
-	  f_TE   = (D.f[DIR_P0P])[kte  ];
-	  f_BW   = (D.f[DIR_M0M])[kbw  ];
-	  f_BE   = (D.f[DIR_P0M])[kbe  ];
-	  f_TW   = (D.f[DIR_M0P])[ktw  ];
-	  f_TN   = (D.f[DIR_0PP])[ktn  ];
-	  f_BS   = (D.f[DIR_0MM])[kbs  ];
-	  f_BN   = (D.f[DIR_0PM])[kbn  ];
-	  f_TS   = (D.f[DIR_0MP])[kts  ];
-	  //f_ZERO = (D.f[DIR_000])[kzero];
-	  f_TNE  = (D.f[DIR_PPP])[ktne ];
-	  f_TSW  = (D.f[DIR_MMP])[ktsw ];
-	  f_TSE  = (D.f[DIR_PMP])[ktse ];
-	  f_TNW  = (D.f[DIR_MPP])[ktnw ];
-	  f_BNE  = (D.f[DIR_PPM])[kbne ];
-	  f_BSW  = (D.f[DIR_MMM])[kbsw ];
-	  f_BSE  = (D.f[DIR_PMM])[kbse ];
-	  f_BNW  = (D.f[DIR_MPM])[kbnw ];
+	  f_E    = (D.f[dP00])[ke   ];
+	  f_W    = (D.f[dM00])[kw   ];
+	  f_N    = (D.f[d0P0])[kn   ];
+	  f_S    = (D.f[d0M0])[ks   ];
+	  f_T    = (D.f[d00P])[kt   ];
+	  f_B    = (D.f[d00M])[kb   ];
+	  f_NE   = (D.f[dPP0])[kne  ];
+	  f_SW   = (D.f[dMM0])[ksw  ];
+	  f_SE   = (D.f[dPM0])[kse  ];
+	  f_NW   = (D.f[dMP0])[knw  ];
+	  f_TE   = (D.f[dP0P])[kte  ];
+	  f_BW   = (D.f[dM0M])[kbw  ];
+	  f_BE   = (D.f[dP0M])[kbe  ];
+	  f_TW   = (D.f[dM0P])[ktw  ];
+	  f_TN   = (D.f[d0PP])[ktn  ];
+	  f_BS   = (D.f[d0MM])[kbs  ];
+	  f_BN   = (D.f[d0PM])[kbn  ];
+	  f_TS   = (D.f[d0MP])[kts  ];
+	  //f_ZERO = (D.f[d000])[kzero];
+	  f_TNE  = (D.f[dPPP])[ktne ];
+	  f_TSW  = (D.f[dMMP])[ktsw ];
+	  f_TSE  = (D.f[dPMP])[ktse ];
+	  f_TNW  = (D.f[dMPP])[ktnw ];
+	  f_BNE  = (D.f[dPPM])[kbne ];
+	  f_BSW  = (D.f[dMMM])[kbsw ];
+	  f_BSE  = (D.f[dPMM])[kbse ];
+	  f_BNW  = (D.f[dMPM])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
 	  real vx1, vx2, vx3;
       kxyFromfcNEQ[k]       = c0o1;
@@ -168,8 +168,8 @@ __global__ void LBCalc2ndMomentsIncompSP27(  real* kxyFromfcNEQ,
 		  kxyFromfcNEQ[k]    = -c3o1 *(f_SW+f_BSW+f_TSW-f_NW-f_BNW-f_TNW-f_SE-f_BSE-f_TSE+f_NE+f_BNE+f_TNE-(vx1*vx2));
 		  kyzFromfcNEQ[k]    = -c3o1 *(f_BS+f_BSE+f_BSW-f_TS-f_TSE-f_TSW-f_BN-f_BNE-f_BNW+f_TN+f_TNE+f_TNW-(vx2*vx3));
 		  kxzFromfcNEQ[k]    = -c3o1 *(f_BW+f_BSW+f_BNW-f_TW-f_TSW-f_TNW-f_BE-f_BSE-f_BNE+f_TE+f_TSE+f_TNE-(vx1*vx3));
-		  kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2));		//all DIR_P00+DIR_M00 minus all DIR_0P0+DIR_0M0 (no combinations of xy left)
-		  kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3));		//all DIR_P00+DIR_M00 minus all DIR_00P+DIR_00M (no combinations of xz left)
+		  kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2));		//all dP00+dM00 minus all d0P0+d0M0 (no combinations of xy left)
+		  kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3));		//all dP00+dM00 minus all d00P+d00M (no combinations of xz left)
       }
    }
 }
@@ -222,63 +222,63 @@ __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
    } 
    else
    {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -325,33 +325,33 @@ __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[DIR_P00])[ke   ];
-	  f_W    = (D.f[DIR_M00])[kw   ];
-	  f_N    = (D.f[DIR_0P0])[kn   ];
-	  f_S    = (D.f[DIR_0M0])[ks   ];
-	  f_T    = (D.f[DIR_00P])[kt   ];
-	  f_B    = (D.f[DIR_00M])[kb   ];
-	  f_NE   = (D.f[DIR_PP0])[kne  ];
-	  f_SW   = (D.f[DIR_MM0])[ksw  ];
-	  f_SE   = (D.f[DIR_PM0])[kse  ];
-	  f_NW   = (D.f[DIR_MP0])[knw  ];
-	  f_TE   = (D.f[DIR_P0P])[kte  ];
-	  f_BW   = (D.f[DIR_M0M])[kbw  ];
-	  f_BE   = (D.f[DIR_P0M])[kbe  ];
-	  f_TW   = (D.f[DIR_M0P])[ktw  ];
-	  f_TN   = (D.f[DIR_0PP])[ktn  ];
-	  f_BS   = (D.f[DIR_0MM])[kbs  ];
-	  f_BN   = (D.f[DIR_0PM])[kbn  ];
-	  f_TS   = (D.f[DIR_0MP])[kts  ];
-	  f_ZERO = (D.f[DIR_000])[kzero];
-	  f_TNE  = (D.f[DIR_PPP])[ktne ];
-	  f_TSW  = (D.f[DIR_MMP])[ktsw ];
-	  f_TSE  = (D.f[DIR_PMP])[ktse ];
-	  f_TNW  = (D.f[DIR_MPP])[ktnw ];
-	  f_BNE  = (D.f[DIR_PPM])[kbne ];
-	  f_BSW  = (D.f[DIR_MMM])[kbsw ];
-	  f_BSE  = (D.f[DIR_PMM])[kbse ];
-	  f_BNW  = (D.f[DIR_MPM])[kbnw ];
+	  f_E    = (D.f[dP00])[ke   ];
+	  f_W    = (D.f[dM00])[kw   ];
+	  f_N    = (D.f[d0P0])[kn   ];
+	  f_S    = (D.f[d0M0])[ks   ];
+	  f_T    = (D.f[d00P])[kt   ];
+	  f_B    = (D.f[d00M])[kb   ];
+	  f_NE   = (D.f[dPP0])[kne  ];
+	  f_SW   = (D.f[dMM0])[ksw  ];
+	  f_SE   = (D.f[dPM0])[kse  ];
+	  f_NW   = (D.f[dMP0])[knw  ];
+	  f_TE   = (D.f[dP0P])[kte  ];
+	  f_BW   = (D.f[dM0M])[kbw  ];
+	  f_BE   = (D.f[dP0M])[kbe  ];
+	  f_TW   = (D.f[dM0P])[ktw  ];
+	  f_TN   = (D.f[d0PP])[ktn  ];
+	  f_BS   = (D.f[d0MM])[kbs  ];
+	  f_BN   = (D.f[d0PM])[kbn  ];
+	  f_TS   = (D.f[d0MP])[kts  ];
+	  f_ZERO = (D.f[d000])[kzero];
+	  f_TNE  = (D.f[dPPP])[ktne ];
+	  f_TSW  = (D.f[dMMP])[ktsw ];
+	  f_TSE  = (D.f[dPMP])[ktse ];
+	  f_TNW  = (D.f[dMPP])[ktnw ];
+	  f_BNE  = (D.f[dPPM])[kbne ];
+	  f_BSW  = (D.f[dMMM])[kbsw ];
+	  f_BSE  = (D.f[dPMM])[kbse ];
+	  f_BNW  = (D.f[dMPM])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
 	  real drho;
 	  real vx1, vx2, vx3, rho;
@@ -373,8 +373,8 @@ __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ,
 		  kxyFromfcNEQ[k]    = -c3o1 *(f_SW+f_BSW+f_TSW-f_NW-f_BNW-f_TNW-f_SE-f_BSE-f_TSE+f_NE+f_BNE+f_TNE-(vx1*vx2));
 		  kyzFromfcNEQ[k]    = -c3o1 *(f_BS+f_BSE+f_BSW-f_TS-f_TSE-f_TSW-f_BN-f_BNE-f_BNW+f_TN+f_TNE+f_TNW-(vx2*vx3));
 		  kxzFromfcNEQ[k]    = -c3o1 *(f_BW+f_BSW+f_BNW-f_TW-f_TSW-f_TNW-f_BE-f_BSE-f_BNE+f_TE+f_TSE+f_TNE-(vx1*vx3));
-		  kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2));		//all DIR_P00+DIR_M00 minus all DIR_0P0+DIR_0M0 (no combinations of xy left)
-		  kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3));		//all DIR_P00+DIR_M00 minus all DIR_00P+DIR_00M (no combinations of xz left)
+		  kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2));		//all dP00+dM00 minus all d0P0+d0M0 (no combinations of xy left)
+		  kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3));		//all dP00+dM00 minus all d00P+d00M (no combinations of xz left)
       }
    }
 }
@@ -448,63 +448,63 @@ __global__ void LBCalc3rdMomentsIncompSP27(  real* CUMbbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -517,33 +517,33 @@ __global__ void LBCalc3rdMomentsIncompSP27(  real* CUMbbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real vvx    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
 						     (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
@@ -882,63 +882,63 @@ __global__ void LBCalc3rdMomentsCompSP27(real* CUMbbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -951,33 +951,33 @@ __global__ void LBCalc3rdMomentsCompSP27(real* CUMbbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[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 @@ __global__ void LBCalcHigherMomentsIncompSP27(   real* CUMcbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -1392,33 +1392,33 @@ __global__ void LBCalcHigherMomentsIncompSP27(   real* CUMcbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real vvx    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
 						     (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
@@ -1777,63 +1777,63 @@ __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -1846,33 +1846,33 @@ __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -2131,12 +2131,12 @@ __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb,
 
 			real OxxPyyPzz = c1o1;
 			real omega = c1o1 / (c3o1*0.001 + c1o2);
-			real DIR_00M = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) /
+			real d00M = (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));
 
-			CUMbcc[k] = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*DIR_00M / (c2o1 + c3o1 * DIR_00M))) / rho;
-			CUMcbc[k] = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*DIR_00M / (c2o1 + c3o1 * DIR_00M))) / rho;
-			CUMccb[k] = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*DIR_00M / (c2o1 + c3o1 * DIR_00M))) / rho;
+			CUMbcc[k] = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*d00M / (c2o1 + c3o1 * d00M))) / rho;
+			CUMcbc[k] = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*d00M / (c2o1 + c3o1 * d00M))) / rho;
+			CUMccb[k] = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*d00M / (c2o1 + c3o1 * d00M))) / rho;
 
 			////////////////////////////////////////////////////////////////////////////////////
 			// Cumulants
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu b/src/gpu/core/GPU/CalcConc27.cu
similarity index 53%
rename from src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu
rename to src/gpu/core/GPU/CalcConc27.cu
index 0986a42b07351456f684ae5141d38245e5e17c57..724db55d580b69fba96c813fe843e05f3e575593 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu
+++ b/src/gpu/core/GPU/CalcConc27.cu
@@ -76,63 +76,63 @@ __global__ void CalcConc27(
       Distributions27 distAD;
       if (isEvenTimestep)
       {
-         distAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-         distAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-         distAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-         distAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-         distAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes];
-         distAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes];
-         distAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-         distAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-         distAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-         distAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-         distAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-         distAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-         distAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-         distAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-         distAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-         distAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-         distAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-         distAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-         distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-         distAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-         distAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-         distAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-         distAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-         distAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-         distAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-         distAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-         distAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes];
+         distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes];
+         distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes];
+         distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes];
+         distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes];
+         distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes];
+         distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes];
+         distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes];
+         distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes];
+         distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes];
+         distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes];
+         distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes];
+         distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes];
+         distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes];
+         distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes];
+         distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes];
+         distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes];
+         distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes];
+         distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes];
+         distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+         distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes];
+         distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes];
+         distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes];
+         distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes];
+         distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes];
+         distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes];
+         distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes];
+         distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes];
       }
       else
       {
-         distAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-         distAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-         distAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-         distAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-         distAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes];
-         distAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes];
-         distAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-         distAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-         distAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-         distAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-         distAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-         distAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-         distAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-         distAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-         distAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-         distAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-         distAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-         distAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-         distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-         distAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-         distAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-         distAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes];
-         distAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-         distAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-         distAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-         distAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-         distAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes];
+         distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes];
+         distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes];
+         distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes];
+         distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes];
+         distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes];
+         distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes];
+         distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes];
+         distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes];
+         distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes];
+         distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes];
+         distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes];
+         distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes];
+         distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes];
+         distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes];
+         distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes];
+         distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes];
+         distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes];
+         distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes];
+         distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+         distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes];
+         distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes];
+         distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes];
+         distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes];
+         distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes];
+         distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes];
+         distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes];
+         distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes];
       }
 	  ////////////////////////////////////////////////////////////////////////////////
 	  //! - Set neighbor indices (necessary for indirect addressing)
@@ -166,33 +166,33 @@ __global__ void CalcConc27(
 	  ////////////////////////////////////////////////////////////////////////////////
 	  //! - Set local distributions
 	  //!
-	  real mfcbb = (distAD.f[DIR_P00])[ke  ];
-	  real mfabb = (distAD.f[DIR_M00])[kw  ];
-	  real mfbcb = (distAD.f[DIR_0P0])[kn  ];
-	  real mfbab = (distAD.f[DIR_0M0])[ks  ];
-	  real mfbbc = (distAD.f[DIR_00P])[kt  ];
-	  real mfbba = (distAD.f[DIR_00M])[kb  ];
-	  real mfccb = (distAD.f[DIR_PP0])[kne ];
-	  real mfaab = (distAD.f[DIR_MM0])[ksw ];
-	  real mfcab = (distAD.f[DIR_PM0])[kse ];
-	  real mfacb = (distAD.f[DIR_MP0])[knw ];
-	  real mfcbc = (distAD.f[DIR_P0P])[kte ];
-	  real mfaba = (distAD.f[DIR_M0M])[kbw ];
-	  real mfcba = (distAD.f[DIR_P0M])[kbe ];
-	  real mfabc = (distAD.f[DIR_M0P])[ktw ];
-	  real mfbcc = (distAD.f[DIR_0PP])[ktn ];
-	  real mfbaa = (distAD.f[DIR_0MM])[kbs ];
-	  real mfbca = (distAD.f[DIR_0PM])[kbn ];
-	  real mfbac = (distAD.f[DIR_0MP])[kts ];
-	  real mfbbb = (distAD.f[DIR_000])[k   ];
-	  real mfccc = (distAD.f[DIR_PPP])[ktne];
-	  real mfaac = (distAD.f[DIR_MMP])[ktsw];
-	  real mfcac = (distAD.f[DIR_PMP])[ktse];
-	  real mfacc = (distAD.f[DIR_MPP])[ktnw];
-	  real mfcca = (distAD.f[DIR_PPM])[kbne];
-	  real mfaaa = (distAD.f[DIR_MMM])[kbsw];
-	  real mfcaa = (distAD.f[DIR_PMM])[kbse];
-	  real mfaca = (distAD.f[DIR_MPM])[kbnw];
+	  real mfcbb = (distAD.f[dP00])[ke  ];
+	  real mfabb = (distAD.f[dM00])[kw  ];
+	  real mfbcb = (distAD.f[d0P0])[kn  ];
+	  real mfbab = (distAD.f[d0M0])[ks  ];
+	  real mfbbc = (distAD.f[d00P])[kt  ];
+	  real mfbba = (distAD.f[d00M])[kb  ];
+	  real mfccb = (distAD.f[dPP0])[kne ];
+	  real mfaab = (distAD.f[dMM0])[ksw ];
+	  real mfcab = (distAD.f[dPM0])[kse ];
+	  real mfacb = (distAD.f[dMP0])[knw ];
+	  real mfcbc = (distAD.f[dP0P])[kte ];
+	  real mfaba = (distAD.f[dM0M])[kbw ];
+	  real mfcba = (distAD.f[dP0M])[kbe ];
+	  real mfabc = (distAD.f[dM0P])[ktw ];
+	  real mfbcc = (distAD.f[d0PP])[ktn ];
+	  real mfbaa = (distAD.f[d0MM])[kbs ];
+	  real mfbca = (distAD.f[d0PM])[kbn ];
+	  real mfbac = (distAD.f[d0MP])[kts ];
+	  real mfbbb = (distAD.f[d000])[k   ];
+	  real mfccc = (distAD.f[dPPP])[ktne];
+	  real mfaac = (distAD.f[dMMP])[ktsw];
+	  real mfcac = (distAD.f[dPMP])[ktse];
+	  real mfacc = (distAD.f[dMPP])[ktnw];
+	  real mfcca = (distAD.f[dPPM])[kbne];
+	  real mfaaa = (distAD.f[dMMM])[kbsw];
+	  real mfcaa = (distAD.f[dPMM])[kbse];
+	  real mfaca = (distAD.f[dMPM])[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>
@@ -327,63 +327,63 @@ __global__ void CalcConc7( real* Conc,
 //    Distributions27 D27;
 //    if (isEvenTimestep==true)
 //    {
-//       D27.f[DIR_P00] = &DD27[DIR_P00 * size_Mat];
-//       D27.f[DIR_M00] = &DD27[DIR_M00 * size_Mat];
-//       D27.f[DIR_0P0] = &DD27[DIR_0P0 * size_Mat];
-//       D27.f[DIR_0M0] = &DD27[DIR_0M0 * size_Mat];
-//       D27.f[DIR_00P] = &DD27[DIR_00P * size_Mat];
-//       D27.f[DIR_00M] = &DD27[DIR_00M * size_Mat];
-//       D27.f[DIR_PP0] = &DD27[DIR_PP0 * size_Mat];
-//       D27.f[DIR_MM0] = &DD27[DIR_MM0 * size_Mat];
-//       D27.f[DIR_PM0] = &DD27[DIR_PM0 * size_Mat];
-//       D27.f[DIR_MP0] = &DD27[DIR_MP0 * size_Mat];
-//       D27.f[DIR_P0P] = &DD27[DIR_P0P * size_Mat];
-//       D27.f[DIR_M0M] = &DD27[DIR_M0M * size_Mat];
-//       D27.f[DIR_P0M] = &DD27[DIR_P0M * size_Mat];
-//       D27.f[DIR_M0P] = &DD27[DIR_M0P * size_Mat];
-//       D27.f[DIR_0PP] = &DD27[DIR_0PP * size_Mat];
-//       D27.f[DIR_0MM] = &DD27[DIR_0MM * size_Mat];
-//       D27.f[DIR_0PM] = &DD27[DIR_0PM * size_Mat];
-//       D27.f[DIR_0MP] = &DD27[DIR_0MP * size_Mat];
-//       D27.f[DIR_000] = &DD27[DIR_000 * size_Mat];
-//       D27.f[DIR_PPP] = &DD27[DIR_PPP * size_Mat];
-//       D27.f[DIR_MMP] = &DD27[DIR_MMP * size_Mat];
-//       D27.f[DIR_PMP] = &DD27[DIR_PMP * size_Mat];
-//       D27.f[DIR_MPP] = &DD27[DIR_MPP * size_Mat];
-//       D27.f[DIR_PPM] = &DD27[DIR_PPM * size_Mat];
-//       D27.f[DIR_MMM] = &DD27[DIR_MMM * size_Mat];
-//       D27.f[DIR_PMM] = &DD27[DIR_PMM * size_Mat];
-//       D27.f[DIR_MPM] = &DD27[DIR_MPM * size_Mat];
+//       D27.f[dP00] = &DD27[dP00 * size_Mat];
+//       D27.f[dM00] = &DD27[dM00 * size_Mat];
+//       D27.f[d0P0] = &DD27[d0P0 * size_Mat];
+//       D27.f[d0M0] = &DD27[d0M0 * size_Mat];
+//       D27.f[d00P] = &DD27[d00P * size_Mat];
+//       D27.f[d00M] = &DD27[d00M * size_Mat];
+//       D27.f[dPP0] = &DD27[dPP0 * size_Mat];
+//       D27.f[dMM0] = &DD27[dMM0 * size_Mat];
+//       D27.f[dPM0] = &DD27[dPM0 * size_Mat];
+//       D27.f[dMP0] = &DD27[dMP0 * size_Mat];
+//       D27.f[dP0P] = &DD27[dP0P * size_Mat];
+//       D27.f[dM0M] = &DD27[dM0M * size_Mat];
+//       D27.f[dP0M] = &DD27[dP0M * size_Mat];
+//       D27.f[dM0P] = &DD27[dM0P * size_Mat];
+//       D27.f[d0PP] = &DD27[d0PP * size_Mat];
+//       D27.f[d0MM] = &DD27[d0MM * size_Mat];
+//       D27.f[d0PM] = &DD27[d0PM * size_Mat];
+//       D27.f[d0MP] = &DD27[d0MP * size_Mat];
+//       D27.f[d000] = &DD27[d000 * size_Mat];
+//       D27.f[dPPP] = &DD27[dPPP * size_Mat];
+//       D27.f[dMMP] = &DD27[dMMP * size_Mat];
+//       D27.f[dPMP] = &DD27[dPMP * size_Mat];
+//       D27.f[dMPP] = &DD27[dMPP * size_Mat];
+//       D27.f[dPPM] = &DD27[dPPM * size_Mat];
+//       D27.f[dMMM] = &DD27[dMMM * size_Mat];
+//       D27.f[dPMM] = &DD27[dPMM * size_Mat];
+//       D27.f[dMPM] = &DD27[dMPM * size_Mat];
 //    }
 //    else
 //    {
-//       D27.f[DIR_M00] = &DD27[DIR_P00 * size_Mat];
-//       D27.f[DIR_P00] = &DD27[DIR_M00 * size_Mat];
-//       D27.f[DIR_0M0] = &DD27[DIR_0P0 * size_Mat];
-//       D27.f[DIR_0P0] = &DD27[DIR_0M0 * size_Mat];
-//       D27.f[DIR_00M] = &DD27[DIR_00P * size_Mat];
-//       D27.f[DIR_00P] = &DD27[DIR_00M * size_Mat];
-//       D27.f[DIR_MM0] = &DD27[DIR_PP0 * size_Mat];
-//       D27.f[DIR_PP0] = &DD27[DIR_MM0 * size_Mat];
-//       D27.f[DIR_MP0] = &DD27[DIR_PM0 * size_Mat];
-//       D27.f[DIR_PM0] = &DD27[DIR_MP0 * size_Mat];
-//       D27.f[DIR_M0M] = &DD27[DIR_P0P * size_Mat];
-//       D27.f[DIR_P0P] = &DD27[DIR_M0M * size_Mat];
-//       D27.f[DIR_M0P] = &DD27[DIR_P0M * size_Mat];
-//       D27.f[DIR_P0M] = &DD27[DIR_M0P * size_Mat];
-//       D27.f[DIR_0MM] = &DD27[DIR_0PP * size_Mat];
-//       D27.f[DIR_0PP] = &DD27[DIR_0MM * size_Mat];
-//       D27.f[DIR_0MP] = &DD27[DIR_0PM * size_Mat];
-//       D27.f[DIR_0PM] = &DD27[DIR_0MP * size_Mat];
-//       D27.f[DIR_000] = &DD27[DIR_000 * size_Mat];
-//       D27.f[DIR_MMM] = &DD27[DIR_PPP * size_Mat];
-//       D27.f[DIR_PPM] = &DD27[DIR_MMP * size_Mat];
-//       D27.f[DIR_MPM] = &DD27[DIR_PMP * size_Mat];
-//       D27.f[DIR_PMM] = &DD27[DIR_MPP * size_Mat];
-//       D27.f[DIR_MMP] = &DD27[DIR_PPM * size_Mat];
-//       D27.f[DIR_PPP] = &DD27[DIR_MMM * size_Mat];
-//       D27.f[DIR_MPP] = &DD27[DIR_PMM * size_Mat];
-//       D27.f[DIR_PMP] = &DD27[DIR_MPM * size_Mat];
+//       D27.f[dM00] = &DD27[dP00 * size_Mat];
+//       D27.f[dP00] = &DD27[dM00 * size_Mat];
+//       D27.f[d0M0] = &DD27[d0P0 * size_Mat];
+//       D27.f[d0P0] = &DD27[d0M0 * size_Mat];
+//       D27.f[d00M] = &DD27[d00P * size_Mat];
+//       D27.f[d00P] = &DD27[d00M * size_Mat];
+//       D27.f[dMM0] = &DD27[dPP0 * size_Mat];
+//       D27.f[dPP0] = &DD27[dMM0 * size_Mat];
+//       D27.f[dMP0] = &DD27[dPM0 * size_Mat];
+//       D27.f[dPM0] = &DD27[dMP0 * size_Mat];
+//       D27.f[dM0M] = &DD27[dP0P * size_Mat];
+//       D27.f[dP0P] = &DD27[dM0M * size_Mat];
+//       D27.f[dM0P] = &DD27[dP0M * size_Mat];
+//       D27.f[dP0M] = &DD27[dM0P * size_Mat];
+//       D27.f[d0MM] = &DD27[d0PP * size_Mat];
+//       D27.f[d0PP] = &DD27[d0MM * size_Mat];
+//       D27.f[d0MP] = &DD27[d0PM * size_Mat];
+//       D27.f[d0PM] = &DD27[d0MP * size_Mat];
+//       D27.f[d000] = &DD27[d000 * size_Mat];
+//       D27.f[dMMM] = &DD27[dPPP * size_Mat];
+//       D27.f[dPPM] = &DD27[dMMP * size_Mat];
+//       D27.f[dMPM] = &DD27[dPMP * size_Mat];
+//       D27.f[dPMM] = &DD27[dMPP * size_Mat];
+//       D27.f[dMMP] = &DD27[dPPM * size_Mat];
+//       D27.f[dPPP] = &DD27[dMMM * size_Mat];
+//       D27.f[dMPP] = &DD27[dPMM * size_Mat];
+//       D27.f[dPMP] = &DD27[dMPM * size_Mat];
 //    }
 //    ////////////////////////////////////////////////////////////////////////////////
 //    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -432,20 +432,20 @@ __global__ void CalcConc7( real* Conc,
 
 //       if(geoD[k] == GEO_FLUID)
 //       {
-//          Conc[k]    =   (D27.f[DIR_P00])[ke  ]+ (D27.f[DIR_M00])[kw  ]+ 
-//                         (D27.f[DIR_0P0])[kn  ]+ (D27.f[DIR_0M0])[ks  ]+
-//                         (D27.f[DIR_00P])[kt  ]+ (D27.f[DIR_00M])[kb  ]+
-//                         (D27.f[DIR_PP0])[kne ]+ (D27.f[DIR_MM0])[ksw ]+
-//                         (D27.f[DIR_PM0])[kse ]+ (D27.f[DIR_MP0])[knw ]+
-//                         (D27.f[DIR_P0P])[kte ]+ (D27.f[DIR_M0M])[kbw ]+
-//                         (D27.f[DIR_P0M])[kbe ]+ (D27.f[DIR_M0P])[ktw ]+
-//                         (D27.f[DIR_0PP])[ktn ]+ (D27.f[DIR_0MM])[kbs ]+
-//                         (D27.f[DIR_0PM])[kbn ]+ (D27.f[DIR_0MP])[kts ]+
-//                         (D27.f[DIR_000])[kzero]+ 
-//                         (D27.f[DIR_PPP])[ktne]+ (D27.f[DIR_MMP])[ktsw]+
-//                         (D27.f[DIR_PMP])[ktse]+ (D27.f[DIR_MPP])[ktnw]+
-//                         (D27.f[DIR_PPM])[kbne]+ (D27.f[DIR_MMM])[kbsw]+
-//                         (D27.f[DIR_PMM])[kbse]+ (D27.f[DIR_MPM])[kbnw];
+//          Conc[k]    =   (D27.f[dP00])[ke  ]+ (D27.f[dM00])[kw  ]+ 
+//                         (D27.f[d0P0])[kn  ]+ (D27.f[d0M0])[ks  ]+
+//                         (D27.f[d00P])[kt  ]+ (D27.f[d00M])[kb  ]+
+//                         (D27.f[dPP0])[kne ]+ (D27.f[dMM0])[ksw ]+
+//                         (D27.f[dPM0])[kse ]+ (D27.f[dMP0])[knw ]+
+//                         (D27.f[dP0P])[kte ]+ (D27.f[dM0M])[kbw ]+
+//                         (D27.f[dP0M])[kbe ]+ (D27.f[dM0P])[ktw ]+
+//                         (D27.f[d0PP])[ktn ]+ (D27.f[d0MM])[kbs ]+
+//                         (D27.f[d0PM])[kbn ]+ (D27.f[d0MP])[kts ]+
+//                         (D27.f[d000])[kzero]+ 
+//                         (D27.f[dPPP])[ktne]+ (D27.f[dMMP])[ktsw]+
+//                         (D27.f[dPMP])[ktse]+ (D27.f[dMPP])[ktnw]+
+//                         (D27.f[dPPM])[kbne]+ (D27.f[dMMM])[kbsw]+
+//                         (D27.f[dPMM])[kbse]+ (D27.f[dMPM])[kbnw];
 //       }
 //    }   
 // }
@@ -588,63 +588,63 @@ __global__ void GetPlaneConc27(real* Conc,
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
    }
    else
    {
-      D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-      D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-      D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-      D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-      D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-      D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-      D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-      D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-      D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-      D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-      D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-      D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-      D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-      D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-      D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-      D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-      D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-      D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-      D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-      D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-      D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-      D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-      D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-      D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-      D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-      D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-      D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
+      D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+      D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+      D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+      D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+      D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+      D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+      D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+      D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+      D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+      D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+      D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+      D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+      D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+      D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+      D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+      D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+      D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+      D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+      D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+      D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+      D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+      D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+      D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+      D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+      D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+      D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+      D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -693,20 +693,20 @@ __global__ void GetPlaneConc27(real* Conc,
 
       if(geoD[k] == GEO_FLUID)
       {
-         Conc[k]    =   (D27.f[DIR_P00])[ke  ]+ (D27.f[DIR_M00])[kw  ]+ 
-                        (D27.f[DIR_0P0])[kn  ]+ (D27.f[DIR_0M0])[ks  ]+
-                        (D27.f[DIR_00P])[kt  ]+ (D27.f[DIR_00M])[kb  ]+
-                        (D27.f[DIR_PP0])[kne ]+ (D27.f[DIR_MM0])[ksw ]+
-                        (D27.f[DIR_PM0])[kse ]+ (D27.f[DIR_MP0])[knw ]+
-                        (D27.f[DIR_P0P])[kte ]+ (D27.f[DIR_M0M])[kbw ]+
-                        (D27.f[DIR_P0M])[kbe ]+ (D27.f[DIR_M0P])[ktw ]+
-                        (D27.f[DIR_0PP])[ktn ]+ (D27.f[DIR_0MM])[kbs ]+
-                        (D27.f[DIR_0PM])[kbn ]+ (D27.f[DIR_0MP])[kts ]+
-                        (D27.f[DIR_000])[kzero]+ 
-                        (D27.f[DIR_PPP])[ktne]+ (D27.f[DIR_MMP])[ktsw]+
-                        (D27.f[DIR_PMP])[ktse]+ (D27.f[DIR_MPP])[ktnw]+
-                        (D27.f[DIR_PPM])[kbne]+ (D27.f[DIR_MMM])[kbsw]+
-                        (D27.f[DIR_PMM])[kbse]+ (D27.f[DIR_MPM])[kbnw];
+         Conc[k]    =   (D27.f[dP00])[ke  ]+ (D27.f[dM00])[kw  ]+ 
+                        (D27.f[d0P0])[kn  ]+ (D27.f[d0M0])[ks  ]+
+                        (D27.f[d00P])[kt  ]+ (D27.f[d00M])[kb  ]+
+                        (D27.f[dPP0])[kne ]+ (D27.f[dMM0])[ksw ]+
+                        (D27.f[dPM0])[kse ]+ (D27.f[dMP0])[knw ]+
+                        (D27.f[dP0P])[kte ]+ (D27.f[dM0M])[kbw ]+
+                        (D27.f[dP0M])[kbe ]+ (D27.f[dM0P])[ktw ]+
+                        (D27.f[d0PP])[ktn ]+ (D27.f[d0MM])[kbs ]+
+                        (D27.f[d0PM])[kbn ]+ (D27.f[d0MP])[kts ]+
+                        (D27.f[d000])[kzero]+ 
+                        (D27.f[dPPP])[ktne]+ (D27.f[dMMP])[ktsw]+
+                        (D27.f[dPMP])[ktse]+ (D27.f[dMPP])[ktnw]+
+                        (D27.f[dPPM])[kbne]+ (D27.f[dMMM])[kbsw]+
+                        (D27.f[dPMM])[kbse]+ (D27.f[dMPM])[kbnw];
       }
    }   
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu b/src/gpu/core/GPU/CalcMac27.cu
similarity index 66%
rename from src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
rename to src/gpu/core/GPU/CalcMac27.cu
index 2014649790e49773c0427a716b0efc4d30007a3c..9c9502d504301052e1b6e5a78c737dcb185304a7 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
+++ b/src/gpu/core/GPU/CalcMac27.cu
@@ -88,7 +88,7 @@ __global__ void LBCalcMac27(
     vf::gpu::ListIndices listIndices(k, neighborX, neighborY, neighborZ);
 
     real distribution[27];
-    vf::gpu::read(distribution, dist, listIndices);
+    vf::gpu::getPreCollisionDistribution(distribution, dist, listIndices);
  
     rhoD[k] = vf::lbm::getDensity(distribution);
     vxD[k] = vf::lbm::getIncompressibleVelocityX1(distribution);
@@ -171,70 +171,70 @@ __global__ void LBCalcMacSP27(
         if(geoD[nodeIndex] == GEO_FLUID)
         {
             rhoD[nodeIndex] = 
-                (dist.f[DIR_P00])[ke  ]+ (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_0P0])[kn  ]+ (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_00P])[kt  ]+ (dist.f[DIR_00M])[kb  ]+
-                (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+
-                (dist.f[DIR_000])[kzero]+ 
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw];
+                (dist.f[dP00])[ke  ]+ (dist.f[dM00])[kw  ]+ 
+                (dist.f[d0P0])[kn  ]+ (dist.f[d0M0])[ks  ]+
+                (dist.f[d00P])[kt  ]+ (dist.f[d00M])[kb  ]+
+                (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+
+                (dist.f[d000])[kzero]+ 
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw];
            
             vxD[nodeIndex] =
-                (dist.f[DIR_P00])[ke  ]- (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]- (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]- (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]- (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw];
+                (dist.f[dP00])[ke  ]- (dist.f[dM00])[kw  ]+ 
+                (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]- (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]- (dist.f[dM0P])[ktw ]+
+                (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]- (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw];
            
             vyD[nodeIndex] =
-                (dist.f[DIR_0P0])[kn  ]- (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]-
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]- (dist.f[DIR_0MP])[kts ]+
-                (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]- 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw];
+                (dist.f[d0P0])[kn  ]- (dist.f[d0M0])[ks  ]+
+                (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]-
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]- (dist.f[d0MP])[kts ]+
+                (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]- 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw];
            
             vzD[nodeIndex] =
-                (dist.f[DIR_00P])[kt  ]- (dist.f[DIR_00M])[kb  ]+
-                (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]-
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]-
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]- 
-                (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- 
-                (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw];
+                (dist.f[d00P])[kt  ]- (dist.f[d00M])[kb  ]+
+                (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]-
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]-
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]- 
+                (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- 
+                (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw];
            
             pressD[nodeIndex] =
-                ((dist.f[DIR_P00])[ke  ]+ (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_0P0])[kn  ]+ (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_00P])[kt  ]+ (dist.f[DIR_00M])[kb  ]+
+                ((dist.f[dP00])[ke  ]+ (dist.f[dM00])[kw  ]+ 
+                (dist.f[d0P0])[kn  ]+ (dist.f[d0M0])[ks  ]+
+                (dist.f[d00P])[kt  ]+ (dist.f[d00M])[kb  ]+
                 2.f*(
-                (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ])+
+                (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ])+
                 3.f*(
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw])-
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw])-
                 rhoD[nodeIndex]-(vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1+c0o1*rhoD[nodeIndex])) * c1o2+rhoD[nodeIndex]; // times zero for incompressible case   
             //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
        }
@@ -465,74 +465,74 @@ __global__ void LBCalcMedSP27(
         if(geoD[nodeIndex] == GEO_FLUID)
         {
             rhoD[nodeIndex] =
-                (dist.f[DIR_P00])[ke  ]+ (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_0P0])[kn  ]+ (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_00P])[kt  ]+ (dist.f[DIR_00M])[kb  ]+
-                (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+
-                (dist.f[DIR_000])[kzero]+ 
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]+
+                (dist.f[dP00])[ke  ]+ (dist.f[dM00])[kw  ]+ 
+                (dist.f[d0P0])[kn  ]+ (dist.f[d0M0])[ks  ]+
+                (dist.f[d00P])[kt  ]+ (dist.f[d00M])[kb  ]+
+                (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+
+                (dist.f[d000])[kzero]+ 
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]+
                 RHO;
             
             vxD[nodeIndex] =
-                (dist.f[DIR_P00])[ke  ]- (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]- (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]- (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]- (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]+
+                (dist.f[dP00])[ke  ]- (dist.f[dM00])[kw  ]+ 
+                (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]- (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]- (dist.f[dM0P])[ktw ]+
+                (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]- (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]+
                 VX;
             
             vyD[nodeIndex] =
-                (dist.f[DIR_0P0])[kn  ]- (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]-
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]- (dist.f[DIR_0MP])[kts ]+
-                (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]- 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]+
+                (dist.f[d0P0])[kn  ]- (dist.f[d0M0])[ks  ]+
+                (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]-
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]- (dist.f[d0MP])[kts ]+
+                (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]- 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]+
                 VY;
             
             vzD[nodeIndex] =
-                (dist.f[DIR_00P])[kt  ]- (dist.f[DIR_00M])[kb  ]+
-                (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]-
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]-
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]- 
-                (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- 
-                (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]+
+                (dist.f[d00P])[kt  ]- (dist.f[d00M])[kb  ]+
+                (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]-
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]-
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]- 
+                (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- 
+                (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]+
                 VZ;
             
             pressD[nodeIndex] =
-                ((dist.f[DIR_P00])[ke  ]+ (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_0P0])[kn  ]+ (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_00P])[kt  ]+ (dist.f[DIR_00M])[kb  ]+
+                ((dist.f[dP00])[ke  ]+ (dist.f[dM00])[kw  ]+ 
+                (dist.f[d0P0])[kn  ]+ (dist.f[d0M0])[ks  ]+
+                (dist.f[d00P])[kt  ]+ (dist.f[d00M])[kb  ]+
                 c2o1*(
-                (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ])+
+                (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ])+
                 c3o1*(
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw])-
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw])-
                 rhoD[nodeIndex]-(vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1+rhoD[nodeIndex])) * c1o2+rhoD[nodeIndex]+
                 PRESS;    
             //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
@@ -637,33 +637,33 @@ __global__ void LBCalcMedCompSP27(
         
         if(geoD[nodeIndex] == GEO_FLUID)
         {
-            real mfcbb = (dist.f[DIR_P00])[nodeIndex];//[ke   ];
-            real mfabb = (dist.f[DIR_M00])[kw];//[kw   ];  
-            real mfbcb = (dist.f[DIR_0P0])[nodeIndex];//[kn   ];
-            real mfbab = (dist.f[DIR_0M0])[ks];//[ks   ];  
-            real mfbbc = (dist.f[DIR_00P])[nodeIndex];//[kt   ];
-            real mfbba = (dist.f[DIR_00M])[kb];//[kb   ];  
-            real mfccb = (dist.f[DIR_PP0])[nodeIndex];//[kne  ];  
-            real mfaab = (dist.f[DIR_MM0])[ksw];//[ksw  ];
-            real mfcab = (dist.f[DIR_PM0])[ks];//[kse  ]; 
-            real mfacb = (dist.f[DIR_MP0])[kw];//[knw  ]; 
-            real mfcbc = (dist.f[DIR_P0P])[nodeIndex];//[kte  ];  
-            real mfaba = (dist.f[DIR_M0M])[kbw];//[kbw  ];
-            real mfcba = (dist.f[DIR_P0M])[kb];//[kbe  ]; 
-            real mfabc = (dist.f[DIR_M0P])[kw];//[ktw  ]; 
-            real mfbcc = (dist.f[DIR_0PP])[nodeIndex];//[ktn  ];  
-            real mfbaa = (dist.f[DIR_0MM])[kbs];//[kbs  ];
-            real mfbca = (dist.f[DIR_0PM])[kb];//[kbn  ]; 
-            real mfbac = (dist.f[DIR_0MP])[ks];//[kts  ]; 
-            real mfbbb = (dist.f[DIR_000])[nodeIndex];//[kzero];
-            real mfccc = (dist.f[DIR_PPP])[nodeIndex];//[ktne ]; 
-            real mfaac = (dist.f[DIR_MMP])[ksw];//[ktsw ]; 
-            real mfcac = (dist.f[DIR_PMP])[ks];//[ktse ];
-            real mfacc = (dist.f[DIR_MPP])[kw];//[ktnw ];
-            real mfcca = (dist.f[DIR_PPM])[kb];//[kbne ];
-            real mfaaa = (dist.f[DIR_MMM])[kbsw];//[kbsw ];
-            real mfcaa = (dist.f[DIR_PMM])[kbs];//[kbse ]; 
-            real mfaca = (dist.f[DIR_MPM])[kbw];//[kbnw ]; 
+            real mfcbb = (dist.f[dP00])[nodeIndex];//[ke   ];
+            real mfabb = (dist.f[dM00])[kw];//[kw   ];  
+            real mfbcb = (dist.f[d0P0])[nodeIndex];//[kn   ];
+            real mfbab = (dist.f[d0M0])[ks];//[ks   ];  
+            real mfbbc = (dist.f[d00P])[nodeIndex];//[kt   ];
+            real mfbba = (dist.f[d00M])[kb];//[kb   ];  
+            real mfccb = (dist.f[dPP0])[nodeIndex];//[kne  ];  
+            real mfaab = (dist.f[dMM0])[ksw];//[ksw  ];
+            real mfcab = (dist.f[dPM0])[ks];//[kse  ]; 
+            real mfacb = (dist.f[dMP0])[kw];//[knw  ]; 
+            real mfcbc = (dist.f[dP0P])[nodeIndex];//[kte  ];  
+            real mfaba = (dist.f[dM0M])[kbw];//[kbw  ];
+            real mfcba = (dist.f[dP0M])[kb];//[kbe  ]; 
+            real mfabc = (dist.f[dM0P])[kw];//[ktw  ]; 
+            real mfbcc = (dist.f[d0PP])[nodeIndex];//[ktn  ];  
+            real mfbaa = (dist.f[d0MM])[kbs];//[kbs  ];
+            real mfbca = (dist.f[d0PM])[kb];//[kbn  ]; 
+            real mfbac = (dist.f[d0MP])[ks];//[kts  ]; 
+            real mfbbb = (dist.f[d000])[nodeIndex];//[kzero];
+            real mfccc = (dist.f[dPPP])[nodeIndex];//[ktne ]; 
+            real mfaac = (dist.f[dMMP])[ksw];//[ktsw ]; 
+            real mfcac = (dist.f[dPMP])[ks];//[ktse ];
+            real mfacc = (dist.f[dMPP])[kw];//[ktnw ];
+            real mfcca = (dist.f[dPPM])[kb];//[kbne ];
+            real mfaaa = (dist.f[dMMM])[kbsw];//[kbsw ];
+            real mfcaa = (dist.f[dPMM])[kbs];//[kbse ]; 
+            real mfaca = (dist.f[dMPM])[kbw];//[kbnw ]; 
             ////////////////////////////////////////////////////////////////////////////////////
             real drho = 
                 ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -688,21 +688,21 @@ __global__ void LBCalcMedCompSP27(
                 (mfbbc - mfbba)) / rho) + VZ;
 
             pressD[nodeIndex]  =
-                ((dist.f[DIR_P00])[ke  ]+ (dist.f[DIR_M00])[kw  ]+ 
-                (dist.f[DIR_0P0])[kn  ]+ (dist.f[DIR_0M0])[ks  ]+
-                (dist.f[DIR_00P])[kt  ]+ (dist.f[DIR_00M])[kb  ]+
+                ((dist.f[dP00])[ke  ]+ (dist.f[dM00])[kw  ]+ 
+                (dist.f[d0P0])[kn  ]+ (dist.f[d0M0])[ks  ]+
+                (dist.f[d00P])[kt  ]+ (dist.f[d00M])[kb  ]+
                 c2o1*(
-                (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+
-                (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+
-                (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+
-                (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ])+
+                (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+
+                (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+
+                (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+
+                (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ])+
                 c3o1*(
-                (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ 
-                (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw])-
+                (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ 
+                (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw])-
                 rhoD[nodeIndex]-(vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1+rhoD[nodeIndex])) * c1o2+rhoD[nodeIndex]+
                 PRESS;    
             //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
@@ -812,33 +812,33 @@ __global__ void LBCalcMedCompAD27(
         
         if (geoD[nodeIndex] == GEO_FLUID)
         {
-            real mfcbb = (dist.f[DIR_P00])[nodeIndex];//[ke   ];
-            real mfabb = (dist.f[DIR_M00])[kw];//[kw   ];  
-            real mfbcb = (dist.f[DIR_0P0])[nodeIndex];//[kn   ];
-            real mfbab = (dist.f[DIR_0M0])[ks];//[ks   ];  
-            real mfbbc = (dist.f[DIR_00P])[nodeIndex];//[kt   ];
-            real mfbba = (dist.f[DIR_00M])[kb];//[kb   ];  
-            real mfccb = (dist.f[DIR_PP0])[nodeIndex];//[kne  ];  
-            real mfaab = (dist.f[DIR_MM0])[ksw];//[ksw  ];
-            real mfcab = (dist.f[DIR_PM0])[ks];//[kse  ]; 
-            real mfacb = (dist.f[DIR_MP0])[kw];//[knw  ]; 
-            real mfcbc = (dist.f[DIR_P0P])[nodeIndex];//[kte  ];  
-            real mfaba = (dist.f[DIR_M0M])[kbw];//[kbw  ];
-            real mfcba = (dist.f[DIR_P0M])[kb];//[kbe  ]; 
-            real mfabc = (dist.f[DIR_M0P])[kw];//[ktw  ]; 
-            real mfbcc = (dist.f[DIR_0PP])[nodeIndex];//[ktn  ];  
-            real mfbaa = (dist.f[DIR_0MM])[kbs];//[kbs  ];
-            real mfbca = (dist.f[DIR_0PM])[kb];//[kbn  ]; 
-            real mfbac = (dist.f[DIR_0MP])[ks];//[kts  ]; 
-            real mfbbb = (dist.f[DIR_000])[nodeIndex];//[kzero];
-            real mfccc = (dist.f[DIR_PPP])[nodeIndex];//[ktne ]; 
-            real mfaac = (dist.f[DIR_MMP])[ksw];//[ktsw ]; 
-            real mfcac = (dist.f[DIR_PMP])[ks];//[ktse ];
-            real mfacc = (dist.f[DIR_MPP])[kw];//[ktnw ];
-            real mfcca = (dist.f[DIR_PPM])[kb];//[kbne ];
-            real mfaaa = (dist.f[DIR_MMM])[kbsw];//[kbsw ];
-            real mfcaa = (dist.f[DIR_PMM])[kbs];//[kbse ]; 
-            real mfaca = (dist.f[DIR_MPM])[kbw];//[kbnw ]; 
+            real mfcbb = (dist.f[dP00])[nodeIndex];//[ke   ];
+            real mfabb = (dist.f[dM00])[kw];//[kw   ];  
+            real mfbcb = (dist.f[d0P0])[nodeIndex];//[kn   ];
+            real mfbab = (dist.f[d0M0])[ks];//[ks   ];  
+            real mfbbc = (dist.f[d00P])[nodeIndex];//[kt   ];
+            real mfbba = (dist.f[d00M])[kb];//[kb   ];  
+            real mfccb = (dist.f[dPP0])[nodeIndex];//[kne  ];  
+            real mfaab = (dist.f[dMM0])[ksw];//[ksw  ];
+            real mfcab = (dist.f[dPM0])[ks];//[kse  ]; 
+            real mfacb = (dist.f[dMP0])[kw];//[knw  ]; 
+            real mfcbc = (dist.f[dP0P])[nodeIndex];//[kte  ];  
+            real mfaba = (dist.f[dM0M])[kbw];//[kbw  ];
+            real mfcba = (dist.f[dP0M])[kb];//[kbe  ]; 
+            real mfabc = (dist.f[dM0P])[kw];//[ktw  ]; 
+            real mfbcc = (dist.f[d0PP])[nodeIndex];//[ktn  ];  
+            real mfbaa = (dist.f[d0MM])[kbs];//[kbs  ];
+            real mfbca = (dist.f[d0PM])[kb];//[kbn  ]; 
+            real mfbac = (dist.f[d0MP])[ks];//[kts  ]; 
+            real mfbbb = (dist.f[d000])[nodeIndex];//[kzero];
+            real mfccc = (dist.f[dPPP])[nodeIndex];//[ktne ]; 
+            real mfaac = (dist.f[dMMP])[ksw];//[ktsw ]; 
+            real mfcac = (dist.f[dPMP])[ks];//[ktse ];
+            real mfacc = (dist.f[dMPP])[kw];//[ktnw ];
+            real mfcca = (dist.f[dPPM])[kb];//[kbne ];
+            real mfaaa = (dist.f[dMMM])[kbsw];//[kbsw ];
+            real mfcaa = (dist.f[dPMM])[kbs];//[kbse ]; 
+            real mfaca = (dist.f[dMPM])[kbw];//[kbnw ]; 
             ////////////////////////////////////////////////////////////////////////////////////
             real drho =
                 ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -865,52 +865,52 @@ __global__ void LBCalcMedCompAD27(
                     (mfbbc - mfbba)) / rho) + VZ;
             
             pressD[nodeIndex] = 
-                ((dist.f[DIR_P00])[ke] + (dist.f[DIR_M00])[kw] +
-                 (dist.f[DIR_0P0])[kn] + (dist.f[DIR_0M0])[ks] +
-                 (dist.f[DIR_00P])[kt] + (dist.f[DIR_00M])[kb] +
+                ((dist.f[dP00])[ke] + (dist.f[dM00])[kw] +
+                 (dist.f[d0P0])[kn] + (dist.f[d0M0])[ks] +
+                 (dist.f[d00P])[kt] + (dist.f[d00M])[kb] +
                  c2o1*(
-                 (dist.f[DIR_PP0])[kne] + (dist.f[DIR_MM0])[ksw] +
-                 (dist.f[DIR_PM0])[kse] + (dist.f[DIR_MP0])[knw] +
-                 (dist.f[DIR_P0P])[kte] + (dist.f[DIR_M0M])[kbw] +
-                 (dist.f[DIR_P0M])[kbe] + (dist.f[DIR_M0P])[ktw] +
-                 (dist.f[DIR_0PP])[ktn] + (dist.f[DIR_0MM])[kbs] +
-                 (dist.f[DIR_0PM])[kbn] + (dist.f[DIR_0MP])[kts]) +
+                 (dist.f[dPP0])[kne] + (dist.f[dMM0])[ksw] +
+                 (dist.f[dPM0])[kse] + (dist.f[dMP0])[knw] +
+                 (dist.f[dP0P])[kte] + (dist.f[dM0M])[kbw] +
+                 (dist.f[dP0M])[kbe] + (dist.f[dM0P])[ktw] +
+                 (dist.f[d0PP])[ktn] + (dist.f[d0MM])[kbs] +
+                 (dist.f[d0PM])[kbn] + (dist.f[d0MP])[kts]) +
                  c3o1*(
-                 (dist.f[DIR_PPP])[ktne] + (dist.f[DIR_MMP])[ktsw] +
-                 (dist.f[DIR_PMP])[ktse] + (dist.f[DIR_MPP])[ktnw] +
-                 (dist.f[DIR_PPM])[kbne] + (dist.f[DIR_MMM])[kbsw] +
-                 (dist.f[DIR_PMM])[kbse] + (dist.f[DIR_MPM])[kbnw]) -
+                 (dist.f[dPPP])[ktne] + (dist.f[dMMP])[ktsw] +
+                 (dist.f[dPMP])[ktse] + (dist.f[dMPP])[ktnw] +
+                 (dist.f[dPPM])[kbne] + (dist.f[dMMM])[kbsw] +
+                 (dist.f[dPMM])[kbse] + (dist.f[dMPM])[kbnw]) -
                  rhoD[nodeIndex] - (vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1 + rhoD[nodeIndex])) * c1o2 + rhoD[nodeIndex] +
                  PRESS;
                  //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
             //////////////////////////////////////////////////////////////////////////
-            mfcbb = (distAD.f[DIR_P00])[nodeIndex   ];
-            mfabb = (distAD.f[DIR_M00])[kw  ];
-            mfbcb = (distAD.f[DIR_0P0])[nodeIndex   ];
-            mfbab = (distAD.f[DIR_0M0])[ks  ];
-            mfbbc = (distAD.f[DIR_00P])[nodeIndex   ];
-            mfbba = (distAD.f[DIR_00M])[kb  ];
-            mfccb = (distAD.f[DIR_PP0])[nodeIndex   ];
-            mfaab = (distAD.f[DIR_MM0])[ksw ];
-            mfcab = (distAD.f[DIR_PM0])[ks  ];
-            mfacb = (distAD.f[DIR_MP0])[kw  ];
-            mfcbc = (distAD.f[DIR_P0P])[nodeIndex   ];
-            mfaba = (distAD.f[DIR_M0M])[kbw ];
-            mfcba = (distAD.f[DIR_P0M])[kb  ];
-            mfabc = (distAD.f[DIR_M0P])[kw  ];
-            mfbcc = (distAD.f[DIR_0PP])[nodeIndex   ];
-            mfbaa = (distAD.f[DIR_0MM])[kbs ];
-            mfbca = (distAD.f[DIR_0PM])[kb  ];
-            mfbac = (distAD.f[DIR_0MP])[ks  ];
-            mfbbb = (distAD.f[DIR_000])[nodeIndex   ];
-            mfccc = (distAD.f[DIR_PPP])[nodeIndex   ];
-            mfaac = (distAD.f[DIR_MMP])[ksw ];
-            mfcac = (distAD.f[DIR_PMP])[ks  ];
-            mfacc = (distAD.f[DIR_MPP])[kw  ];
-            mfcca = (distAD.f[DIR_PPM])[kb  ];
-            mfaaa = (distAD.f[DIR_MMM])[kbsw];
-            mfcaa = (distAD.f[DIR_PMM])[kbs ];
-            mfaca = (distAD.f[DIR_MPM])[kbw ];
+            mfcbb = (distAD.f[dP00])[nodeIndex   ];
+            mfabb = (distAD.f[dM00])[kw  ];
+            mfbcb = (distAD.f[d0P0])[nodeIndex   ];
+            mfbab = (distAD.f[d0M0])[ks  ];
+            mfbbc = (distAD.f[d00P])[nodeIndex   ];
+            mfbba = (distAD.f[d00M])[kb  ];
+            mfccb = (distAD.f[dPP0])[nodeIndex   ];
+            mfaab = (distAD.f[dMM0])[ksw ];
+            mfcab = (distAD.f[dPM0])[ks  ];
+            mfacb = (distAD.f[dMP0])[kw  ];
+            mfcbc = (distAD.f[dP0P])[nodeIndex   ];
+            mfaba = (distAD.f[dM0M])[kbw ];
+            mfcba = (distAD.f[dP0M])[kb  ];
+            mfabc = (distAD.f[dM0P])[kw  ];
+            mfbcc = (distAD.f[d0PP])[nodeIndex   ];
+            mfbaa = (distAD.f[d0MM])[kbs ];
+            mfbca = (distAD.f[d0PM])[kb  ];
+            mfbac = (distAD.f[d0MP])[ks  ];
+            mfbbb = (distAD.f[d000])[nodeIndex   ];
+            mfccc = (distAD.f[dPPP])[nodeIndex   ];
+            mfaac = (distAD.f[dMMP])[ksw ];
+            mfcac = (distAD.f[dPMP])[ks  ];
+            mfacc = (distAD.f[dMPP])[kw  ];
+            mfcca = (distAD.f[dPPM])[kb  ];
+            mfaaa = (distAD.f[dMMM])[kbsw];
+            mfcaa = (distAD.f[dPMM])[kbs ];
+            mfaca = (distAD.f[dMPM])[kbw ];
             //////////////////////////////////////////////////////////////////////////
             concD[nodeIndex] = 
                 ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa)   + (mfaac + mfcca))) +
@@ -1176,50 +1176,50 @@ __global__ void LBCalcMeasurePoints(
         
         if(geoD[kzero] == GEO_FLUID)
         {
-            rhoMP[kMac]= (dist.f[DIR_P00])[ke  ]+ (dist.f[DIR_M00])[kw  ]+ 
-                         (dist.f[DIR_0P0])[kn  ]+ (dist.f[DIR_0M0])[ks  ]+
-                         (dist.f[DIR_00P])[kt  ]+ (dist.f[DIR_00M])[kb  ]+
-                         (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+
-                         (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                         (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+
-                         (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                         (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+
-                         (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+
-                         (dist.f[DIR_000])[kzero]+ 
-                         (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                         (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                         (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ 
-                         (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw];
+            rhoMP[kMac]= (dist.f[dP00])[ke  ]+ (dist.f[dM00])[kw  ]+ 
+                         (dist.f[d0P0])[kn  ]+ (dist.f[d0M0])[ks  ]+
+                         (dist.f[d00P])[kt  ]+ (dist.f[d00M])[kb  ]+
+                         (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+
+                         (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                         (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+
+                         (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                         (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+
+                         (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+
+                         (dist.f[d000])[kzero]+ 
+                         (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                         (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                         (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ 
+                         (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw];
            
-            vxMP[kMac] = (dist.f[DIR_P00])[ke  ]- (dist.f[DIR_M00])[kw  ]+ 
-                         (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]+
-                         (dist.f[DIR_PM0])[kse ]- (dist.f[DIR_MP0])[knw ]+
-                         (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]+
-                         (dist.f[DIR_P0M])[kbe ]- (dist.f[DIR_M0P])[ktw ]+
-                         (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]+ 
-                         (dist.f[DIR_PMP])[ktse]- (dist.f[DIR_MPP])[ktnw]+ 
-                         (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]+ 
-                         (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw];
+            vxMP[kMac] = (dist.f[dP00])[ke  ]- (dist.f[dM00])[kw  ]+ 
+                         (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]+
+                         (dist.f[dPM0])[kse ]- (dist.f[dMP0])[knw ]+
+                         (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]+
+                         (dist.f[dP0M])[kbe ]- (dist.f[dM0P])[ktw ]+
+                         (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]+ 
+                         (dist.f[dPMP])[ktse]- (dist.f[dMPP])[ktnw]+ 
+                         (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]+ 
+                         (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw];
            
-            vyMP[kMac] = (dist.f[DIR_0P0])[kn  ]- (dist.f[DIR_0M0])[ks  ]+
-                         (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]-
-                         (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+
-                         (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]+
-                         (dist.f[DIR_0PM])[kbn ]- (dist.f[DIR_0MP])[kts ]+
-                         (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]- 
-                         (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ 
-                         (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- 
-                         (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw];
+            vyMP[kMac] = (dist.f[d0P0])[kn  ]- (dist.f[d0M0])[ks  ]+
+                         (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]-
+                         (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+
+                         (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]+
+                         (dist.f[d0PM])[kbn ]- (dist.f[d0MP])[kts ]+
+                         (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]- 
+                         (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ 
+                         (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- 
+                         (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw];
            
-            vzMP[kMac] = (dist.f[DIR_00P])[kt  ]- (dist.f[DIR_00M])[kb  ]+
-                         (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]-
-                         (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+
-                         (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]-
-                         (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+
-                         (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ 
-                         (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]- 
-                         (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- 
-                         (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw];
+            vzMP[kMac] = (dist.f[d00P])[kt  ]- (dist.f[d00M])[kb  ]+
+                         (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]-
+                         (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+
+                         (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]-
+                         (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+
+                         (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ 
+                         (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]- 
+                         (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- 
+                         (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw];
         }
     }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu b/src/gpu/core/GPU/Cascade27.cu
similarity index 77%
rename from src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu
rename to src/gpu/core/GPU/Cascade27.cu
index e05a711015e372b3fc3169bf61bea9965ccf7c12..98d7c6676e6055fae67d5c1783421c3219a285ba 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu
+++ b/src/gpu/core/GPU/Cascade27.cu
@@ -40,63 +40,63 @@ __global__ void LB_Kernel_Cascade_SP_27(     real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -129,33 +129,33 @@ __global__ void LB_Kernel_Cascade_SP_27(     real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw ];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k  ];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k  ];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k  ];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw ];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k  ];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k  ];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks ];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw ];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb ];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//slow
 			//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -731,33 +731,33 @@ __global__ void LB_Kernel_Cascade_SP_27(     real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[ DIR_00P   ])[k   ] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[ DIR_000])[k   ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[ dP00   ])[k   ] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[ dM00   ])[kw  ] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[ d0P0   ])[k   ] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[ d0M0   ])[ks  ] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[ d00P   ])[k   ] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[ d00M   ])[kb  ] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[ dPP0  ])[k   ] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[ dMM0  ])[ksw ] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[ dPM0  ])[ks  ] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[ dMP0  ])[kw  ] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[ dP0P  ])[k   ] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[ dM0M  ])[kbw ] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[ dP0M  ])[kb  ] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[ dM0P  ])[kw  ] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[ d0PP  ])[k   ] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[ d0MM  ])[kbs ] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[ d0PM  ])[kb  ] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[ d0MP  ])[ks  ] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[ d000])[k   ] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[ dPPP ])[k   ] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[ dPMP ])[ks  ] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[ dPPM ])[kb  ] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[ dPMM ])[kbs ] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[ dMPP ])[kw  ] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[ dMMP ])[ksw ] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[ dMPM ])[kbw ] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[ dMMM ])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -867,63 +867,63 @@ __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
          }
          else
          {
-            D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -956,33 +956,33 @@ __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
          unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real f_E     = (D.f[DIR_P00])[ke   ];// +  c2over27 ;
-         real f_W     = (D.f[DIR_M00])[kw   ];// +  c2over27 ;
-         real f_N     = (D.f[DIR_0P0])[kn   ];// +  c2over27 ;
-         real f_S     = (D.f[DIR_0M0])[ks   ];// +  c2over27 ;
-         real f_F     = (D.f[DIR_00P])[kt   ];// +  c2over27 ;
-         real f_B     = (D.f[DIR_00M])[kb   ];// +  c2over27 ;
-         real f_NE    = (D.f[DIR_PP0])[kne  ];// +  c1over54 ;
-         real f_SW    = (D.f[DIR_MM0])[ksw  ];// +  c1over54 ;
-         real f_SE    = (D.f[DIR_PM0])[kse  ];// +  c1over54 ;
-         real f_NW    = (D.f[DIR_MP0])[knw  ];// +  c1over54 ;
-         real f_Ef    = (D.f[DIR_P0P])[kte  ];// +  c1over54 ;
-         real f_Wb    = (D.f[DIR_M0M])[kbw  ];// +  c1over54 ;
-         real f_Eb    = (D.f[DIR_P0M])[kbe  ];// +  c1over54 ;
-         real f_Wf    = (D.f[DIR_M0P])[ktw  ];// +  c1over54 ;
-         real f_Nf    = (D.f[DIR_0PP])[ktn  ];// +  c1over54 ;
-         real f_Sb    = (D.f[DIR_0MM])[kbs  ];// +  c1over54 ;
-         real f_Nb    = (D.f[DIR_0PM])[kbn  ];// +  c1over54 ;
-         real f_Sf    = (D.f[DIR_0MP])[kts  ];// +  c1over54 ;
-         real f_R     = (D.f[DIR_000])[kzero];// +  c8over27 ;
-         real f_Nef   = (D.f[DIR_PPP])[ktne ];// +  c1over216;
-         real f_Swf   = (D.f[DIR_MMP])[ktsw ];// +  c1over216;
-         real f_Sef   = (D.f[DIR_PMP])[ktse ];// +  c1over216;
-         real f_Nwf   = (D.f[DIR_MPP])[ktnw ];// +  c1over216;
-         real f_Neb   = (D.f[DIR_PPM])[kbne ];// +  c1over216;
-         real f_Swb   = (D.f[DIR_MMM])[kbsw ];// +  c1over216;
-         real f_Seb   = (D.f[DIR_PMM])[kbse ];// +  c1over216;
-         real f_Nwb   = (D.f[DIR_MPM])[kbnw ];// +  c1over216;
+         real f_E     = (D.f[dP00])[ke   ];// +  c2over27 ;
+         real f_W     = (D.f[dM00])[kw   ];// +  c2over27 ;
+         real f_N     = (D.f[d0P0])[kn   ];// +  c2over27 ;
+         real f_S     = (D.f[d0M0])[ks   ];// +  c2over27 ;
+         real f_F     = (D.f[d00P])[kt   ];// +  c2over27 ;
+         real f_B     = (D.f[d00M])[kb   ];// +  c2over27 ;
+         real f_NE    = (D.f[dPP0])[kne  ];// +  c1over54 ;
+         real f_SW    = (D.f[dMM0])[ksw  ];// +  c1over54 ;
+         real f_SE    = (D.f[dPM0])[kse  ];// +  c1over54 ;
+         real f_NW    = (D.f[dMP0])[knw  ];// +  c1over54 ;
+         real f_Ef    = (D.f[dP0P])[kte  ];// +  c1over54 ;
+         real f_Wb    = (D.f[dM0M])[kbw  ];// +  c1over54 ;
+         real f_Eb    = (D.f[dP0M])[kbe  ];// +  c1over54 ;
+         real f_Wf    = (D.f[dM0P])[ktw  ];// +  c1over54 ;
+         real f_Nf    = (D.f[d0PP])[ktn  ];// +  c1over54 ;
+         real f_Sb    = (D.f[d0MM])[kbs  ];// +  c1over54 ;
+         real f_Nb    = (D.f[d0PM])[kbn  ];// +  c1over54 ;
+         real f_Sf    = (D.f[d0MP])[kts  ];// +  c1over54 ;
+         real f_R     = (D.f[d000])[kzero];// +  c8over27 ;
+         real f_Nef   = (D.f[dPPP])[ktne ];// +  c1over216;
+         real f_Swf   = (D.f[dMMP])[ktsw ];// +  c1over216;
+         real f_Sef   = (D.f[dPMP])[ktse ];// +  c1over216;
+         real f_Nwf   = (D.f[dMPP])[ktnw ];// +  c1over216;
+         real f_Neb   = (D.f[dPPM])[kbne ];// +  c1over216;
+         real f_Swb   = (D.f[dMMM])[kbsw ];// +  c1over216;
+         real f_Seb   = (D.f[dPMM])[kbse ];// +  c1over216;
+         real f_Nwb   = (D.f[dMPM])[kbnw ];// +  c1over216;
          ////////////////////////////////////////////////////////////////////////////////////
 		 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);
@@ -1611,33 +1611,33 @@ __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
 		
 			   
 		 ////////////////////////////////////////////////////////////////////////////////////
-		 (D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
-		 (D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
-		 (D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;
-		 (D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;
-		 (D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;
-		 (D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;
-		 (D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;
-		 (D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;
-		 (D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;
-		 (D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;
-		 (D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;
-		 (D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;
-		 (D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;
-		 (D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;
-		 (D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;
-		 (D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;
-		 (D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;
-		 (D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;
-		 (D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;
-		 (D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;
-		 (D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;
-		 (D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;
-		 (D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;
-		 (D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;
-		 (D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;
-		 (D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;
-		 (D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;
+		 (D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
+		 (D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
+		 (D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;
+		 (D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;
+		 (D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;
+		 (D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;
+		 (D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;
+		 (D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;
+		 (D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;
+		 (D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;
+		 (D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;
+		 (D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;
+		 (D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;
+		 (D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;
+		 (D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;
+		 (D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;
+		 (D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;
+		 (D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;
+		 (D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;
+		 (D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;
+		 (D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;
+		 (D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;
+		 (D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;
+		 (D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;
+		 (D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;
+		 (D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;
+		 (D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;
 		 ////////////////////////////////////////////////////////////////////////////////////
       }                                                                                                                    
    }
@@ -1714,63 +1714,63 @@ __global__ void LB_Kernel_Casc_SP_MS_OHM_27(  real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
          }
          else
          {
-            D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -1803,33 +1803,33 @@ __global__ void LB_Kernel_Casc_SP_MS_OHM_27(  real omega,
          //unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real fE    =  (D.f[DIR_P00])[k  ];//ke
-         real fW    =  (D.f[DIR_M00])[kw ];
-         real fN    =  (D.f[DIR_0P0])[k  ];//kn
-         real fS    =  (D.f[DIR_0M0])[ks ];
-         real fT    =  (D.f[DIR_00P])[k  ];//kt
-         real fB    =  (D.f[DIR_00M])[kb ];
-         real fNE   =  (D.f[DIR_PP0])[k  ];//kne
-         real fSW   =  (D.f[DIR_MM0])[ksw];
-         real fSE   =  (D.f[DIR_PM0])[ks ];//kse
-         real fNW   =  (D.f[DIR_MP0])[kw ];//knw
-         real fTE   =  (D.f[DIR_P0P])[k  ];//kte
-         real fBW   =  (D.f[DIR_M0M])[kbw];
-         real fBE   =  (D.f[DIR_P0M])[kb ];//kbe
-         real fTW   =  (D.f[DIR_M0P])[kw ];//ktw
-         real fTN   =  (D.f[DIR_0PP])[k  ];//ktn
-         real fBS   =  (D.f[DIR_0MM])[kbs];
-         real fBN   =  (D.f[DIR_0PM])[kb ];//kbn
-         real fTS   =  (D.f[DIR_0MP])[ks ];//kts
-         real fZERO =  (D.f[DIR_000])[k  ];//kzero
-         real fTNE   = (D.f[DIR_PPP])[k  ];//ktne
-         real fTSW   = (D.f[DIR_MMP])[ksw];//ktsw
-         real fTSE   = (D.f[DIR_PMP])[ks ];//ktse
-         real fTNW   = (D.f[DIR_MPP])[kw ];//ktnw
-         real fBNE   = (D.f[DIR_PPM])[kb ];//kbne
-         real fBSW   = (D.f[DIR_MMM])[kbsw];
-         real fBSE   = (D.f[DIR_PMM])[kbs];//kbse
-         real fBNW   = (D.f[DIR_MPM])[kbw];//kbnw
+         real fE    =  (D.f[dP00])[k  ];//ke
+         real fW    =  (D.f[dM00])[kw ];
+         real fN    =  (D.f[d0P0])[k  ];//kn
+         real fS    =  (D.f[d0M0])[ks ];
+         real fT    =  (D.f[d00P])[k  ];//kt
+         real fB    =  (D.f[d00M])[kb ];
+         real fNE   =  (D.f[dPP0])[k  ];//kne
+         real fSW   =  (D.f[dMM0])[ksw];
+         real fSE   =  (D.f[dPM0])[ks ];//kse
+         real fNW   =  (D.f[dMP0])[kw ];//knw
+         real fTE   =  (D.f[dP0P])[k  ];//kte
+         real fBW   =  (D.f[dM0M])[kbw];
+         real fBE   =  (D.f[dP0M])[kb ];//kbe
+         real fTW   =  (D.f[dM0P])[kw ];//ktw
+         real fTN   =  (D.f[d0PP])[k  ];//ktn
+         real fBS   =  (D.f[d0MM])[kbs];
+         real fBN   =  (D.f[d0PM])[kb ];//kbn
+         real fTS   =  (D.f[d0MP])[ks ];//kts
+         real fZERO =  (D.f[d000])[k  ];//kzero
+         real fTNE   = (D.f[dPPP])[k  ];//ktne
+         real fTSW   = (D.f[dMMP])[ksw];//ktsw
+         real fTSE   = (D.f[dPMP])[ks ];//ktse
+         real fTNW   = (D.f[dMPP])[kw ];//ktnw
+         real fBNE   = (D.f[dPPM])[kb ];//kbne
+         real fBSW   = (D.f[dMMM])[kbsw];
+         real fBSE   = (D.f[dPMM])[kbs];//kbse
+         real fBNW   = (D.f[dMPM])[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;
@@ -2185,92 +2185,92 @@ __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[ DIR_P00   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
-         //(D.f[ DIR_M00   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
-         //(D.f[ DIR_0P0   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
-         //(D.f[ DIR_0M0   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
-         //(D.f[ DIR_00P   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
-         //(D.f[ DIR_00M   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
-         //(D.f[ DIR_PP0  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
-         //(D.f[ DIR_MM0  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
-         //(D.f[ DIR_PM0  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
-         //(D.f[ DIR_MP0  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
-         //(D.f[ DIR_P0P  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
-         //(D.f[ DIR_M0M  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
-         //(D.f[ DIR_P0M  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
-         //(D.f[ DIR_M0P  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
-         //(D.f[ DIR_0PP  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
-         //(D.f[ DIR_0MM  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
-         //(D.f[ DIR_0PM  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
-         //(D.f[ DIR_0MP  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
-         //(D.f[ DIR_000])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
-         //(D.f[ DIR_PPP ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
-         //(D.f[ DIR_PMP ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
-         //(D.f[ DIR_PPM ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
-         //(D.f[ DIR_PMM ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
-         //(D.f[ DIR_MPP ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
-         //(D.f[ DIR_MMP ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
-         //(D.f[ DIR_MPM ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
-         //(D.f[ DIR_MMM ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
-         (D.f[ DIR_P00   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 - mu122) + (                                          + mu102 + mu120) + ( - vx            ) );   //ke
-         (D.f[ DIR_M00   ])[kw  ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 + mu122) + (                                          - mu102 - mu120) + ( + vx            ) );   
-         (D.f[ DIR_0P0   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         - mu212        ) + (                          + mu012 + mu210                ) + (      - vy       ) );   //kn
-         (D.f[ DIR_0M0   ])[ks  ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         + mu212        ) + (                          - mu012 - mu210                ) + (      + vy       ) );   
-         (D.f[ DIR_00P   ])[k   ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( - mu221                ) + (         + mu201 +  mu021                                ) + (           - vz  ) );   //kt
-         (D.f[ DIR_00M   ])[kb  ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( + mu221                ) + (         - mu201 -  mu021                                ) + (           + vz  ) );   
-         (D.f[ DIR_PP0  ])[k   ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         + mu212 + mu122) + (                                  - mu210         - mu120)                       );   //kne
-         (D.f[ DIR_MM0  ])[ksw ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         - mu212 - mu122) + (                                  + mu210         + mu120)                       );   
-         (D.f[ DIR_PM0  ])[ks  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         - mu212 + mu122) + (                                  + mu210         - mu120)                       );   //kse
-         (D.f[ DIR_MP0  ])[kw  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         + mu212 - mu122) + (                                  - mu210         + mu120)                       );   //knw
-         (D.f[ DIR_P0P  ])[k   ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( + mu221         + mu122) + (         - mu201                          - mu102        )                       );   //kte
-         (D.f[ DIR_M0M  ])[kbw ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( - mu221         - mu122) + (         + mu201                          + mu102        )                       );   
-         (D.f[ DIR_P0M  ])[kb  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( - mu221         + mu122) + (         + mu201                          - mu102        )                       );   //kbe
-         (D.f[ DIR_M0P  ])[kw  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( + mu221         - mu122) + (         - mu201                          + mu102        )                       );   //ktw
-         (D.f[ DIR_0PP  ])[k   ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( + mu221 + mu212        ) + (                 -  mu021 - mu012                        )                       );   //ktn
-         (D.f[ DIR_0MM  ])[kbs ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( - mu221 - mu212        ) + (                 +  mu021 + mu012                        )                       );   
-         (D.f[ DIR_0PM  ])[kb  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( - mu221 + mu212        ) + (                 +  mu021 - mu012                        )                       );   //kbn
-         (D.f[ DIR_0MP  ])[ks  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( + mu221 - mu212        ) + (                 -  mu021 + mu012                        )                       );   //kts
-         (D.f[ DIR_000])[k   ] =       rho*(- mu222 + (                          + mu220 + mu202 + mu022) + (                         - mu200 - mu020 - mu002)                                                                                                                  )+rho0;   //kzero
-         (D.f[ DIR_PPP ])[k   ] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( - mu221 - mu212 - mu122) + ( - mu111                                                 )                       );   //ktne
-         (D.f[ DIR_PMP ])[ks  ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( - mu221 + mu212 - mu122) + ( + mu111                                                 )                       );   //ktse
-         (D.f[ DIR_PPM ])[kb  ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( + mu221 - mu212 - mu122) + ( + mu111                                                 )                       );   //kbne
-         (D.f[ DIR_PMM ])[kbs ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( + mu221 + mu212 - mu122) + ( - mu111                                                 )                       );   //kbse
-         (D.f[ DIR_MPP ])[kw  ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( - mu221 - mu212 + mu122) + ( + mu111                                                 )                       );   //ktnw
-         (D.f[ DIR_MMP ])[ksw ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( - mu221 + mu212 + mu122) + ( - mu111                                                 )                       );   //ktsw
-         (D.f[ DIR_MPM ])[kbw ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( + mu221 - mu212 + mu122) + ( - mu111                                                 )                       );   //kbnw
-         (D.f[ DIR_MMM ])[kbsw] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( + mu221 + mu212 + mu122) + ( + mu111                                                 )                       );   
+         //(D.f[ dP00   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
+         //(D.f[ dM00   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
+         //(D.f[ d0P0   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
+         //(D.f[ d0M0   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
+         //(D.f[ d00P   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
+         //(D.f[ d00M   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
+         //(D.f[ dPP0  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
+         //(D.f[ dMM0  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
+         //(D.f[ dPM0  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
+         //(D.f[ dMP0  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
+         //(D.f[ dP0P  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
+         //(D.f[ dM0M  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
+         //(D.f[ dP0M  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
+         //(D.f[ dM0P  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
+         //(D.f[ d0PP  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
+         //(D.f[ d0MM  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
+         //(D.f[ d0PM  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
+         //(D.f[ d0MP  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
+         //(D.f[ d000])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
+         //(D.f[ dPPP ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
+         //(D.f[ dPMP ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
+         //(D.f[ dPPM ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
+         //(D.f[ dPMM ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
+         //(D.f[ dMPP ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
+         //(D.f[ dMMP ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
+         //(D.f[ dMPM ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
+         //(D.f[ dMMM ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
+         (D.f[ dP00   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 - mu122) + (                                          + mu102 + mu120) + ( - vx            ) );   //ke
+         (D.f[ dM00   ])[kw  ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 + mu122) + (                                          - mu102 - mu120) + ( + vx            ) );   
+         (D.f[ d0P0   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         - mu212        ) + (                          + mu012 + mu210                ) + (      - vy       ) );   //kn
+         (D.f[ d0M0   ])[ks  ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         + mu212        ) + (                          - mu012 - mu210                ) + (      + vy       ) );   
+         (D.f[ d00P   ])[k   ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( - mu221                ) + (         + mu201 +  mu021                                ) + (           - vz  ) );   //kt
+         (D.f[ d00M   ])[kb  ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( + mu221                ) + (         - mu201 -  mu021                                ) + (           + vz  ) );   
+         (D.f[ dPP0  ])[k   ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         + mu212 + mu122) + (                                  - mu210         - mu120)                       );   //kne
+         (D.f[ dMM0  ])[ksw ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         - mu212 - mu122) + (                                  + mu210         + mu120)                       );   
+         (D.f[ dPM0  ])[ks  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         - mu212 + mu122) + (                                  + mu210         - mu120)                       );   //kse
+         (D.f[ dMP0  ])[kw  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         + mu212 - mu122) + (                                  - mu210         + mu120)                       );   //knw
+         (D.f[ dP0P  ])[k   ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( + mu221         + mu122) + (         - mu201                          - mu102        )                       );   //kte
+         (D.f[ dM0M  ])[kbw ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( - mu221         - mu122) + (         + mu201                          + mu102        )                       );   
+         (D.f[ dP0M  ])[kb  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( - mu221         + mu122) + (         + mu201                          - mu102        )                       );   //kbe
+         (D.f[ dM0P  ])[kw  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( + mu221         - mu122) + (         - mu201                          + mu102        )                       );   //ktw
+         (D.f[ d0PP  ])[k   ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( + mu221 + mu212        ) + (                 -  mu021 - mu012                        )                       );   //ktn
+         (D.f[ d0MM  ])[kbs ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( - mu221 - mu212        ) + (                 +  mu021 + mu012                        )                       );   
+         (D.f[ d0PM  ])[kb  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( - mu221 + mu212        ) + (                 +  mu021 - mu012                        )                       );   //kbn
+         (D.f[ d0MP  ])[ks  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( + mu221 - mu212        ) + (                 -  mu021 + mu012                        )                       );   //kts
+         (D.f[ d000])[k   ] =       rho*(- mu222 + (                          + mu220 + mu202 + mu022) + (                         - mu200 - mu020 - mu002)                                                                                                                  )+rho0;   //kzero
+         (D.f[ dPPP ])[k   ] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( - mu221 - mu212 - mu122) + ( - mu111                                                 )                       );   //ktne
+         (D.f[ dPMP ])[ks  ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( - mu221 + mu212 - mu122) + ( + mu111                                                 )                       );   //ktse
+         (D.f[ dPPM ])[kb  ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( + mu221 - mu212 - mu122) + ( + mu111                                                 )                       );   //kbne
+         (D.f[ dPMM ])[kbs ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( + mu221 + mu212 - mu122) + ( - mu111                                                 )                       );   //kbse
+         (D.f[ dMPP ])[kw  ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( - mu221 - mu212 + mu122) + ( + mu111                                                 )                       );   //ktnw
+         (D.f[ dMMP ])[ksw ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( - mu221 + mu212 + mu122) + ( - mu111                                                 )                       );   //ktsw
+         (D.f[ dMPM ])[kbw ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( + mu221 - mu212 + mu122) + ( - mu111                                                 )                       );   //kbnw
+         (D.f[ dMMM ])[kbsw] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( + mu221 + mu212 + mu122) + ( + mu111                                                 )                       );   
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                 
          //////////////////////////////////////////////////////////////////////////                                                                                                                                                                             
          //BGK                                                                                                 
          //////////////////////////////////////////////////////////////////////////                            
-         //(D.f[ DIR_P00   ])[k   ] = fW    ;                                                                     
-         //(D.f[ DIR_M00   ])[kw  ] = fE    ;                                                                     
-         //(D.f[ DIR_0P0   ])[k   ] = fS    ;
-         //(D.f[ DIR_0M0   ])[ks  ] = fN    ;
-         //(D.f[ DIR_00P   ])[k   ] = fB    ;
-         //(D.f[ DIR_00M   ])[kb  ] = fT    ;
-         //(D.f[ DIR_PP0  ])[k   ] = fSW   ;
-         //(D.f[ DIR_MM0  ])[ksw ] = fNE   ;
-         //(D.f[ DIR_PM0  ])[ks  ] = fNW   ;
-         //(D.f[ DIR_MP0  ])[kw  ] = fSE   ;
-         //(D.f[ DIR_P0P  ])[k   ] = fBW   ;
-         //(D.f[ DIR_M0M  ])[kbw ] = fTE   ;
-         //(D.f[ DIR_P0M  ])[kb  ] = fTW   ;
-         //(D.f[ DIR_M0P  ])[kw  ] = fBE   ;
-         //(D.f[ DIR_0PP  ])[k   ] = fBS   ;
-         //(D.f[ DIR_0MM  ])[kbs ] = fTN   ;
-         //(D.f[ DIR_0PM  ])[kb  ] = fTS   ;
-         //(D.f[ DIR_0MP  ])[ks  ] = fBN   ;
-         //(D.f[ DIR_000])[k   ] = fZERO ;
-         //(D.f[ DIR_PPP ])[k   ] = fBSW  ;
-         //(D.f[ DIR_PMP ])[ks  ] = fBNW  ;
-         //(D.f[ DIR_PPM ])[kb  ] = fTSW  ;
-         //(D.f[ DIR_PMM ])[kbs ] = fTNW  ;
-         //(D.f[ DIR_MPP ])[kw  ] = fBSE  ;
-         //(D.f[ DIR_MMP ])[ksw ] = fBNE  ;
-         //(D.f[ DIR_MPM ])[kbw ] = fTSE  ;
-         //(D.f[ DIR_MMM ])[kbsw] = fTNE  ;
+         //(D.f[ dP00   ])[k   ] = fW    ;                                                                     
+         //(D.f[ dM00   ])[kw  ] = fE    ;                                                                     
+         //(D.f[ d0P0   ])[k   ] = fS    ;
+         //(D.f[ d0M0   ])[ks  ] = fN    ;
+         //(D.f[ d00P   ])[k   ] = fB    ;
+         //(D.f[ d00M   ])[kb  ] = fT    ;
+         //(D.f[ dPP0  ])[k   ] = fSW   ;
+         //(D.f[ dMM0  ])[ksw ] = fNE   ;
+         //(D.f[ dPM0  ])[ks  ] = fNW   ;
+         //(D.f[ dMP0  ])[kw  ] = fSE   ;
+         //(D.f[ dP0P  ])[k   ] = fBW   ;
+         //(D.f[ dM0M  ])[kbw ] = fTE   ;
+         //(D.f[ dP0M  ])[kb  ] = fTW   ;
+         //(D.f[ dM0P  ])[kw  ] = fBE   ;
+         //(D.f[ d0PP  ])[k   ] = fBS   ;
+         //(D.f[ d0MM  ])[kbs ] = fTN   ;
+         //(D.f[ d0PM  ])[kb  ] = fTS   ;
+         //(D.f[ d0MP  ])[ks  ] = fBN   ;
+         //(D.f[ d000])[k   ] = fZERO ;
+         //(D.f[ dPPP ])[k   ] = fBSW  ;
+         //(D.f[ dPMP ])[ks  ] = fBNW  ;
+         //(D.f[ dPPM ])[kb  ] = fTSW  ;
+         //(D.f[ dPMM ])[kbs ] = fTNW  ;
+         //(D.f[ dMPP ])[kw  ] = fBSE  ;
+         //(D.f[ dMMP ])[ksw ] = fBNE  ;
+         //(D.f[ dMPM ])[kbw ] = fTSE  ;
+         //(D.f[ dMMM ])[kbsw] = fTNE  ;
       }                                                                                                                    
    }
 }
@@ -2346,63 +2346,63 @@ __global__ void LB_Kernel_Casc_SP_MS_27(   real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
          }
          else
          {
-            D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -2435,33 +2435,33 @@ __global__ void LB_Kernel_Casc_SP_MS_27(   real omega,
          //unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real fE    =  (D.f[DIR_P00])[k  ];//ke
-         real fW    =  (D.f[DIR_M00])[kw ];
-         real fN    =  (D.f[DIR_0P0])[k  ];//kn
-         real fS    =  (D.f[DIR_0M0])[ks ];
-         real fT    =  (D.f[DIR_00P])[k  ];//kt
-         real fB    =  (D.f[DIR_00M])[kb ];
-         real fNE   =  (D.f[DIR_PP0])[k  ];//kne
-         real fSW   =  (D.f[DIR_MM0])[ksw];
-         real fSE   =  (D.f[DIR_PM0])[ks ];//kse
-         real fNW   =  (D.f[DIR_MP0])[kw ];//knw
-         real fTE   =  (D.f[DIR_P0P])[k  ];//kte
-         real fBW   =  (D.f[DIR_M0M])[kbw];
-         real fBE   =  (D.f[DIR_P0M])[kb ];//kbe
-         real fTW   =  (D.f[DIR_M0P])[kw ];//ktw
-         real fTN   =  (D.f[DIR_0PP])[k  ];//ktn
-         real fBS   =  (D.f[DIR_0MM])[kbs];
-         real fBN   =  (D.f[DIR_0PM])[kb ];//kbn
-         real fTS   =  (D.f[DIR_0MP])[ks ];//kts
-         real fZERO =  (D.f[DIR_000])[k  ];//kzero
-         real fTNE   = (D.f[DIR_PPP])[k  ];//ktne
-         real fTSW   = (D.f[DIR_MMP])[ksw];//ktsw
-         real fTSE   = (D.f[DIR_PMP])[ks ];//ktse
-         real fTNW   = (D.f[DIR_MPP])[kw ];//ktnw
-         real fBNE   = (D.f[DIR_PPM])[kb ];//kbne
-         real fBSW   = (D.f[DIR_MMM])[kbsw];
-         real fBSE   = (D.f[DIR_PMM])[kbs];//kbse
-         real fBNW   = (D.f[DIR_MPM])[kbw];//kbnw
+         real fE    =  (D.f[dP00])[k  ];//ke
+         real fW    =  (D.f[dM00])[kw ];
+         real fN    =  (D.f[d0P0])[k  ];//kn
+         real fS    =  (D.f[d0M0])[ks ];
+         real fT    =  (D.f[d00P])[k  ];//kt
+         real fB    =  (D.f[d00M])[kb ];
+         real fNE   =  (D.f[dPP0])[k  ];//kne
+         real fSW   =  (D.f[dMM0])[ksw];
+         real fSE   =  (D.f[dPM0])[ks ];//kse
+         real fNW   =  (D.f[dMP0])[kw ];//knw
+         real fTE   =  (D.f[dP0P])[k  ];//kte
+         real fBW   =  (D.f[dM0M])[kbw];
+         real fBE   =  (D.f[dP0M])[kb ];//kbe
+         real fTW   =  (D.f[dM0P])[kw ];//ktw
+         real fTN   =  (D.f[d0PP])[k  ];//ktn
+         real fBS   =  (D.f[d0MM])[kbs];
+         real fBN   =  (D.f[d0PM])[kb ];//kbn
+         real fTS   =  (D.f[d0MP])[ks ];//kts
+         real fZERO =  (D.f[d000])[k  ];//kzero
+         real fTNE   = (D.f[dPPP])[k  ];//ktne
+         real fTSW   = (D.f[dMMP])[ksw];//ktsw
+         real fTSE   = (D.f[dPMP])[ks ];//ktse
+         real fTNW   = (D.f[dMPP])[kw ];//ktnw
+         real fBNE   = (D.f[dPPM])[kb ];//kbne
+         real fBSW   = (D.f[dMMM])[kbsw];
+         real fBSE   = (D.f[dPMM])[kbs];//kbse
+         real fBNW   = (D.f[dMPM])[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;
@@ -2737,65 +2737,65 @@ __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[ DIR_P00   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
-         (D.f[ DIR_M00   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
-         (D.f[ DIR_0P0   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
-         (D.f[ DIR_0M0   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
-         (D.f[ DIR_00P   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
-         (D.f[ DIR_00M   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
-         (D.f[ DIR_PP0  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
-         (D.f[ DIR_MM0  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
-         (D.f[ DIR_PM0  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
-         (D.f[ DIR_MP0  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
-         (D.f[ DIR_P0P  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
-         (D.f[ DIR_M0M  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
-         (D.f[ DIR_P0M  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
-         (D.f[ DIR_M0P  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
-         (D.f[ DIR_0PP  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
-         (D.f[ DIR_0MM  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
-         (D.f[ DIR_0PM  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
-         (D.f[ DIR_0MP  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
-         (D.f[ DIR_000])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
-         (D.f[ DIR_PPP ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
-         (D.f[ DIR_PMP ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
-         (D.f[ DIR_PPM ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
-         (D.f[ DIR_PMM ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
-         (D.f[ DIR_MPP ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
-         (D.f[ DIR_MMP ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
-         (D.f[ DIR_MPM ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
-         (D.f[ DIR_MMM ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
+         (D.f[ dP00   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
+         (D.f[ dM00   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
+         (D.f[ d0P0   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
+         (D.f[ d0M0   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
+         (D.f[ d00P   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
+         (D.f[ d00M   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
+         (D.f[ dPP0  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
+         (D.f[ dMM0  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
+         (D.f[ dPM0  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
+         (D.f[ dMP0  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
+         (D.f[ dP0P  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
+         (D.f[ dM0M  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
+         (D.f[ dP0M  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
+         (D.f[ dM0P  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
+         (D.f[ d0PP  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
+         (D.f[ d0MM  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
+         (D.f[ d0PM  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
+         (D.f[ d0MP  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
+         (D.f[ d000])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
+         (D.f[ dPPP ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
+         (D.f[ dPMP ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
+         (D.f[ dPPM ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
+         (D.f[ dPMM ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
+         (D.f[ dMPP ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
+         (D.f[ dMMP ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
+         (D.f[ dMPM ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
+         (D.f[ dMMM ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
 
 
          //////////////////////////////////////////////////////////////////////////
          //BGK
          //////////////////////////////////////////////////////////////////////////
-         //(D.f[ DIR_P00   ])[k   ] = fW    ;
-         //(D.f[ DIR_M00   ])[kw  ] = fE    ;
-         //(D.f[ DIR_0P0   ])[k   ] = fS    ;
-         //(D.f[ DIR_0M0   ])[ks  ] = fN    ;
-         //(D.f[ DIR_00P   ])[k   ] = fB    ;
-         //(D.f[ DIR_00M   ])[kb  ] = fT    ;
-         //(D.f[ DIR_PP0  ])[k   ] = fSW   ;
-         //(D.f[ DIR_MM0  ])[ksw ] = fNE   ;
-         //(D.f[ DIR_PM0  ])[ks  ] = fNW   ;
-         //(D.f[ DIR_MP0  ])[kw  ] = fSE   ;
-         //(D.f[ DIR_P0P  ])[k   ] = fBW   ;
-         //(D.f[ DIR_M0M  ])[kbw ] = fTE   ;
-         //(D.f[ DIR_P0M  ])[kb  ] = fTW   ;
-         //(D.f[ DIR_M0P  ])[kw  ] = fBE   ;
-         //(D.f[ DIR_0PP  ])[k   ] = fBS   ;
-         //(D.f[ DIR_0MM  ])[kbs ] = fTN   ;
-         //(D.f[ DIR_0PM  ])[kb  ] = fTS   ;
-         //(D.f[ DIR_0MP  ])[ks  ] = fBN   ;
-         //(D.f[ DIR_000])[k   ] = fZERO ;
-         //(D.f[ DIR_PPP ])[k   ] = fBSW  ;
-         //(D.f[ DIR_PMP ])[ks  ] = fBNW  ;
-         //(D.f[ DIR_PPM ])[kb  ] = fTSW  ;
-         //(D.f[ DIR_PMM ])[kbs ] = fTNW  ;
-         //(D.f[ DIR_MPP ])[kw  ] = fBSE  ;
-         //(D.f[ DIR_MMP ])[ksw ] = fBNE  ;
-         //(D.f[ DIR_MPM ])[kbw ] = fTSE  ;
-         //(D.f[ DIR_MMM ])[kbsw] = fTNE  ;
+         //(D.f[ dP00   ])[k   ] = fW    ;
+         //(D.f[ dM00   ])[kw  ] = fE    ;
+         //(D.f[ d0P0   ])[k   ] = fS    ;
+         //(D.f[ d0M0   ])[ks  ] = fN    ;
+         //(D.f[ d00P   ])[k   ] = fB    ;
+         //(D.f[ d00M   ])[kb  ] = fT    ;
+         //(D.f[ dPP0  ])[k   ] = fSW   ;
+         //(D.f[ dMM0  ])[ksw ] = fNE   ;
+         //(D.f[ dPM0  ])[ks  ] = fNW   ;
+         //(D.f[ dMP0  ])[kw  ] = fSE   ;
+         //(D.f[ dP0P  ])[k   ] = fBW   ;
+         //(D.f[ dM0M  ])[kbw ] = fTE   ;
+         //(D.f[ dP0M  ])[kb  ] = fTW   ;
+         //(D.f[ dM0P  ])[kw  ] = fBE   ;
+         //(D.f[ d0PP  ])[k   ] = fBS   ;
+         //(D.f[ d0MM  ])[kbs ] = fTN   ;
+         //(D.f[ d0PM  ])[kb  ] = fTS   ;
+         //(D.f[ d0MP  ])[ks  ] = fBN   ;
+         //(D.f[ d000])[k   ] = fZERO ;
+         //(D.f[ dPPP ])[k   ] = fBSW  ;
+         //(D.f[ dPMP ])[ks  ] = fBNW  ;
+         //(D.f[ dPPM ])[kb  ] = fTSW  ;
+         //(D.f[ dPMM ])[kbs ] = fTNW  ;
+         //(D.f[ dMPP ])[kw  ] = fBSE  ;
+         //(D.f[ dMMP ])[ksw ] = fBNE  ;
+         //(D.f[ dMPM ])[kbw ] = fTSE  ;
+         //(D.f[ dMMM ])[kbsw] = fTNE  ;
       }                                                                                                                    
    }
 }
@@ -2871,63 +2871,63 @@ __global__ void LB_Kernel_Casc_SP_MS_Diff_27(real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
          }
          else
          {
-            D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-            D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-            D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-            D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-            D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-            D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-            D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-            D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-            D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-            D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-            D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-            D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-            D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-            D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-            D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-            D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-            D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-            D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-            D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-            D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-            D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-            D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-            D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-            D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-            D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-            D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-            D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+            D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+            D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+            D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+            D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+            D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+            D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+            D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+            D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+            D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+            D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+            D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+            D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+            D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+            D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+            D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+            D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+            D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+            D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+            D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+            D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+            D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+            D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+            D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+            D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+            D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+            D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+            D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -2960,33 +2960,33 @@ __global__ void LB_Kernel_Casc_SP_MS_Diff_27(real omega,
          //unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real fE    =  (D.f[DIR_P00])[k  ];//ke
-         real fW    =  (D.f[DIR_M00])[kw ];
-         real fN    =  (D.f[DIR_0P0])[k  ];//kn
-         real fS    =  (D.f[DIR_0M0])[ks ];
-         real fT    =  (D.f[DIR_00P])[k  ];//kt
-         real fB    =  (D.f[DIR_00M])[kb ];
-         real fNE   =  (D.f[DIR_PP0])[k  ];//kne
-         real fSW   =  (D.f[DIR_MM0])[ksw];
-         real fSE   =  (D.f[DIR_PM0])[ks ];//kse
-         real fNW   =  (D.f[DIR_MP0])[kw ];//knw
-         real fTE   =  (D.f[DIR_P0P])[k  ];//kte
-         real fBW   =  (D.f[DIR_M0M])[kbw];
-         real fBE   =  (D.f[DIR_P0M])[kb ];//kbe
-         real fTW   =  (D.f[DIR_M0P])[kw ];//ktw
-         real fTN   =  (D.f[DIR_0PP])[k  ];//ktn
-         real fBS   =  (D.f[DIR_0MM])[kbs];
-         real fBN   =  (D.f[DIR_0PM])[kb ];//kbn
-         real fTS   =  (D.f[DIR_0MP])[ks ];//kts
-         real fZERO =  (D.f[DIR_000])[k  ];//kzero
-         real fTNE   = (D.f[DIR_PPP])[k  ];//ktne
-         real fTSW   = (D.f[DIR_MMP])[ksw];//ktsw
-         real fTSE   = (D.f[DIR_PMP])[ks ];//ktse
-         real fTNW   = (D.f[DIR_MPP])[kw ];//ktnw
-         real fBNE   = (D.f[DIR_PPM])[kb ];//kbne
-         real fBSW   = (D.f[DIR_MMM])[kbsw];
-         real fBSE   = (D.f[DIR_PMM])[kbs];//kbse
-         real fBNW   = (D.f[DIR_MPM])[kbw];//kbnw
+         real fE    =  (D.f[dP00])[k  ];//ke
+         real fW    =  (D.f[dM00])[kw ];
+         real fN    =  (D.f[d0P0])[k  ];//kn
+         real fS    =  (D.f[d0M0])[ks ];
+         real fT    =  (D.f[d00P])[k  ];//kt
+         real fB    =  (D.f[d00M])[kb ];
+         real fNE   =  (D.f[dPP0])[k  ];//kne
+         real fSW   =  (D.f[dMM0])[ksw];
+         real fSE   =  (D.f[dPM0])[ks ];//kse
+         real fNW   =  (D.f[dMP0])[kw ];//knw
+         real fTE   =  (D.f[dP0P])[k  ];//kte
+         real fBW   =  (D.f[dM0M])[kbw];
+         real fBE   =  (D.f[dP0M])[kb ];//kbe
+         real fTW   =  (D.f[dM0P])[kw ];//ktw
+         real fTN   =  (D.f[d0PP])[k  ];//ktn
+         real fBS   =  (D.f[d0MM])[kbs];
+         real fBN   =  (D.f[d0PM])[kb ];//kbn
+         real fTS   =  (D.f[d0MP])[ks ];//kts
+         real fZERO =  (D.f[d000])[k  ];//kzero
+         real fTNE   = (D.f[dPPP])[k  ];//ktne
+         real fTSW   = (D.f[dMMP])[ksw];//ktsw
+         real fTSE   = (D.f[dPMP])[ks ];//ktse
+         real fTNW   = (D.f[dMPP])[kw ];//ktnw
+         real fBNE   = (D.f[dPPM])[kb ];//kbne
+         real fBSW   = (D.f[dMMM])[kbsw];
+         real fBSE   = (D.f[dPMM])[kbs];//kbse
+         real fBNW   = (D.f[dMPM])[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;
@@ -3259,65 +3259,65 @@ __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[ DIR_P00   ])[k   ] = fW    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102        );   //ke
-         (D.f[ DIR_M00   ])[kw  ] = fE    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102        );   
-         (D.f[ DIR_0P0   ])[k   ] = fS    -   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012        );   //kn
-         (D.f[ DIR_0M0   ])[ks  ] = fN    -   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012        );   
-         (D.f[ DIR_00P   ])[k   ] = fB    -   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002        );   //kt
-         (D.f[ DIR_00M   ])[kb  ] = fT    -   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002        );   
-         (D.f[ DIR_PP0  ])[k   ] = fSW   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
-         (D.f[ DIR_MM0  ])[ksw ] = fNE   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
-         (D.f[ DIR_PM0  ])[ks  ] = fNW   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
-         (D.f[ DIR_MP0  ])[kw  ] = fSE   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
-         (D.f[ DIR_P0P  ])[k   ] = fBW   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
-         (D.f[ DIR_M0M  ])[kbw ] = fTE   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
-         (D.f[ DIR_P0M  ])[kb  ] = fTW   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
-         (D.f[ DIR_M0P  ])[kw  ] = fBE   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
-         (D.f[ DIR_0PP  ])[k   ] = fBS   -  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
-         (D.f[ DIR_0MM  ])[kbs ] = fTN   -  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
-         (D.f[ DIR_0PM  ])[kb  ] = fTS   -  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
-         (D.f[ DIR_0MP  ])[ks  ] = fBN   -  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
-         (D.f[ DIR_000])[k   ] = fZERO -       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        );   //kzero
-         (D.f[ DIR_PPP ])[k   ] = fBSW  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
-         (D.f[ DIR_PMP ])[ks  ] = fBNW  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
-         (D.f[ DIR_PPM ])[kb  ] = fTSW  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
-         (D.f[ DIR_PMM ])[kbs ] = fTNW  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
-         (D.f[ DIR_MPP ])[kw  ] = fBSE  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
-         (D.f[ DIR_MMP ])[ksw ] = fBNE  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
-         (D.f[ DIR_MPM ])[kbw ] = fTSE  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
-         (D.f[ DIR_MMM ])[kbsw] = fTNE  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
+         (D.f[ dP00   ])[k   ] = fW    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102        );   //ke
+         (D.f[ dM00   ])[kw  ] = fE    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102        );   
+         (D.f[ d0P0   ])[k   ] = fS    -   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012        );   //kn
+         (D.f[ d0M0   ])[ks  ] = fN    -   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012        );   
+         (D.f[ d00P   ])[k   ] = fB    -   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002        );   //kt
+         (D.f[ d00M   ])[kb  ] = fT    -   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002        );   
+         (D.f[ dPP0  ])[k   ] = fSW   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
+         (D.f[ dMM0  ])[ksw ] = fNE   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
+         (D.f[ dPM0  ])[ks  ] = fNW   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
+         (D.f[ dMP0  ])[kw  ] = fSE   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
+         (D.f[ dP0P  ])[k   ] = fBW   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
+         (D.f[ dM0M  ])[kbw ] = fTE   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
+         (D.f[ dP0M  ])[kb  ] = fTW   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
+         (D.f[ dM0P  ])[kw  ] = fBE   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
+         (D.f[ d0PP  ])[k   ] = fBS   -  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
+         (D.f[ d0MM  ])[kbs ] = fTN   -  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
+         (D.f[ d0PM  ])[kb  ] = fTS   -  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
+         (D.f[ d0MP  ])[ks  ] = fBN   -  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
+         (D.f[ d000])[k   ] = fZERO -       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        );   //kzero
+         (D.f[ dPPP ])[k   ] = fBSW  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
+         (D.f[ dPMP ])[ks  ] = fBNW  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
+         (D.f[ dPPM ])[kb  ] = fTSW  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
+         (D.f[ dPMM ])[kbs ] = fTNW  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
+         (D.f[ dMPP ])[kw  ] = fBSE  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
+         (D.f[ dMMP ])[ksw ] = fBNE  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
+         (D.f[ dMPM ])[kbw ] = fTSE  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
+         (D.f[ dMMM ])[kbsw] = fTNE  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
 
 
          //////////////////////////////////////////////////////////////////////////
          //BGK
          //////////////////////////////////////////////////////////////////////////
-         //(D.f[ DIR_P00   ])[k   ] = fW    ;
-         //(D.f[ DIR_M00   ])[kw  ] = fE    ;
-         //(D.f[ DIR_0P0   ])[k   ] = fS    ;
-         //(D.f[ DIR_0M0   ])[ks  ] = fN    ;
-         //(D.f[ DIR_00P   ])[k   ] = fB    ;
-         //(D.f[ DIR_00M   ])[kb  ] = fT    ;
-         //(D.f[ DIR_PP0  ])[k   ] = fSW   ;
-         //(D.f[ DIR_MM0  ])[ksw ] = fNE   ;
-         //(D.f[ DIR_PM0  ])[ks  ] = fNW   ;
-         //(D.f[ DIR_MP0  ])[kw  ] = fSE   ;
-         //(D.f[ DIR_P0P  ])[k   ] = fBW   ;
-         //(D.f[ DIR_M0M  ])[kbw ] = fTE   ;
-         //(D.f[ DIR_P0M  ])[kb  ] = fTW   ;
-         //(D.f[ DIR_M0P  ])[kw  ] = fBE   ;
-         //(D.f[ DIR_0PP  ])[k   ] = fBS   ;
-         //(D.f[ DIR_0MM  ])[kbs ] = fTN   ;
-         //(D.f[ DIR_0PM  ])[kb  ] = fTS   ;
-         //(D.f[ DIR_0MP  ])[ks  ] = fBN   ;
-         //(D.f[ DIR_000])[k   ] = fZERO ;
-         //(D.f[ DIR_PPP ])[k   ] = fBSW  ;
-         //(D.f[ DIR_PMP ])[ks  ] = fBNW  ;
-         //(D.f[ DIR_PPM ])[kb  ] = fTSW  ;
-         //(D.f[ DIR_PMM ])[kbs ] = fTNW  ;
-         //(D.f[ DIR_MPP ])[kw  ] = fBSE  ;
-         //(D.f[ DIR_MMP ])[ksw ] = fBNE  ;
-         //(D.f[ DIR_MPM ])[kbw ] = fTSE  ;
-         //(D.f[ DIR_MMM ])[kbsw] = fTNE  ;
+         //(D.f[ dP00   ])[k   ] = fW    ;
+         //(D.f[ dM00   ])[kw  ] = fE    ;
+         //(D.f[ d0P0   ])[k   ] = fS    ;
+         //(D.f[ d0M0   ])[ks  ] = fN    ;
+         //(D.f[ d00P   ])[k   ] = fB    ;
+         //(D.f[ d00M   ])[kb  ] = fT    ;
+         //(D.f[ dPP0  ])[k   ] = fSW   ;
+         //(D.f[ dMM0  ])[ksw ] = fNE   ;
+         //(D.f[ dPM0  ])[ks  ] = fNW   ;
+         //(D.f[ dMP0  ])[kw  ] = fSE   ;
+         //(D.f[ dP0P  ])[k   ] = fBW   ;
+         //(D.f[ dM0M  ])[kbw ] = fTE   ;
+         //(D.f[ dP0M  ])[kb  ] = fTW   ;
+         //(D.f[ dM0P  ])[kw  ] = fBE   ;
+         //(D.f[ d0PP  ])[k   ] = fBS   ;
+         //(D.f[ d0MM  ])[kbs ] = fTN   ;
+         //(D.f[ d0PM  ])[kb  ] = fTS   ;
+         //(D.f[ d0MP  ])[ks  ] = fBN   ;
+         //(D.f[ d000])[k   ] = fZERO ;
+         //(D.f[ dPPP ])[k   ] = fBSW  ;
+         //(D.f[ dPMP ])[ks  ] = fBNW  ;
+         //(D.f[ dPPM ])[kb  ] = fTSW  ;
+         //(D.f[ dPMM ])[kbs ] = fTNW  ;
+         //(D.f[ dMPP ])[kw  ] = fBSE  ;
+         //(D.f[ dMMP ])[ksw ] = fBNE  ;
+         //(D.f[ dMPM ])[kbw ] = fTSE  ;
+         //(D.f[ dMMM ])[kbsw] = fTNE  ;
       }                                                                                                                    
    }
 }
@@ -3393,63 +3393,63 @@ __global__ void LB_Kernel_Casc_SP_27(  real omega,
        Distributions27 D;
        if (EvenOrOdd==true)
        {
-          D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-          D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-          D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-          D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-          D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-          D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-          D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-          D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-          D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-          D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-          D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-          D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-          D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-          D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-          D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-          D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-          D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-          D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-          D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-          D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-          D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-          D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-          D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-          D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-          D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-          D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-          D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+          D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+          D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+          D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+          D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+          D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+          D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+          D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+          D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+          D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+          D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+          D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+          D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+          D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+          D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+          D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+          D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+          D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+          D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+          D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+          D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+          D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+          D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+          D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+          D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+          D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+          D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+          D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
        }
        else
        {
-          D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-          D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-          D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-          D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-          D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-          D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-          D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-          D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-          D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-          D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-          D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-          D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-          D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-          D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-          D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-          D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-          D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-          D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-          D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-          D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-          D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-          D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-          D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-          D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-          D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-          D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-          D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+          D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+          D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+          D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+          D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+          D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+          D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+          D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+          D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+          D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+          D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+          D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+          D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+          D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+          D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+          D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+          D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+          D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+          D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+          D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+          D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+          D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+          D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+          D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+          D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+          D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+          D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+          D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
        }
 
        ////////////////////////////////////////////////////////////////////////////////
@@ -3512,33 +3512,33 @@ __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[DIR_P00])[ke]+c2o27;
-       f_W    =  (D.f[DIR_M00])[kw]+c2o27;
-       f_N    =  (D.f[DIR_0P0])[kn]+c2o27;
-       f_S    =  (D.f[DIR_0M0])[ks]+c2o27;
-       f_T    =  (D.f[DIR_00P])[kt]+c2o27;
-       f_B    =  (D.f[DIR_00M])[kb]+c2o27;
-       f_NE   =  (D.f[DIR_PP0])[kne]+c1o54;
-       f_SW   =  (D.f[DIR_MM0])[ksw]+c1o54;
-       f_SE   =  (D.f[DIR_PM0])[kse]+c1o54;
-       f_NW   =  (D.f[DIR_MP0])[knw]+c1o54;
-       f_TE   =  (D.f[DIR_P0P])[kte]+c1o54;
-       f_BW   =  (D.f[DIR_M0M])[kbw]+c1o54;
-       f_BE   =  (D.f[DIR_P0M])[kbe]+c1o54;
-       f_TW   =  (D.f[DIR_M0P])[ktw]+c1o54;
-       f_TN   =  (D.f[DIR_0PP])[ktn]+c1o54;
-       f_BS   =  (D.f[DIR_0MM])[kbs]+c1o54;
-       f_BN   =  (D.f[DIR_0PM])[kbn]+c1o54;
-       f_TS   =  (D.f[DIR_0MP])[kts]+c1o54;
-       f_ZERO =  (D.f[DIR_000])[kzero]+c8o27;
-       f_TNE   = (D.f[DIR_PPP])[ktne]+c1o216;
-       f_TSW   = (D.f[DIR_MMP])[ktsw]+c1o216;
-       f_TSE   = (D.f[DIR_PMP])[ktse]+c1o216;
-       f_TNW   = (D.f[DIR_MPP])[ktnw]+c1o216;
-       f_BNE   = (D.f[DIR_PPM])[kbne]+c1o216;
-       f_BSW   = (D.f[DIR_MMM])[kbsw]+c1o216;
-       f_BSE   = (D.f[DIR_PMM])[kbse]+c1o216;
-       f_BNW   = (D.f[DIR_MPM])[kbnw]+c1o216;
+       f_E    =  (D.f[dP00])[ke]+c2o27;
+       f_W    =  (D.f[dM00])[kw]+c2o27;
+       f_N    =  (D.f[d0P0])[kn]+c2o27;
+       f_S    =  (D.f[d0M0])[ks]+c2o27;
+       f_T    =  (D.f[d00P])[kt]+c2o27;
+       f_B    =  (D.f[d00M])[kb]+c2o27;
+       f_NE   =  (D.f[dPP0])[kne]+c1o54;
+       f_SW   =  (D.f[dMM0])[ksw]+c1o54;
+       f_SE   =  (D.f[dPM0])[kse]+c1o54;
+       f_NW   =  (D.f[dMP0])[knw]+c1o54;
+       f_TE   =  (D.f[dP0P])[kte]+c1o54;
+       f_BW   =  (D.f[dM0M])[kbw]+c1o54;
+       f_BE   =  (D.f[dP0M])[kbe]+c1o54;
+       f_TW   =  (D.f[dM0P])[ktw]+c1o54;
+       f_TN   =  (D.f[d0PP])[ktn]+c1o54;
+       f_BS   =  (D.f[d0MM])[kbs]+c1o54;
+       f_BN   =  (D.f[d0PM])[kbn]+c1o54;
+       f_TS   =  (D.f[d0MP])[kts]+c1o54;
+       f_ZERO =  (D.f[d000])[kzero]+c8o27;
+       f_TNE   = (D.f[dPPP])[ktne]+c1o216;
+       f_TSW   = (D.f[dMMP])[ktsw]+c1o216;
+       f_TSE   = (D.f[dPMP])[ktse]+c1o216;
+       f_TNW   = (D.f[dMPP])[ktnw]+c1o216;
+       f_BNE   = (D.f[dPPM])[kbne]+c1o216;
+       f_BSW   = (D.f[dMMM])[kbsw]+c1o216;
+       f_BSE   = (D.f[dPMM])[kbse]+c1o216;
+       f_BNW   = (D.f[dMPM])[kbnw]+c1o216;
        ////////////////////////////////////////////////////////////////////////////////
 
        if( BC == GEO_FLUID || BC == GEO_VELO)
@@ -3977,38 +3977,38 @@ __global__ void LB_Kernel_Casc_SP_27(  real omega,
           }
         }
 
-       (D.f[ DIR_P00  ])[ke ] = f_W-c2o27;
-       (D.f[ DIR_M00  ])[kw ] = f_E-c2o27;
-
-       (D.f[ DIR_0P0  ])[kn ] = f_S-c2o27;
-       (D.f[ DIR_0M0  ])[ks ] = f_N-c2o27;
-       (D.f[ DIR_00P  ])[kt ] = f_B-c2o27;
-       (D.f[ DIR_00M  ])[kb ] = f_T-c2o27;
-
-       (D.f[ DIR_PP0 ])[kne] = f_SW-c1o54;
-       (D.f[ DIR_MM0 ])[ksw] = f_NE-c1o54;
-       (D.f[ DIR_PM0 ])[kse] = f_NW-c1o54;
-       (D.f[ DIR_MP0 ])[knw] = f_SE-c1o54;
-       (D.f[ DIR_P0P ])[kte] = f_BW-c1o54;
-       (D.f[ DIR_M0M ])[kbw] = f_TE-c1o54;
-       (D.f[ DIR_P0M ])[kbe] = f_TW-c1o54;
-       (D.f[ DIR_M0P ])[ktw] = f_BE-c1o54;
-
-       (D.f[ DIR_0PP ])[ktn] = f_BS-c1o54;
-       (D.f[ DIR_0MM ])[kbs] = f_TN-c1o54;
-       (D.f[ DIR_0PM ])[kbn] = f_TS-c1o54;
-       (D.f[ DIR_0MP ])[kts] = f_BN-c1o54;
-
-       (D.f[ DIR_000])[k] = f_ZERO-c8o27;
-
-       (D.f[ DIR_PPP ])[ktne] = f_BSW-c1o216;
-       (D.f[ DIR_PMP ])[ktse] = f_BNW-c1o216;
-       (D.f[ DIR_PPM ])[kbne] = f_TSW-c1o216;
-       (D.f[ DIR_PMM ])[kbse] = f_TNW-c1o216;
-       (D.f[ DIR_MPP ])[ktnw] = f_BSE-c1o216;
-       (D.f[ DIR_MMP ])[ktsw] = f_BNE-c1o216;
-       (D.f[ DIR_MPM ])[kbnw] = f_TSE-c1o216;
-       (D.f[ DIR_MMM ])[kbsw] = f_TNE-c1o216;
+       (D.f[ dP00  ])[ke ] = f_W-c2o27;
+       (D.f[ dM00  ])[kw ] = f_E-c2o27;
+
+       (D.f[ d0P0  ])[kn ] = f_S-c2o27;
+       (D.f[ d0M0  ])[ks ] = f_N-c2o27;
+       (D.f[ d00P  ])[kt ] = f_B-c2o27;
+       (D.f[ d00M  ])[kb ] = f_T-c2o27;
+
+       (D.f[ dPP0 ])[kne] = f_SW-c1o54;
+       (D.f[ dMM0 ])[ksw] = f_NE-c1o54;
+       (D.f[ dPM0 ])[kse] = f_NW-c1o54;
+       (D.f[ dMP0 ])[knw] = f_SE-c1o54;
+       (D.f[ dP0P ])[kte] = f_BW-c1o54;
+       (D.f[ dM0M ])[kbw] = f_TE-c1o54;
+       (D.f[ dP0M ])[kbe] = f_TW-c1o54;
+       (D.f[ dM0P ])[ktw] = f_BE-c1o54;
+
+       (D.f[ d0PP ])[ktn] = f_BS-c1o54;
+       (D.f[ d0MM ])[kbs] = f_TN-c1o54;
+       (D.f[ d0PM ])[kbn] = f_TS-c1o54;
+       (D.f[ d0MP ])[kts] = f_BN-c1o54;
+
+       (D.f[ d000])[k] = f_ZERO-c8o27;
+
+       (D.f[ dPPP ])[ktne] = f_BSW-c1o216;
+       (D.f[ dPMP ])[ktse] = f_BNW-c1o216;
+       (D.f[ dPPM ])[kbne] = f_TSW-c1o216;
+       (D.f[ dPMM ])[kbse] = f_TNW-c1o216;
+       (D.f[ dMPP ])[ktnw] = f_BSE-c1o216;
+       (D.f[ dMMP ])[ktsw] = f_BNE-c1o216;
+       (D.f[ dMPM ])[kbnw] = f_TSE-c1o216;
+       (D.f[ dMMM ])[kbsw] = f_TNE-c1o216;
       }
      __syncthreads();
      }
@@ -4089,63 +4089,63 @@ __global__ void LB_Kernel_Casc27(real omega,
       Distributions27 D;
       if (EvenOrOdd==true)
       {
-         D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+         D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+         D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+         D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
       }
       else
       {
-         D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-         D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+         D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+         D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+         D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+         D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+         D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+         D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+         D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+         D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+         D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+         D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+         D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
       }
 
       ////////////////////////////////////////////////////////////////////////////////
@@ -4208,33 +4208,33 @@ __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[DIR_P00])[ke]+c2o27;
-      f_W    =  (D.f[DIR_M00])[kw]+c2o27;
-      f_N    =  (D.f[DIR_0P0])[kn]+c2o27;
-      f_S    =  (D.f[DIR_0M0])[ks]+c2o27;
-      f_T    =  (D.f[DIR_00P])[kt]+c2o27;
-      f_B    =  (D.f[DIR_00M])[kb]+c2o27;
-      f_NE   =  (D.f[DIR_PP0])[kne]+c1o54;
-      f_SW   =  (D.f[DIR_MM0])[ksw]+c1o54;
-      f_SE   =  (D.f[DIR_PM0])[kse]+c1o54;
-      f_NW   =  (D.f[DIR_MP0])[knw]+c1o54;
-      f_TE   =  (D.f[DIR_P0P])[kte]+c1o54;
-      f_BW   =  (D.f[DIR_M0M])[kbw]+c1o54;
-      f_BE   =  (D.f[DIR_P0M])[kbe]+c1o54;
-      f_TW   =  (D.f[DIR_M0P])[ktw]+c1o54;
-      f_TN   =  (D.f[DIR_0PP])[ktn]+c1o54;
-      f_BS   =  (D.f[DIR_0MM])[kbs]+c1o54;
-      f_BN   =  (D.f[DIR_0PM])[kbn]+c1o54;
-      f_TS   =  (D.f[DIR_0MP])[kts]+c1o54;
-      f_ZERO =  (D.f[DIR_000])[kzero]+c8o27;
-      f_TNE   = (D.f[DIR_PPP])[ktne]+c1o216;
-      f_TSW   = (D.f[DIR_MMP])[ktsw]+c1o216;
-      f_TSE   = (D.f[DIR_PMP])[ktse]+c1o216;
-      f_TNW   = (D.f[DIR_MPP])[ktnw]+c1o216;
-      f_BNE   = (D.f[DIR_PPM])[kbne]+c1o216;
-      f_BSW   = (D.f[DIR_MMM])[kbsw]+c1o216;
-      f_BSE   = (D.f[DIR_PMM])[kbse]+c1o216;
-      f_BNW   = (D.f[DIR_MPM])[kbnw]+c1o216;
+      f_E    =  (D.f[dP00])[ke]+c2o27;
+      f_W    =  (D.f[dM00])[kw]+c2o27;
+      f_N    =  (D.f[d0P0])[kn]+c2o27;
+      f_S    =  (D.f[d0M0])[ks]+c2o27;
+      f_T    =  (D.f[d00P])[kt]+c2o27;
+      f_B    =  (D.f[d00M])[kb]+c2o27;
+      f_NE   =  (D.f[dPP0])[kne]+c1o54;
+      f_SW   =  (D.f[dMM0])[ksw]+c1o54;
+      f_SE   =  (D.f[dPM0])[kse]+c1o54;
+      f_NW   =  (D.f[dMP0])[knw]+c1o54;
+      f_TE   =  (D.f[dP0P])[kte]+c1o54;
+      f_BW   =  (D.f[dM0M])[kbw]+c1o54;
+      f_BE   =  (D.f[dP0M])[kbe]+c1o54;
+      f_TW   =  (D.f[dM0P])[ktw]+c1o54;
+      f_TN   =  (D.f[d0PP])[ktn]+c1o54;
+      f_BS   =  (D.f[d0MM])[kbs]+c1o54;
+      f_BN   =  (D.f[d0PM])[kbn]+c1o54;
+      f_TS   =  (D.f[d0MP])[kts]+c1o54;
+      f_ZERO =  (D.f[d000])[kzero]+c8o27;
+      f_TNE   = (D.f[dPPP])[ktne]+c1o216;
+      f_TSW   = (D.f[dMMP])[ktsw]+c1o216;
+      f_TSE   = (D.f[dPMP])[ktse]+c1o216;
+      f_TNW   = (D.f[dMPP])[ktnw]+c1o216;
+      f_BNE   = (D.f[dPPM])[kbne]+c1o216;
+      f_BSW   = (D.f[dMMM])[kbsw]+c1o216;
+      f_BSE   = (D.f[dPMM])[kbse]+c1o216;
+      f_BNW   = (D.f[dMPM])[kbnw]+c1o216;
       ////////////////////////////////////////////////////////////////////////////////
 
       if( BC == GEO_FLUID || BC == GEO_VELO)
@@ -4673,38 +4673,38 @@ __global__ void LB_Kernel_Casc27(real omega,
          }
       }
 
-      (D.f[ DIR_P00  ])[ke ] = f_W-c2o27;
-      (D.f[ DIR_M00  ])[kw ] = f_E-c2o27;
-
-      (D.f[ DIR_0P0  ])[kn ] = f_S-c2o27;
-      (D.f[ DIR_0M0  ])[ks ] = f_N-c2o27;
-      (D.f[ DIR_00P  ])[kt ] = f_B-c2o27;
-      (D.f[ DIR_00M  ])[kb ] = f_T-c2o27;
-
-      (D.f[ DIR_PP0 ])[kne] = f_SW-c1o54;
-      (D.f[ DIR_MM0 ])[ksw] = f_NE-c1o54;
-      (D.f[ DIR_PM0 ])[kse] = f_NW-c1o54;
-      (D.f[ DIR_MP0 ])[knw] = f_SE-c1o54;
-      (D.f[ DIR_P0P ])[kte] = f_BW-c1o54;
-      (D.f[ DIR_M0M ])[kbw] = f_TE-c1o54;
-      (D.f[ DIR_P0M ])[kbe] = f_TW-c1o54;
-      (D.f[ DIR_M0P ])[ktw] = f_BE-c1o54;
-
-      (D.f[ DIR_0PP ])[ktn] = f_BS-c1o54;
-      (D.f[ DIR_0MM ])[kbs] = f_TN-c1o54;
-      (D.f[ DIR_0PM ])[kbn] = f_TS-c1o54;
-      (D.f[ DIR_0MP ])[kts] = f_BN-c1o54;
-
-      (D.f[ DIR_000])[k] = f_ZERO-c8o27;
-
-      (D.f[ DIR_PPP ])[ktne] = f_BSW-c1o216;
-      (D.f[ DIR_PMP ])[ktse] = f_BNW-c1o216;
-      (D.f[ DIR_PPM ])[kbne] = f_TSW-c1o216;
-      (D.f[ DIR_PMM ])[kbse] = f_TNW-c1o216;
-      (D.f[ DIR_MPP ])[ktnw] = f_BSE-c1o216;
-      (D.f[ DIR_MMP ])[ktsw] = f_BNE-c1o216;
-      (D.f[ DIR_MPM ])[kbnw] = f_TSE-c1o216;
-      (D.f[ DIR_MMM ])[kbsw] = f_TNE-c1o216;
+      (D.f[ dP00  ])[ke ] = f_W-c2o27;
+      (D.f[ dM00  ])[kw ] = f_E-c2o27;
+
+      (D.f[ d0P0  ])[kn ] = f_S-c2o27;
+      (D.f[ d0M0  ])[ks ] = f_N-c2o27;
+      (D.f[ d00P  ])[kt ] = f_B-c2o27;
+      (D.f[ d00M  ])[kb ] = f_T-c2o27;
+
+      (D.f[ dPP0 ])[kne] = f_SW-c1o54;
+      (D.f[ dMM0 ])[ksw] = f_NE-c1o54;
+      (D.f[ dPM0 ])[kse] = f_NW-c1o54;
+      (D.f[ dMP0 ])[knw] = f_SE-c1o54;
+      (D.f[ dP0P ])[kte] = f_BW-c1o54;
+      (D.f[ dM0M ])[kbw] = f_TE-c1o54;
+      (D.f[ dP0M ])[kbe] = f_TW-c1o54;
+      (D.f[ dM0P ])[ktw] = f_BE-c1o54;
+
+      (D.f[ d0PP ])[ktn] = f_BS-c1o54;
+      (D.f[ d0MM ])[kbs] = f_TN-c1o54;
+      (D.f[ d0PM ])[kbn] = f_TS-c1o54;
+      (D.f[ d0MP ])[kts] = f_BN-c1o54;
+
+      (D.f[ d000])[k] = f_ZERO-c8o27;
+
+      (D.f[ dPPP ])[ktne] = f_BSW-c1o216;
+      (D.f[ dPMP ])[ktse] = f_BNW-c1o216;
+      (D.f[ dPPM ])[kbne] = f_TSW-c1o216;
+      (D.f[ dPMM ])[kbse] = f_TNW-c1o216;
+      (D.f[ dMPP ])[ktnw] = f_BSE-c1o216;
+      (D.f[ dMMP ])[ktsw] = f_BNE-c1o216;
+      (D.f[ dMPM ])[kbnw] = f_TSE-c1o216;
+      (D.f[ dMMM ])[kbsw] = f_TNE-c1o216;
    }
    __syncthreads();
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp b/src/gpu/core/GPU/CudaMemoryManager.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
rename to src/gpu/core/GPU/CudaMemoryManager.cpp
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h b/src/gpu/core/GPU/CudaMemoryManager.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
rename to src/gpu/core/GPU/CudaMemoryManager.h
index c8c10eab1094e25dfafa4bc2fabeaa79885facad..8b3ec7fdfd3e7e6a155eecb84832833ae72636e9 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
+++ b/src/gpu/core/GPU/CudaMemoryManager.h
@@ -4,8 +4,7 @@
 #include <vector>
 #include <string>
 #include <memory>
-#include "PointerDefinitions.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/PointerDefinitions.h>
 
 #include "LBM/LB.h"
 #include "lbm/constants/D3Q27.h"
@@ -31,7 +30,7 @@ class Probe;
 class VelocitySetter;
 class PrecursorWriter;
 
-class VIRTUALFLUIDS_GPU_EXPORT CudaMemoryManager
+class CudaMemoryManager
 {
 public:
     CudaMemoryManager(std::shared_ptr<Parameter> parameter);
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu b/src/gpu/core/GPU/Cumulant27.cu
similarity index 84%
rename from src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu
rename to src/gpu/core/GPU/Cumulant27.cu
index 59b24df1061af16e79ad35eeceb949e6326407fd..b496ce6252de5b325a775df19fba4703432052c0 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu
+++ b/src/gpu/core/GPU/Cumulant27.cu
@@ -48,63 +48,63 @@ __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -137,33 +137,33 @@ __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[DIR_P00])[k  ];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw ];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k  ];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k  ];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k  ];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw ];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k  ];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k  ];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks ];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw ];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb ];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -894,33 +894,33 @@ __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[ DIR_00P   ])[k   ] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[ DIR_000])[k   ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[ dP00   ])[k   ] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[ dM00   ])[kw  ] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[ d0P0   ])[k   ] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[ d0M0   ])[ks  ] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[ d00P   ])[k   ] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[ d00M   ])[kb  ] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[ dPP0  ])[k   ] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[ dMM0  ])[ksw ] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[ dPM0  ])[ks  ] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[ dMP0  ])[kw  ] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[ dP0P  ])[k   ] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[ dM0M  ])[kbw ] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[ dP0M  ])[kb  ] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[ dM0P  ])[kw  ] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[ d0PP  ])[k   ] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[ d0MM  ])[kbs ] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[ d0PM  ])[kb  ] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[ d0MP  ])[ks  ] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[ d000])[k   ] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[ dPPP ])[k   ] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[ dPMP ])[ks  ] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[ dPPM ])[kb  ] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[ dPMM ])[kbs ] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[ dMPP ])[kw  ] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[ dMMP ])[ksw ] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[ dMPM ])[kbw ] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[ dMMM ])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -1000,63 +1000,63 @@ __global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -1089,33 +1089,33 @@ __global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw ];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k  ];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k  ];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k  ];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw ];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k  ];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k  ];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks ];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw ];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb ];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//slow
 			//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -1933,33 +1933,33 @@ __global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[ DIR_00P   ])[k   ] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[ DIR_000])[k   ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[ dP00   ])[k   ] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[ dM00   ])[kw  ] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[ d0P0   ])[k   ] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[ d0M0   ])[ks  ] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[ d00P   ])[k   ] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[ d00M   ])[kb  ] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[ dPP0  ])[k   ] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[ dMM0  ])[ksw ] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[ dPM0  ])[ks  ] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[ dMP0  ])[kw  ] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[ dP0P  ])[k   ] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[ dM0M  ])[kbw ] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[ dP0M  ])[kb  ] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[ dM0P  ])[kw  ] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[ d0PP  ])[k   ] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[ d0MM  ])[kbs ] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[ d0PM  ])[kb  ] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[ d0MP  ])[ks  ] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[ d000])[k   ] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[ dPPP ])[k   ] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[ dPMP ])[ks  ] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[ dPPM ])[kb  ] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[ dPMM ])[kbs ] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[ dMPP ])[kw  ] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[ dMMP ])[ksw ] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[ dMPM ])[kbw ] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[ dMMM ])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -2041,63 +2041,63 @@ __global__ void LB_Kernel_Kum_1h_SP_27(  real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -2158,33 +2158,33 @@ __global__ void LB_Kernel_Kum_1h_SP_27(  real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw ];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k  ];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k  ];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k  ];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw ];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k  ];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k  ];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks ];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw ];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb ];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//Ship
 			real coord0X = 281.125f;//7.5f;
@@ -3160,33 +3160,33 @@ __global__ void LB_Kernel_Kum_1h_SP_27(  real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[ DIR_00P   ])[k   ] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[ DIR_000])[k   ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[ dP00   ])[k   ] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[ dM00   ])[kw  ] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[ d0P0   ])[k   ] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[ d0M0   ])[ks  ] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[ d00P   ])[k   ] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[ d00M   ])[kb  ] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[ dPP0  ])[k   ] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[ dMM0  ])[ksw ] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[ dPM0  ])[ks  ] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[ dMP0  ])[kw  ] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[ dP0P  ])[k   ] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[ dM0M  ])[kbw ] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[ dP0M  ])[kb  ] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[ dM0P  ])[kw  ] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[ d0PP  ])[k   ] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[ d0MM  ])[kbs ] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[ d0PM  ])[kb  ] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[ d0MP  ])[ks  ] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[ d000])[k   ] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[ dPPP ])[k   ] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[ dPMP ])[ks  ] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[ dPPM ])[kb  ] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[ dPMM ])[kbs ] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[ dMPP ])[kw  ] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[ dMMP ])[ksw ] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[ dMPM ])[kbw ] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[ dMMM ])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -3263,63 +3263,63 @@ __global__ void LB_Kernel_Kum_New_SP_27(     real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -3380,33 +3380,33 @@ __global__ void LB_Kernel_Kum_New_SP_27(     real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw ];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k  ];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k  ];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k  ];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw ];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks ];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb ];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw ];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k  ];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k  ];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks ];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k  ];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k  ];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks ];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw ];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb ];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//slow
 			//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -4432,33 +4432,33 @@ __global__ void LB_Kernel_Kum_New_SP_27(     real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[ DIR_00P   ])[k   ] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[ DIR_000])[k   ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[ dP00   ])[k   ] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[ dM00   ])[kw  ] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[ d0P0   ])[k   ] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[ d0M0   ])[ks  ] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[ d00P   ])[k   ] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[ d00M   ])[kb  ] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[ dPP0  ])[k   ] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[ dMM0  ])[ksw ] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[ dPM0  ])[ks  ] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[ dMP0  ])[kw  ] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[ dP0P  ])[k   ] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[ dM0M  ])[kbw ] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[ dP0M  ])[kb  ] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[ dM0P  ])[kw  ] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[ d0PP  ])[k   ] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[ d0MM  ])[kbs ] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[ d0PM  ])[kb  ] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[ d0MP  ])[ks  ] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[ d000])[k   ] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[ dPPP ])[k   ] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[ dPMP ])[ks  ] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[ dPPM ])[kb  ] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[ dPMM ])[kbs ] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[ dMPP ])[kw  ] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[ dMMP ])[ksw ] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[ dMPM ])[kbw ] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[ dMMM ])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -4535,63 +4535,63 @@ __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -4624,33 +4624,33 @@ __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 			unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real f_E     = (D.f[DIR_P00])[ke   ];// +  c2over27 ;
-			real f_W     = (D.f[DIR_M00])[kw   ];// +  c2over27 ;
-			real f_N     = (D.f[DIR_0P0])[kn   ];// +  c2over27 ;
-			real f_S     = (D.f[DIR_0M0])[ks   ];// +  c2over27 ;
-			real f_T     = (D.f[DIR_00P])[kt   ];// +  c2over27 ;
-			real f_B     = (D.f[DIR_00M])[kb   ];// +  c2over27 ;
-			real f_NE    = (D.f[DIR_PP0])[kne  ];// +  c1over54 ;
-			real f_SW    = (D.f[DIR_MM0])[ksw  ];// +  c1over54 ;
-			real f_SE    = (D.f[DIR_PM0])[kse  ];// +  c1over54 ;
-			real f_NW    = (D.f[DIR_MP0])[knw  ];// +  c1over54 ;
-			real f_TE    = (D.f[DIR_P0P])[kte  ];// +  c1over54 ;
-			real f_BW    = (D.f[DIR_M0M])[kbw  ];// +  c1over54 ;
-			real f_BE    = (D.f[DIR_P0M])[kbe  ];// +  c1over54 ;
-			real f_TW    = (D.f[DIR_M0P])[ktw  ];// +  c1over54 ;
-			real f_TN    = (D.f[DIR_0PP])[ktn  ];// +  c1over54 ;
-			real f_BS    = (D.f[DIR_0MM])[kbs  ];// +  c1over54 ;
-			real f_BN    = (D.f[DIR_0PM])[kbn  ];// +  c1over54 ;
-			real f_TS    = (D.f[DIR_0MP])[kts  ];// +  c1over54 ;
-			real f_R     = (D.f[DIR_000])[kzero];// +  c8over27 ;
-			real f_TNE   = (D.f[DIR_PPP])[ktne ];// +  c1over216;
-			real f_TSW   = (D.f[DIR_MMP])[ktsw ];// +  c1over216;
-			real f_TSE   = (D.f[DIR_PMP])[ktse ];// +  c1over216;
-			real f_TNW   = (D.f[DIR_MPP])[ktnw ];// +  c1over216;
-			real f_BNE   = (D.f[DIR_PPM])[kbne ];// +  c1over216;
-			real f_BSW   = (D.f[DIR_MMM])[kbsw ];// +  c1over216;
-			real f_BSE   = (D.f[DIR_PMM])[kbse ];// +  c1over216;
-			real f_BNW   = (D.f[DIR_MPM])[kbnw ];// +  c1over216;
+			real f_E     = (D.f[dP00])[ke   ];// +  c2over27 ;
+			real f_W     = (D.f[dM00])[kw   ];// +  c2over27 ;
+			real f_N     = (D.f[d0P0])[kn   ];// +  c2over27 ;
+			real f_S     = (D.f[d0M0])[ks   ];// +  c2over27 ;
+			real f_T     = (D.f[d00P])[kt   ];// +  c2over27 ;
+			real f_B     = (D.f[d00M])[kb   ];// +  c2over27 ;
+			real f_NE    = (D.f[dPP0])[kne  ];// +  c1over54 ;
+			real f_SW    = (D.f[dMM0])[ksw  ];// +  c1over54 ;
+			real f_SE    = (D.f[dPM0])[kse  ];// +  c1over54 ;
+			real f_NW    = (D.f[dMP0])[knw  ];// +  c1over54 ;
+			real f_TE    = (D.f[dP0P])[kte  ];// +  c1over54 ;
+			real f_BW    = (D.f[dM0M])[kbw  ];// +  c1over54 ;
+			real f_BE    = (D.f[dP0M])[kbe  ];// +  c1over54 ;
+			real f_TW    = (D.f[dM0P])[ktw  ];// +  c1over54 ;
+			real f_TN    = (D.f[d0PP])[ktn  ];// +  c1over54 ;
+			real f_BS    = (D.f[d0MM])[kbs  ];// +  c1over54 ;
+			real f_BN    = (D.f[d0PM])[kbn  ];// +  c1over54 ;
+			real f_TS    = (D.f[d0MP])[kts  ];// +  c1over54 ;
+			real f_R     = (D.f[d000])[kzero];// +  c8over27 ;
+			real f_TNE   = (D.f[dPPP])[ktne ];// +  c1over216;
+			real f_TSW   = (D.f[dMMP])[ktsw ];// +  c1over216;
+			real f_TSE   = (D.f[dPMP])[ktse ];// +  c1over216;
+			real f_TNW   = (D.f[dMPP])[ktnw ];// +  c1over216;
+			real f_BNE   = (D.f[dPPM])[kbne ];// +  c1over216;
+			real f_BSW   = (D.f[dMMM])[kbsw ];// +  c1over216;
+			real f_BSE   = (D.f[dPMM])[kbse ];// +  c1over216;
+			real f_BNW   = (D.f[dMPM])[kbnw ];// +  c1over216;
 			////////////////////////////////////////////////////////////////////////////////////
 			real fx = c0o1;
 			real fy = c0o1;
@@ -5372,33 +5372,33 @@ __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
-			(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
-			(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;
-			(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;
-			(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;
-			(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;
-			(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;
-			(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;
-			(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;
-			(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;
-			(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;
-			(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;
-			(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;
-			(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;
-			(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;
-			(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;
-			(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;
-			(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;
-			(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;
-			(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;
-			(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;
-			(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;
-			(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;
-			(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;
-			(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;
-			(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;
-			(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;
+			(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
+			(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
+			(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;
+			(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;
+			(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;
+			(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;
+			(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;
+			(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;
+			(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;
+			(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;
+			(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;
+			(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;
+			(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;
+			(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;
+			(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;
+			(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;
+			(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;
+			(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;
+			(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;
+			(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;
+			(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;
+			(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;
+			(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;
+			(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;
+			(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;
+			(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;
+			(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -5478,63 +5478,63 @@ __global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -5568,33 +5568,33 @@ __global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k   ];
-			real mfabb = (D.f[DIR_M00])[kw  ];
-			real mfbcb = (D.f[DIR_0P0])[k   ];
-			real mfbab = (D.f[DIR_0M0])[ks  ];
-			real mfbbc = (D.f[DIR_00P])[k   ];
-			real mfbba = (D.f[DIR_00M])[kb  ];
-			real mfccb = (D.f[DIR_PP0])[k   ];
-			real mfaab = (D.f[DIR_MM0])[ksw ];
-			real mfcab = (D.f[DIR_PM0])[ks  ];
-			real mfacb = (D.f[DIR_MP0])[kw  ];
-			real mfcbc = (D.f[DIR_P0P])[k   ];
-			real mfaba = (D.f[DIR_M0M])[kbw ];
-			real mfcba = (D.f[DIR_P0M])[kb  ];
-			real mfabc = (D.f[DIR_M0P])[kw  ];
-			real mfbcc = (D.f[DIR_0PP])[k   ];
-			real mfbaa = (D.f[DIR_0MM])[kbs ];
-			real mfbca = (D.f[DIR_0PM])[kb  ];
-			real mfbac = (D.f[DIR_0MP])[ks  ];
-			real mfbbb = (D.f[DIR_000])[k   ];
-			real mfccc = (D.f[DIR_PPP])[k   ];
-			real mfaac = (D.f[DIR_MMP])[ksw ];
-			real mfcac = (D.f[DIR_PMP])[ks  ];
-			real mfacc = (D.f[DIR_MPP])[kw  ];
-			real mfcca = (D.f[DIR_PPM])[kb  ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs ];
-			real mfaca = (D.f[DIR_MPM])[kbw ];
+			real mfcbb = (D.f[dP00])[k   ];
+			real mfabb = (D.f[dM00])[kw  ];
+			real mfbcb = (D.f[d0P0])[k   ];
+			real mfbab = (D.f[d0M0])[ks  ];
+			real mfbbc = (D.f[d00P])[k   ];
+			real mfbba = (D.f[d00M])[kb  ];
+			real mfccb = (D.f[dPP0])[k   ];
+			real mfaab = (D.f[dMM0])[ksw ];
+			real mfcab = (D.f[dPM0])[ks  ];
+			real mfacb = (D.f[dMP0])[kw  ];
+			real mfcbc = (D.f[dP0P])[k   ];
+			real mfaba = (D.f[dM0M])[kbw ];
+			real mfcba = (D.f[dP0M])[kb  ];
+			real mfabc = (D.f[dM0P])[kw  ];
+			real mfbcc = (D.f[d0PP])[k   ];
+			real mfbaa = (D.f[d0MM])[kbs ];
+			real mfbca = (D.f[d0PM])[kb  ];
+			real mfbac = (D.f[d0MP])[ks  ];
+			real mfbbb = (D.f[d000])[k   ];
+			real mfccc = (D.f[dPPP])[k   ];
+			real mfaac = (D.f[dMMP])[ksw ];
+			real mfcac = (D.f[dPMP])[ks  ];
+			real mfacc = (D.f[dMPP])[kw  ];
+			real mfcca = (D.f[dPPM])[kb  ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs ];
+			real mfaca = (D.f[dMPM])[kbw ];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -6349,33 +6349,33 @@ __global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27(
 					((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
 			mfbbb += drho - drhoPost;
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k   ] = mfabb;                                                                   
-			(D.f[DIR_M00])[kw  ] = mfcbb;                                                                 
-			(D.f[DIR_0P0])[k   ] = mfbab;
-			(D.f[DIR_0M0])[ks  ] = mfbcb;
-			(D.f[DIR_00P])[k   ] = mfbba;
-			(D.f[DIR_00M])[kb  ] = mfbbc;
-			(D.f[DIR_PP0])[k   ] = mfaab;
-			(D.f[DIR_MM0])[ksw ] = mfccb;
-			(D.f[DIR_PM0])[ks  ] = mfacb;
-			(D.f[DIR_MP0])[kw  ] = mfcab;
-			(D.f[DIR_P0P])[k   ] = mfaba;
-			(D.f[DIR_M0M])[kbw ] = mfcbc;
-			(D.f[DIR_P0M])[kb  ] = mfabc;
-			(D.f[DIR_M0P])[kw  ] = mfcba;
-			(D.f[DIR_0PP])[k   ] = mfbaa;
-			(D.f[DIR_0MM])[kbs ] = mfbcc;
-			(D.f[DIR_0PM])[kb  ] = mfbac;
-			(D.f[DIR_0MP])[ks  ] = mfbca;
-			(D.f[DIR_000])[k   ] = mfbbb;
-			(D.f[DIR_PPP])[k   ] = mfaaa;
-			(D.f[DIR_PMP])[ks  ] = mfaca;
-			(D.f[DIR_PPM])[kb  ] = mfaac;
-			(D.f[DIR_PMM])[kbs ] = mfacc;
-			(D.f[DIR_MPP])[kw  ] = mfcaa;
-			(D.f[DIR_MMP])[ksw ] = mfcca;
-			(D.f[DIR_MPM])[kbw ] = mfcac;
-			(D.f[DIR_MMM])[kbsw] = mfccc;
+			(D.f[dP00])[k   ] = mfabb;                                                                   
+			(D.f[dM00])[kw  ] = mfcbb;                                                                 
+			(D.f[d0P0])[k   ] = mfbab;
+			(D.f[d0M0])[ks  ] = mfbcb;
+			(D.f[d00P])[k   ] = mfbba;
+			(D.f[d00M])[kb  ] = mfbbc;
+			(D.f[dPP0])[k   ] = mfaab;
+			(D.f[dMM0])[ksw ] = mfccb;
+			(D.f[dPM0])[ks  ] = mfacb;
+			(D.f[dMP0])[kw  ] = mfcab;
+			(D.f[dP0P])[k   ] = mfaba;
+			(D.f[dM0M])[kbw ] = mfcbc;
+			(D.f[dP0M])[kb  ] = mfabc;
+			(D.f[dM0P])[kw  ] = mfcba;
+			(D.f[d0PP])[k   ] = mfbaa;
+			(D.f[d0MM])[kbs ] = mfbcc;
+			(D.f[d0PM])[kb  ] = mfbac;
+			(D.f[d0MP])[ks  ] = mfbca;
+			(D.f[d000])[k   ] = mfbbb;
+			(D.f[dPPP])[k   ] = mfaaa;
+			(D.f[dPMP])[ks  ] = mfaca;
+			(D.f[dPPM])[kb  ] = mfaac;
+			(D.f[dPMM])[kbs ] = mfacc;
+			(D.f[dMPP])[kw  ] = mfcaa;
+			(D.f[dMMP])[ksw ] = mfcca;
+			(D.f[dMPM])[kbw ] = mfcac;
+			(D.f[dMMM])[kbsw] = mfccc;
 		}
 	}
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu b/src/gpu/core/GPU/Cumulant27chim.cu
similarity index 80%
rename from src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu
rename to src/gpu/core/GPU/Cumulant27chim.cu
index 11cbb45c565e1346a9664db8a6c6164d8031aa3e..b97aa68b1cb0ae40ed1dd20543501965ca2d5fc0 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu
+++ b/src/gpu/core/GPU/Cumulant27chim.cu
@@ -78,63 +78,63 @@ __global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_SP_27(
             Distributions27 D;
             if (EvenOrOdd == true)
             {
-                D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-                D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-                D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+                D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+                D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+                D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+                D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+                D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+                D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+                D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+                D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+                D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+                D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+                D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+                D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+                D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+                D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+                D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+                D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+                D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+                D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+                D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+                D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+                D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+                D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+                D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+                D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+                D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+                D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+                D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
             }
             else
             {
-                D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-                D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-                D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+                D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+                D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+                D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+                D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+                D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+                D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+                D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+                D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+                D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+                D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+                D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+                D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+                D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+                D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+                D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+                D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+                D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+                D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+                D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+                D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+                D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+                D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+                D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+                D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+                D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+                D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+                D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
             }
 
             ////////////////////////////////////////////////////////////////////////////////
@@ -170,33 +170,33 @@ __global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_SP_27(
 
 
             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-            real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-            real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-            real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-            real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-            real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-            real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-            real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-            real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-            real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-            real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-            real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-            real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-            real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-            real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-            real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-            real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-            real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-            real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-            real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-            real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-            real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-            real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-            real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-            real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-            real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-            real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+            real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+            real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+            real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+            real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+            real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+            real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+            real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+            real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+            real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+            real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+            real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+            real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+            real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+            real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+            real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+            real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+            real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+            real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+            real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+            real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+            real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+            real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+            real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+            real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+            real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+            real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+            real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
                                                ////////////////////////////////////////////////////////////////////////////////////
             real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
                 (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -886,33 +886,33 @@ __global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_SP_27(
             //		((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
             //mfbbb += drho - drhoPost;
             ////////////////////////////////////////////////////////////////////////////////////
-            (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-            (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-            (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-            (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-            (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-            (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-            (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-            (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-            (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-            (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-            (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-            (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-            (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-            (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-            (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-            (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-            (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-            (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-            (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-            (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-            (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-            (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-            (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-            (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-            (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-            (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-            (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+            (D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+            (D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+            (D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+            (D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+            (D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+            (D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+            (D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+            (D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+            (D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+            (D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+            (D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+            (D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+            (D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+            (D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+            (D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+            (D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+            (D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+            (D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+            (D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+            (D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+            (D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+            (D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+            (D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+            (D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+            (D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+            (D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+            (D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
                                         ////////////////////////////////////////////////////////////////////////////////////
         }
     }
@@ -993,63 +993,63 @@ __global__ void Cumulant_One_preconditioned_chim_Comp_SP_27(
             Distributions27 D;
             if (EvenOrOdd == true)
             {
-                D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-                D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-                D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+                D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+                D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+                D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+                D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+                D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+                D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+                D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+                D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+                D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+                D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+                D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+                D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+                D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+                D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+                D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+                D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+                D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+                D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+                D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+                D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+                D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+                D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+                D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+                D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+                D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+                D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+                D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
             }
             else
             {
-                D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-                D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-                D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+                D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+                D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+                D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+                D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+                D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+                D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+                D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+                D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+                D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+                D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+                D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+                D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+                D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+                D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+                D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+                D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+                D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+                D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+                D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+                D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+                D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+                D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+                D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+                D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+                D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+                D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+                D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
             }
 
             ////////////////////////////////////////////////////////////////////////////////
@@ -1085,33 +1085,33 @@ __global__ void Cumulant_One_preconditioned_chim_Comp_SP_27(
 
 
             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-            real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-            real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-            real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-            real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-            real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-            real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-            real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-            real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-            real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-            real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-            real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-            real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-            real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-            real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-            real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-            real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-            real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-            real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-            real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-            real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-            real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-            real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-            real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-            real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-            real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-            real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+            real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+            real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+            real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+            real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+            real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+            real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+            real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+            real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+            real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+            real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+            real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+            real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+            real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+            real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+            real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+            real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+            real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+            real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+            real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+            real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+            real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+            real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+            real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+            real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+            real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+            real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+            real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
                                                ////////////////////////////////////////////////////////////////////////////////////
             real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
                 (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1682,33 +1682,33 @@ __global__ void Cumulant_One_preconditioned_chim_Comp_SP_27(
                     ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
             mfbbb += drho - drhoPost;
             ////////////////////////////////////////////////////////////////////////////////////
-            (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-            (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-            (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-            (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-            (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-            (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-            (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-            (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-            (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-            (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-            (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-            (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-            (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-            (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-            (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-            (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-            (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-            (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-            (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-            (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-            (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-            (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-            (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-            (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-            (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-            (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-            (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+            (D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+            (D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+            (D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+            (D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+            (D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+            (D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+            (D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+            (D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+            (D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+            (D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+            (D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+            (D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+            (D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+            (D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+            (D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+            (D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+            (D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+            (D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+            (D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+            (D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+            (D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+            (D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+            (D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+            (D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+            (D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+            (D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+            (D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
             ////////////////////////////////////////////////////////////////////////////////////
         }
     }
@@ -1789,63 +1789,63 @@ __global__ void Cumulant_One_chim_Comp_SP_27(
             Distributions27 D;
             if (EvenOrOdd == true)
             {
-                D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-                D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-                D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+                D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+                D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+                D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+                D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+                D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+                D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+                D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+                D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+                D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+                D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+                D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+                D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+                D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+                D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+                D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+                D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+                D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+                D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+                D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+                D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+                D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+                D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+                D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+                D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+                D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+                D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+                D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
             }
             else
             {
-                D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-                D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-                D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+                D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+                D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+                D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+                D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+                D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+                D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+                D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+                D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+                D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+                D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+                D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+                D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+                D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+                D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+                D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+                D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+                D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+                D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+                D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+                D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+                D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+                D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+                D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+                D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+                D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+                D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+                D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
             }
             ////////////////////////////////////////////////////////////////////////////////
             //index
@@ -1857,33 +1857,33 @@ __global__ void Cumulant_One_chim_Comp_SP_27(
             unsigned int kbs = neighborZ[ks];
             unsigned int kbsw = neighborZ[ksw];
             ////////////////////////////////////////////////////////////////////////////////////
-            real mfcbb = (D.f[DIR_P00])[k   ];
-            real mfabb = (D.f[DIR_M00])[kw  ];
-            real mfbcb = (D.f[DIR_0P0])[k   ];
-            real mfbab = (D.f[DIR_0M0])[ks  ];
-            real mfbbc = (D.f[DIR_00P])[k   ];
-            real mfbba = (D.f[DIR_00M])[kb  ];
-            real mfccb = (D.f[DIR_PP0])[k   ];
-            real mfaab = (D.f[DIR_MM0])[ksw ];
-            real mfcab = (D.f[DIR_PM0])[ks  ];
-            real mfacb = (D.f[DIR_MP0])[kw  ];
-            real mfcbc = (D.f[DIR_P0P])[k   ];
-            real mfaba = (D.f[DIR_M0M])[kbw ];
-            real mfcba = (D.f[DIR_P0M])[kb  ];
-            real mfabc = (D.f[DIR_M0P])[kw  ];
-            real mfbcc = (D.f[DIR_0PP])[k   ];
-            real mfbaa = (D.f[DIR_0MM])[kbs ];
-            real mfbca = (D.f[DIR_0PM])[kb  ];
-            real mfbac = (D.f[DIR_0MP])[ks  ];
-            real mfbbb = (D.f[DIR_000])[k   ];
-            real mfccc = (D.f[DIR_PPP])[k   ];
-            real mfaac = (D.f[DIR_MMP])[ksw ];
-            real mfcac = (D.f[DIR_PMP])[ks  ];
-            real mfacc = (D.f[DIR_MPP])[kw  ];
-            real mfcca = (D.f[DIR_PPM])[kb  ];
-            real mfaaa = (D.f[DIR_MMM])[kbsw];
-            real mfcaa = (D.f[DIR_PMM])[kbs ];
-            real mfaca = (D.f[DIR_MPM])[kbw ];
+            real mfcbb = (D.f[dP00])[k   ];
+            real mfabb = (D.f[dM00])[kw  ];
+            real mfbcb = (D.f[d0P0])[k   ];
+            real mfbab = (D.f[d0M0])[ks  ];
+            real mfbbc = (D.f[d00P])[k   ];
+            real mfbba = (D.f[d00M])[kb  ];
+            real mfccb = (D.f[dPP0])[k   ];
+            real mfaab = (D.f[dMM0])[ksw ];
+            real mfcab = (D.f[dPM0])[ks  ];
+            real mfacb = (D.f[dMP0])[kw  ];
+            real mfcbc = (D.f[dP0P])[k   ];
+            real mfaba = (D.f[dM0M])[kbw ];
+            real mfcba = (D.f[dP0M])[kb  ];
+            real mfabc = (D.f[dM0P])[kw  ];
+            real mfbcc = (D.f[d0PP])[k   ];
+            real mfbaa = (D.f[d0MM])[kbs ];
+            real mfbca = (D.f[d0PM])[kb  ];
+            real mfbac = (D.f[d0MP])[ks  ];
+            real mfbbb = (D.f[d000])[k   ];
+            real mfccc = (D.f[dPPP])[k   ];
+            real mfaac = (D.f[dMMP])[ksw ];
+            real mfcac = (D.f[dPMP])[ks  ];
+            real mfacc = (D.f[dMPP])[kw  ];
+            real mfcca = (D.f[dPPM])[kb  ];
+            real mfaaa = (D.f[dMMM])[kbsw];
+            real mfcaa = (D.f[dPMM])[kbs ];
+            real mfaca = (D.f[dMPM])[kbw ];
             ////////////////////////////////////////////////////////////////////////////////////
             real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
                 (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -2204,33 +2204,33 @@ __global__ void Cumulant_One_chim_Comp_SP_27(
                     ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
             mfbbb += drho - drhoPost;
             ////////////////////////////////////////////////////////////////////////////////////
-            (D.f[DIR_P00])[k   ] = mfabb;                                                                   
-            (D.f[DIR_M00])[kw  ] = mfcbb;                                                                 
-            (D.f[DIR_0P0])[k   ] = mfbab;
-            (D.f[DIR_0M0])[ks  ] = mfbcb;
-            (D.f[DIR_00P])[k   ] = mfbba;
-            (D.f[DIR_00M])[kb  ] = mfbbc;
-            (D.f[DIR_PP0])[k   ] = mfaab;
-            (D.f[DIR_MM0])[ksw ] = mfccb;
-            (D.f[DIR_PM0])[ks  ] = mfacb;
-            (D.f[DIR_MP0])[kw  ] = mfcab;
-            (D.f[DIR_P0P])[k   ] = mfaba;
-            (D.f[DIR_M0M])[kbw ] = mfcbc;
-            (D.f[DIR_P0M])[kb  ] = mfabc;
-            (D.f[DIR_M0P])[kw  ] = mfcba;
-            (D.f[DIR_0PP])[k   ] = mfbaa;
-            (D.f[DIR_0MM])[kbs ] = mfbcc;
-            (D.f[DIR_0PM])[kb  ] = mfbac;
-            (D.f[DIR_0MP])[ks  ] = mfbca;
-            (D.f[DIR_000])[k   ] = mfbbb;
-            (D.f[DIR_PPP])[k   ] = mfaaa;
-            (D.f[DIR_PMP])[ks  ] = mfaca;
-            (D.f[DIR_PPM])[kb  ] = mfaac;
-            (D.f[DIR_PMM])[kbs ] = mfacc;
-            (D.f[DIR_MPP])[kw  ] = mfcaa;
-            (D.f[DIR_MMP])[ksw ] = mfcca;
-            (D.f[DIR_MPM])[kbw ] = mfcac;
-            (D.f[DIR_MMM])[kbsw] = mfccc;
+            (D.f[dP00])[k   ] = mfabb;                                                                   
+            (D.f[dM00])[kw  ] = mfcbb;                                                                 
+            (D.f[d0P0])[k   ] = mfbab;
+            (D.f[d0M0])[ks  ] = mfbcb;
+            (D.f[d00P])[k   ] = mfbba;
+            (D.f[d00M])[kb  ] = mfbbc;
+            (D.f[dPP0])[k   ] = mfaab;
+            (D.f[dMM0])[ksw ] = mfccb;
+            (D.f[dPM0])[ks  ] = mfacb;
+            (D.f[dMP0])[kw  ] = mfcab;
+            (D.f[dP0P])[k   ] = mfaba;
+            (D.f[dM0M])[kbw ] = mfcbc;
+            (D.f[dP0M])[kb  ] = mfabc;
+            (D.f[dM0P])[kw  ] = mfcba;
+            (D.f[d0PP])[k   ] = mfbaa;
+            (D.f[d0MM])[kbs ] = mfbcc;
+            (D.f[d0PM])[kb  ] = mfbac;
+            (D.f[d0MP])[ks  ] = mfbca;
+            (D.f[d000])[k   ] = mfbbb;
+            (D.f[dPPP])[k   ] = mfaaa;
+            (D.f[dPMP])[ks  ] = mfaca;
+            (D.f[dPPM])[kb  ] = mfaac;
+            (D.f[dPMM])[kbs ] = mfacc;
+            (D.f[dMPP])[kw  ] = mfcaa;
+            (D.f[dMMP])[ksw ] = mfcca;
+            (D.f[dMPM])[kbw ] = mfcac;
+            (D.f[dMMM])[kbsw] = mfccc;
         }
     }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu b/src/gpu/core/GPU/Cumulant_F3_27.cu
similarity index 85%
rename from src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu
rename to src/gpu/core/GPU/Cumulant_F3_27.cu
index 9e0275e7be38b8b56cf71cfa0b8299dc1b49106c..c76103aeb4249fcb449ceb25d6cd6b2156170fe9 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu
+++ b/src/gpu/core/GPU/Cumulant_F3_27.cu
@@ -54,83 +54,83 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			Distributions6 G;
 			if (EvenOrOdd == true)
 			{
-				G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodes];
-				G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodes];
-				G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodes];
-				G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodes];
-				G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodes];
-				G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodes];
+				G.g[dP00] = &G6[dP00 * numberOfLBnodes];
+				G.g[dM00] = &G6[dM00 * numberOfLBnodes];
+				G.g[d0P0] = &G6[d0P0 * numberOfLBnodes];
+				G.g[d0M0] = &G6[d0M0 * numberOfLBnodes];
+				G.g[d00P] = &G6[d00P * numberOfLBnodes];
+				G.g[d00M] = &G6[d00M * numberOfLBnodes];
 			}
 			else
 			{
-				G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodes];
-				G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodes];
-				G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodes];
-				G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodes];
-				G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodes];
-				G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodes];
+				G.g[dM00] = &G6[dP00 * numberOfLBnodes];
+				G.g[dP00] = &G6[dM00 * numberOfLBnodes];
+				G.g[d0M0] = &G6[d0P0 * numberOfLBnodes];
+				G.g[d0P0] = &G6[d0M0 * numberOfLBnodes];
+				G.g[d00M] = &G6[d00P * numberOfLBnodes];
+				G.g[d00P] = &G6[d00M * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -163,43 +163,43 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mgcbb = (G.g[DIR_P00])[k];
-			real mgabb = (G.g[DIR_M00])[kw];
-			real mgbcb = (G.g[DIR_0P0])[k];
-			real mgbab = (G.g[DIR_0M0])[ks];
-			real mgbbc = (G.g[DIR_00P])[k];
-			real mgbba = (G.g[DIR_00M])[kb];
+			real mgcbb = (G.g[dP00])[k];
+			real mgabb = (G.g[dM00])[kw];
+			real mgbcb = (G.g[d0P0])[k];
+			real mgbab = (G.g[d0M0])[ks];
+			real mgbbc = (G.g[d00P])[k];
+			real mgbba = (G.g[d00M])[kb];
 			real dxuxdxux = c1o2 * (-mgcbb + mgabb);
 			real dyuydyuy = c1o2 * (-mgbcb + mgbab);
 			real dzuzdzuz = c1o2 * (-mgbbc + mgbba);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];
-			real mfabb = (D.f[DIR_M00])[kw];
-			real mfbcb = (D.f[DIR_0P0])[k];
-			real mfbab = (D.f[DIR_0M0])[ks];
-			real mfbbc = (D.f[DIR_00P])[k];
-			real mfbba = (D.f[DIR_00M])[kb];
-			real mfccb = (D.f[DIR_PP0])[k];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];
-			real mfacb = (D.f[DIR_MP0])[kw];
-			real mfcbc = (D.f[DIR_P0P])[k];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];
-			real mfabc = (D.f[DIR_M0P])[kw];
-			real mfbcc = (D.f[DIR_0PP])[k];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];
-			real mfbac = (D.f[DIR_0MP])[ks];
-			real mfbbb = (D.f[DIR_000])[k];
-			real mfccc = (D.f[DIR_PPP])[k];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks];
-			real mfacc = (D.f[DIR_MPP])[kw];
-			real mfcca = (D.f[DIR_PPM])[kb];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k];
+			real mfabb = (D.f[dM00])[kw];
+			real mfbcb = (D.f[d0P0])[k];
+			real mfbab = (D.f[d0M0])[ks];
+			real mfbbc = (D.f[d00P])[k];
+			real mfbba = (D.f[d00M])[kb];
+			real mfccb = (D.f[dPP0])[k];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];
+			real mfacb = (D.f[dMP0])[kw];
+			real mfcbc = (D.f[dP0P])[k];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];
+			real mfabc = (D.f[dM0P])[kw];
+			real mfbcc = (D.f[d0PP])[k];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];
+			real mfbac = (D.f[d0MP])[ks];
+			real mfbbb = (D.f[d000])[k];
+			real mfccc = (D.f[dPPP])[k];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks];
+			real mfacc = (D.f[dMPP])[kw];
+			real mfcca = (D.f[dPPM])[kb];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -913,41 +913,41 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 			//////////////////////////////////////////////////////////////////////////////////////
 
 			//////////////////////////////////////////////////////////////////////////////////////
-			//(D.f[DIR_P00])[k] = mfabb;
-			//(D.f[DIR_M00])[kw] = mfcbb;
-			//(D.f[DIR_0P0])[k] = mfbab;
-			//(D.f[DIR_0M0])[ks] = mfbcb;
-			//(D.f[DIR_00P])[k] = mfbba;
-			//(D.f[DIR_00M])[kb] = mfbbc;
-			//(D.f[DIR_PP0])[k] = mfaab;
-			//(D.f[DIR_MM0])[ksw] = mfccb;
-			//(D.f[DIR_PM0])[ks] = mfacb;
-			//(D.f[DIR_MP0])[kw] = mfcab;
-			//(D.f[DIR_P0P])[k] = mfaba;
-			//(D.f[DIR_M0M])[kbw] = mfcbc;
-			//(D.f[DIR_P0M])[kb] = mfabc;
-			//(D.f[DIR_M0P])[kw] = mfcba;
-			//(D.f[DIR_0PP])[k] = mfbaa;
-			//(D.f[DIR_0MM])[kbs] = mfbcc;
-			//(D.f[DIR_0PM])[kb] = mfbac;
-			//(D.f[DIR_0MP])[ks] = mfbca;
-			//(D.f[DIR_000])[k] = mfbbb;
-			//(D.f[DIR_PPP])[k] = mfaaa;
-			//(D.f[DIR_PMP])[ks] = mfaca;
-			//(D.f[DIR_PPM])[kb] = mfaac;
-			//(D.f[DIR_PMM])[kbs] = mfacc;
-			//(D.f[DIR_MPP])[kw] = mfcaa;
-			//(D.f[DIR_MMP])[ksw] = mfcca;
-			//(D.f[DIR_MPM])[kbw] = mfcac;
-			//(D.f[DIR_MMM])[kbsw] = mfccc;
+			//(D.f[dP00])[k] = mfabb;
+			//(D.f[dM00])[kw] = mfcbb;
+			//(D.f[d0P0])[k] = mfbab;
+			//(D.f[d0M0])[ks] = mfbcb;
+			//(D.f[d00P])[k] = mfbba;
+			//(D.f[d00M])[kb] = mfbbc;
+			//(D.f[dPP0])[k] = mfaab;
+			//(D.f[dMM0])[ksw] = mfccb;
+			//(D.f[dPM0])[ks] = mfacb;
+			//(D.f[dMP0])[kw] = mfcab;
+			//(D.f[dP0P])[k] = mfaba;
+			//(D.f[dM0M])[kbw] = mfcbc;
+			//(D.f[dP0M])[kb] = mfabc;
+			//(D.f[dM0P])[kw] = mfcba;
+			//(D.f[d0PP])[k] = mfbaa;
+			//(D.f[d0MM])[kbs] = mfbcc;
+			//(D.f[d0PM])[kb] = mfbac;
+			//(D.f[d0MP])[ks] = mfbca;
+			//(D.f[d000])[k] = mfbbb;
+			//(D.f[dPPP])[k] = mfaaa;
+			//(D.f[dPMP])[ks] = mfaca;
+			//(D.f[dPPM])[kb] = mfaac;
+			//(D.f[dPMM])[kbs] = mfacc;
+			//(D.f[dMPP])[kw] = mfcaa;
+			//(D.f[dMMP])[ksw] = mfcca;
+			//(D.f[dMPM])[kbw] = mfcac;
+			//(D.f[dMMM])[kbsw] = mfccc;
 			//////////////////////////////////////////////////////////////////////////////////////
 
-			//(G.g[DIR_P00])[k] = mgabb;
-			//(G.g[DIR_M00])[kw] = mgcbb;
-			//(G.g[DIR_0P0])[k] = mgbab;
-			//(G.g[DIR_0M0])[ks] = mgbcb;
-			//(G.g[DIR_00P])[k] = mgbba;
-			//(G.g[DIR_00M])[kb] = mgbbc;
+			//(G.g[dP00])[k] = mgabb;
+			//(G.g[dM00])[kw] = mgcbb;
+			//(G.g[d0P0])[k] = mgbab;
+			//(G.g[d0M0])[ks] = mgbcb;
+			//(G.g[d00P])[k] = mgbba;
+			//(G.g[d00M])[kb] = mgbbc;
 		}
 	}
 }
@@ -1026,83 +1026,83 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			Distributions27 D;
 //			if (EvenOrOdd == true)
 //			{
-//				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-//				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-//				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-//				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-//				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-//				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-//				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-//				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-//				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-//				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-//				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-//				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-//				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-//				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-//				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-//				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-//				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-//				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-//				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-//				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-//				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-//				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-//				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-//				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-//				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-//				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-//				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+//				D.f[dP00] = &DDStart[dP00 * size_Mat];
+//				D.f[dM00] = &DDStart[dM00 * size_Mat];
+//				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+//				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+//				D.f[d00P] = &DDStart[d00P * size_Mat];
+//				D.f[d00M] = &DDStart[d00M * size_Mat];
+//				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+//				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+//				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+//				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+//				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+//				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+//				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+//				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+//				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+//				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+//				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+//				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+//				D.f[d000] = &DDStart[d000 * size_Mat];
+//				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+//				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+//				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+//				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+//				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+//				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+//				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+//				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 //			}
 //			else
 //			{
-//				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-//				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-//				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-//				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-//				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-//				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-//				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-//				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-//				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-//				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-//				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-//				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-//				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-//				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-//				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-//				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-//				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-//				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-//				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-//				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-//				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-//				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-//				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-//				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-//				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-//				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-//				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+//				D.f[dM00] = &DDStart[dP00 * size_Mat];
+//				D.f[dP00] = &DDStart[dM00 * size_Mat];
+//				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+//				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+//				D.f[d00M] = &DDStart[d00P * size_Mat];
+//				D.f[d00P] = &DDStart[d00M * size_Mat];
+//				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+//				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+//				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+//				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+//				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+//				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+//				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+//				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+//				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+//				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+//				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+//				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+//				D.f[d000] = &DDStart[d000 * size_Mat];
+//				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+//				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+//				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+//				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+//				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+//				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+//				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+//				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 //			}
 //
 //			Distributions6 G;
 //			if (EvenOrOdd == true)
 //			{
-//				G.g[DIR_P00] = &G6[DIR_P00 * size_Mat];
-//				G.g[DIR_M00] = &G6[DIR_M00 * size_Mat];
-//				G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat];
-//				G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat];
-//				G.g[DIR_00P] = &G6[DIR_00P * size_Mat];
-//				G.g[DIR_00M] = &G6[DIR_00M * size_Mat];
+//				G.g[dP00] = &G6[dP00 * size_Mat];
+//				G.g[dM00] = &G6[dM00 * size_Mat];
+//				G.g[d0P0] = &G6[d0P0 * size_Mat];
+//				G.g[d0M0] = &G6[d0M0 * size_Mat];
+//				G.g[d00P] = &G6[d00P * size_Mat];
+//				G.g[d00M] = &G6[d00M * size_Mat];
 //			}
 //			else
 //			{
-//				G.g[DIR_M00] = &G6[DIR_P00 * size_Mat];
-//				G.g[DIR_P00] = &G6[DIR_M00 * size_Mat];
-//				G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat];
-//				G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat];
-//				G.g[DIR_00M] = &G6[DIR_00P * size_Mat];
-//				G.g[DIR_00P] = &G6[DIR_00M * size_Mat];
+//				G.g[dM00] = &G6[dP00 * size_Mat];
+//				G.g[dP00] = &G6[dM00 * size_Mat];
+//				G.g[d0M0] = &G6[d0P0 * size_Mat];
+//				G.g[d0P0] = &G6[d0M0 * size_Mat];
+//				G.g[d00M] = &G6[d00P * size_Mat];
+//				G.g[d00P] = &G6[d00M * size_Mat];
 //			}
 //
 //			////////////////////////////////////////////////////////////////////////////////
@@ -1135,43 +1135,43 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			//unsigned int ktne = k;
 //			unsigned int kbsw = neighborZ[ksw];
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mgcbb = (G.g[DIR_P00])[k];
-//			real mgabb = (G.g[DIR_M00])[kw];
-//			real mgbcb = (G.g[DIR_0P0])[k];
-//			real mgbab = (G.g[DIR_0M0])[ks];
-//			real mgbbc = (G.g[DIR_00P])[k];
-//			real mgbba = (G.g[DIR_00M])[kb];
+//			real mgcbb = (G.g[dP00])[k];
+//			real mgabb = (G.g[dM00])[kw];
+//			real mgbcb = (G.g[d0P0])[k];
+//			real mgbab = (G.g[d0M0])[ks];
+//			real mgbbc = (G.g[d00P])[k];
+//			real mgbba = (G.g[d00M])[kb];
 //			real dxuxdxux = c1o2 * (-mgcbb + mgabb);
 //			real dyuydyuy = c1o2 * (-mgbcb + mgbab);
 //			real dzuzdzuz = c1o2 * (-mgbbc + mgbba);
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mfcbb = (D.f[DIR_P00])[k];
-//			real mfabb = (D.f[DIR_M00])[kw];
-//			real mfbcb = (D.f[DIR_0P0])[k];
-//			real mfbab = (D.f[DIR_0M0])[ks];
-//			real mfbbc = (D.f[DIR_00P])[k];
-//			real mfbba = (D.f[DIR_00M])[kb];
-//			real mfccb = (D.f[DIR_PP0])[k];
-//			real mfaab = (D.f[DIR_MM0])[ksw];
-//			real mfcab = (D.f[DIR_PM0])[ks];
-//			real mfacb = (D.f[DIR_MP0])[kw];
-//			real mfcbc = (D.f[DIR_P0P])[k];
-//			real mfaba = (D.f[DIR_M0M])[kbw];
-//			real mfcba = (D.f[DIR_P0M])[kb];
-//			real mfabc = (D.f[DIR_M0P])[kw];
-//			real mfbcc = (D.f[DIR_0PP])[k];
-//			real mfbaa = (D.f[DIR_0MM])[kbs];
-//			real mfbca = (D.f[DIR_0PM])[kb];
-//			real mfbac = (D.f[DIR_0MP])[ks];
-//			real mfbbb = (D.f[DIR_000])[k];
-//			real mfccc = (D.f[DIR_PPP])[k];
-//			real mfaac = (D.f[DIR_MMP])[ksw];
-//			real mfcac = (D.f[DIR_PMP])[ks];
-//			real mfacc = (D.f[DIR_MPP])[kw];
-//			real mfcca = (D.f[DIR_PPM])[kb];
-//			real mfaaa = (D.f[DIR_MMM])[kbsw];
-//			real mfcaa = (D.f[DIR_PMM])[kbs];
-//			real mfaca = (D.f[DIR_MPM])[kbw];
+//			real mfcbb = (D.f[dP00])[k];
+//			real mfabb = (D.f[dM00])[kw];
+//			real mfbcb = (D.f[d0P0])[k];
+//			real mfbab = (D.f[d0M0])[ks];
+//			real mfbbc = (D.f[d00P])[k];
+//			real mfbba = (D.f[d00M])[kb];
+//			real mfccb = (D.f[dPP0])[k];
+//			real mfaab = (D.f[dMM0])[ksw];
+//			real mfcab = (D.f[dPM0])[ks];
+//			real mfacb = (D.f[dMP0])[kw];
+//			real mfcbc = (D.f[dP0P])[k];
+//			real mfaba = (D.f[dM0M])[kbw];
+//			real mfcba = (D.f[dP0M])[kb];
+//			real mfabc = (D.f[dM0P])[kw];
+//			real mfbcc = (D.f[d0PP])[k];
+//			real mfbaa = (D.f[d0MM])[kbs];
+//			real mfbca = (D.f[d0PM])[kb];
+//			real mfbac = (D.f[d0MP])[ks];
+//			real mfbbb = (D.f[d000])[k];
+//			real mfccc = (D.f[dPPP])[k];
+//			real mfaac = (D.f[dMMP])[ksw];
+//			real mfcac = (D.f[dPMP])[ks];
+//			real mfacc = (D.f[dMPP])[kw];
+//			real mfcca = (D.f[dPPM])[kb];
+//			real mfaaa = (D.f[dMMM])[kbsw];
+//			real mfcaa = (D.f[dPMM])[kbs];
+//			real mfaca = (D.f[dMPM])[kbw];
 //			////////////////////////////////////////////////////////////////////////////////////
 //			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 //				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1893,41 +1893,41 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			////////////////////////////////////////////////////////////////////////////////////
 //
 //			////////////////////////////////////////////////////////////////////////////////////
-//			(D.f[DIR_P00])[k] = mfabb;   
-//			(D.f[DIR_M00])[kw] = mfcbb;  
-//			(D.f[DIR_0P0])[k] = mfbab;   
-//			(D.f[DIR_0M0])[ks] = mfbcb;  
-//			(D.f[DIR_00P])[k] = mfbba;   
-//			(D.f[DIR_00M])[kb] = mfbbc;  
-//			(D.f[DIR_PP0])[k] = mfaab;  
-//			(D.f[DIR_MM0])[ksw] = mfccb;
-//			(D.f[DIR_PM0])[ks] = mfacb; 
-//			(D.f[DIR_MP0])[kw] = mfcab; 
-//			(D.f[DIR_P0P])[k] = mfaba;  
-//			(D.f[DIR_M0M])[kbw] = mfcbc;
-//			(D.f[DIR_P0M])[kb] = mfabc; 
-//			(D.f[DIR_M0P])[kw] = mfcba; 
-//			(D.f[DIR_0PP])[k] = mfbaa;  
-//			(D.f[DIR_0MM])[kbs] = mfbcc;
-//			(D.f[DIR_0PM])[kb] = mfbac; 
-//			(D.f[DIR_0MP])[ks] = mfbca; 
-//			(D.f[DIR_000])[k] = mfbbb;
-//			(D.f[DIR_PPP])[k] = mfaaa; 
-//			(D.f[DIR_PMP])[ks] = mfaca;
-//			(D.f[DIR_PPM])[kb] = mfaac;
-//			(D.f[DIR_PMM])[kbs] = mfacc;
-//			(D.f[DIR_MPP])[kw] = mfcaa;
-//			(D.f[DIR_MMP])[ksw] = mfcca;
-//			(D.f[DIR_MPM])[kbw] = mfcac;
-//			(D.f[DIR_MMM])[kbsw] = mfccc;
-//			////////////////////////////////////////////////////////////////////////////////////
-//
-//			(G.g[DIR_P00])[k]  = mgabb;                                                               
-//			(G.g[DIR_M00])[kw] = mgcbb;                                                              
-//			(G.g[DIR_0P0])[k]  = mgbab;
-//			(G.g[DIR_0M0])[ks] = mgbcb;
-//			(G.g[DIR_00P])[k]  = mgbba;
-//			(G.g[DIR_00M])[kb] = mgbbc;
+//			(D.f[dP00])[k] = mfabb;   
+//			(D.f[dM00])[kw] = mfcbb;  
+//			(D.f[d0P0])[k] = mfbab;   
+//			(D.f[d0M0])[ks] = mfbcb;  
+//			(D.f[d00P])[k] = mfbba;   
+//			(D.f[d00M])[kb] = mfbbc;  
+//			(D.f[dPP0])[k] = mfaab;  
+//			(D.f[dMM0])[ksw] = mfccb;
+//			(D.f[dPM0])[ks] = mfacb; 
+//			(D.f[dMP0])[kw] = mfcab; 
+//			(D.f[dP0P])[k] = mfaba;  
+//			(D.f[dM0M])[kbw] = mfcbc;
+//			(D.f[dP0M])[kb] = mfabc; 
+//			(D.f[dM0P])[kw] = mfcba; 
+//			(D.f[d0PP])[k] = mfbaa;  
+//			(D.f[d0MM])[kbs] = mfbcc;
+//			(D.f[d0PM])[kb] = mfbac; 
+//			(D.f[d0MP])[ks] = mfbca; 
+//			(D.f[d000])[k] = mfbbb;
+//			(D.f[dPPP])[k] = mfaaa; 
+//			(D.f[dPMP])[ks] = mfaca;
+//			(D.f[dPPM])[kb] = mfaac;
+//			(D.f[dPMM])[kbs] = mfacc;
+//			(D.f[dMPP])[kw] = mfcaa;
+//			(D.f[dMMP])[ksw] = mfcca;
+//			(D.f[dMPM])[kbw] = mfcac;
+//			(D.f[dMMM])[kbsw] = mfccc;
+//			////////////////////////////////////////////////////////////////////////////////////
+//
+//			(G.g[dP00])[k]  = mgabb;                                                               
+//			(G.g[dM00])[kw] = mgcbb;                                                              
+//			(G.g[d0P0])[k]  = mgbab;
+//			(G.g[d0M0])[ks] = mgbcb;
+//			(G.g[d00P])[k]  = mgbba;
+//			(G.g[d00M])[kb] = mgbbc;
 //		}
 //	}
 //}
@@ -2006,83 +2006,83 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			Distributions27 D;
 //			if (EvenOrOdd == true)
 //			{
-//				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-//				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-//				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-//				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-//				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-//				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-//				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-//				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-//				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-//				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-//				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-//				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-//				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-//				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-//				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-//				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-//				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-//				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-//				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-//				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-//				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-//				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-//				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-//				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-//				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-//				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-//				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+//				D.f[dP00] = &DDStart[dP00 * size_Mat];
+//				D.f[dM00] = &DDStart[dM00 * size_Mat];
+//				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+//				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+//				D.f[d00P] = &DDStart[d00P * size_Mat];
+//				D.f[d00M] = &DDStart[d00M * size_Mat];
+//				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+//				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+//				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+//				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+//				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+//				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+//				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+//				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+//				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+//				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+//				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+//				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+//				D.f[d000] = &DDStart[d000 * size_Mat];
+//				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+//				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+//				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+//				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+//				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+//				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+//				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+//				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 //			}
 //			else
 //			{
-//				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-//				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-//				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-//				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-//				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-//				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-//				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-//				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-//				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-//				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-//				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-//				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-//				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-//				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-//				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-//				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-//				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-//				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-//				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-//				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-//				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-//				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-//				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-//				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-//				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-//				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-//				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+//				D.f[dM00] = &DDStart[dP00 * size_Mat];
+//				D.f[dP00] = &DDStart[dM00 * size_Mat];
+//				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+//				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+//				D.f[d00M] = &DDStart[d00P * size_Mat];
+//				D.f[d00P] = &DDStart[d00M * size_Mat];
+//				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+//				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+//				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+//				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+//				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+//				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+//				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+//				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+//				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+//				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+//				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+//				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+//				D.f[d000] = &DDStart[d000 * size_Mat];
+//				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+//				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+//				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+//				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+//				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+//				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+//				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+//				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 //			}
 //
 //			Distributions6 G;
 //			if (EvenOrOdd == true)
 //			{
-//				G.g[DIR_P00] = &G6[DIR_P00 * size_Mat];
-//				G.g[DIR_M00] = &G6[DIR_M00 * size_Mat];
-//				G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat];
-//				G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat];
-//				G.g[DIR_00P] = &G6[DIR_00P * size_Mat];
-//				G.g[DIR_00M] = &G6[DIR_00M * size_Mat];
+//				G.g[dP00] = &G6[dP00 * size_Mat];
+//				G.g[dM00] = &G6[dM00 * size_Mat];
+//				G.g[d0P0] = &G6[d0P0 * size_Mat];
+//				G.g[d0M0] = &G6[d0M0 * size_Mat];
+//				G.g[d00P] = &G6[d00P * size_Mat];
+//				G.g[d00M] = &G6[d00M * size_Mat];
 //			}
 //			else
 //			{
-//				G.g[DIR_M00] = &G6[DIR_P00 * size_Mat];
-//				G.g[DIR_P00] = &G6[DIR_M00 * size_Mat];
-//				G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat];
-//				G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat];
-//				G.g[DIR_00M] = &G6[DIR_00P * size_Mat];
-//				G.g[DIR_00P] = &G6[DIR_00M * size_Mat];
+//				G.g[dM00] = &G6[dP00 * size_Mat];
+//				G.g[dP00] = &G6[dM00 * size_Mat];
+//				G.g[d0M0] = &G6[d0P0 * size_Mat];
+//				G.g[d0P0] = &G6[d0M0 * size_Mat];
+//				G.g[d00M] = &G6[d00P * size_Mat];
+//				G.g[d00P] = &G6[d00M * size_Mat];
 //			}
 //
 //			////////////////////////////////////////////////////////////////////////////////
@@ -2143,43 +2143,43 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			//unsigned int ktne = k;
 //			//unsigned int kbsw = neighborZ[ksw];
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mgcbb = (G.g[DIR_P00])[k];
-//			real mgabb = (G.g[DIR_M00])[kw];
-//			real mgbcb = (G.g[DIR_0P0])[k];
-//			real mgbab = (G.g[DIR_0M0])[ks];
-//			real mgbbc = (G.g[DIR_00P])[k];
-//			real mgbba = (G.g[DIR_00M])[kb];
+//			real mgcbb = (G.g[dP00])[k];
+//			real mgabb = (G.g[dM00])[kw];
+//			real mgbcb = (G.g[d0P0])[k];
+//			real mgbab = (G.g[d0M0])[ks];
+//			real mgbbc = (G.g[d00P])[k];
+//			real mgbba = (G.g[d00M])[kb];
 //			real dxxux = c1o2 * (-mgcbb + mgabb);
 //			real dyyuy = c1o2 * (-mgbcb + mgbab);
 //			real dzzuz = c1o2 * (-mgbbc + mgbba);
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-//			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-//			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-//			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-//			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-//			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-//			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-//			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-//			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-//			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-//			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-//			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-//			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-//			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-//			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-//			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-//			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-//			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-//			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-//			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-//			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-//			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-//			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-//			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-//			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-//			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-//			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+//			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+//			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+//			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+//			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+//			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+//			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+//			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+//			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+//			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+//			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+//			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+//			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+//			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+//			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+//			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+//			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+//			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+//			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+//			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+//			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+//			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+//			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+//			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+//			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+//			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+//			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+//			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 //			////////////////////////////////////////////////////////////////////////////////////
 //			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 //				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -3013,41 +3013,41 @@ __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			////////////////////////////////////////////////////////////////////////////////////
 //
 //			////////////////////////////////////////////////////////////////////////////////////
-//			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-//			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-//			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-//			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-//			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-//			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-//			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-//			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-//			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-//			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-//			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-//			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-//			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-//			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-//			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-//			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-//			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-//			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-//			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-//			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-//			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-//			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-//			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-//			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-//			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-//			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-//			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
-//			////////////////////////////////////////////////////////////////////////////////////
-//
-//			(G.g[DIR_P00])[k]  = mgabb;                                                               
-//			(G.g[DIR_M00])[kw] = mgcbb;                                                              
-//			(G.g[DIR_0P0])[k]  = mgbab;
-//			(G.g[DIR_0M0])[ks] = mgbcb;
-//			(G.g[DIR_00P])[k]  = mgbba;
-//			(G.g[DIR_00M])[kb] = mgbbc;
+//			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+//			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+//			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+//			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+//			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+//			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+//			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+//			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+//			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+//			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+//			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+//			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+//			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+//			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+//			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+//			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+//			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+//			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+//			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+//			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+//			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+//			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+//			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+//			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+//			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+//			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+//			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
+//			////////////////////////////////////////////////////////////////////////////////////
+//
+//			(G.g[dP00])[k]  = mgabb;                                                               
+//			(G.g[dM00])[kw] = mgcbb;                                                              
+//			(G.g[d0P0])[k]  = mgbab;
+//			(G.g[d0M0])[ks] = mgbcb;
+//			(G.g[d00P])[k]  = mgbba;
+//			(G.g[d00M])[kb] = mgbbc;
 //		}
 //	}
 //}
diff --git a/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu b/src/gpu/core/GPU/DragLift27.cu
similarity index 58%
rename from src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu
rename to src/gpu/core/GPU/DragLift27.cu
index d1fc15a6b7a8f73083b41b926ce58916bdf61b59..e4dbb955489113b33804dcf1dfe64ade72b7826b 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu
+++ b/src/gpu/core/GPU/DragLift27.cu
@@ -23,63 +23,63 @@ __global__ void DragLiftPost27(  real* DD,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
 	} 
 	else
 	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -100,32 +100,32 @@ __global__ void DragLiftPost27(  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[DIR_P00 * numberOfBCnodes];
-		q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-		q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-		q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-		q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-		q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-		q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-		q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-		q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-		q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-		q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-		q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-		q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-		q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-		q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-		q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-		q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-		q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-		q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-		q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-		q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-		q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-		q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-		q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-		q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-		q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+		q_dirE   = &QQ[dP00 * numberOfBCnodes];
+		q_dirW   = &QQ[dM00 * numberOfBCnodes];
+		q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+		q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+		q_dirT   = &QQ[d00P * numberOfBCnodes];
+		q_dirB   = &QQ[d00M * numberOfBCnodes];
+		q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+		q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+		q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+		q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+		q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+		q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+		q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+		q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+		q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+		q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+		q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+		q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+		q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+		q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+		q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+		q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+		q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+		q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+		q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+		q_dirBNW = &QQ[dMPM * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK  = k_Q[k];
@@ -160,32 +160,32 @@ __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[DIR_P00])[ke   ];
-		f_E    = (D.f[DIR_M00])[kw   ];
-		f_S    = (D.f[DIR_0P0])[kn   ];
-		f_N    = (D.f[DIR_0M0])[ks   ];
-		f_B    = (D.f[DIR_00P])[kt   ];
-		f_T    = (D.f[DIR_00M])[kb   ];
-		f_SW   = (D.f[DIR_PP0])[kne  ];
-		f_NE   = (D.f[DIR_MM0])[ksw  ];
-		f_NW   = (D.f[DIR_PM0])[kse  ];
-		f_SE   = (D.f[DIR_MP0])[knw  ];
-		f_BW   = (D.f[DIR_P0P])[kte  ];
-		f_TE   = (D.f[DIR_M0M])[kbw  ];
-		f_TW   = (D.f[DIR_P0M])[kbe  ];
-		f_BE   = (D.f[DIR_M0P])[ktw  ];
-		f_BS   = (D.f[DIR_0PP])[ktn  ];
-		f_TN   = (D.f[DIR_0MM])[kbs  ];
-		f_TS   = (D.f[DIR_0PM])[kbn  ];
-		f_BN   = (D.f[DIR_0MP])[kts  ];
-		f_BSW  = (D.f[DIR_PPP])[ktne ];
-		f_BNE  = (D.f[DIR_MMP])[ktsw ];
-		f_BNW  = (D.f[DIR_PMP])[ktse ];
-		f_BSE  = (D.f[DIR_MPP])[ktnw ];
-		f_TSW  = (D.f[DIR_PPM])[kbne ];
-		f_TNE  = (D.f[DIR_MMM])[kbsw ];
-		f_TNW  = (D.f[DIR_PMM])[kbse ];
-		f_TSE  = (D.f[DIR_MPM])[kbnw ];
+		f_W    = (D.f[dP00])[ke   ];
+		f_E    = (D.f[dM00])[kw   ];
+		f_S    = (D.f[d0P0])[kn   ];
+		f_N    = (D.f[d0M0])[ks   ];
+		f_B    = (D.f[d00P])[kt   ];
+		f_T    = (D.f[d00M])[kb   ];
+		f_SW   = (D.f[dPP0])[kne  ];
+		f_NE   = (D.f[dMM0])[ksw  ];
+		f_NW   = (D.f[dPM0])[kse  ];
+		f_SE   = (D.f[dMP0])[knw  ];
+		f_BW   = (D.f[dP0P])[kte  ];
+		f_TE   = (D.f[dM0M])[kbw  ];
+		f_TW   = (D.f[dP0M])[kbe  ];
+		f_BE   = (D.f[dM0P])[ktw  ];
+		f_BS   = (D.f[d0PP])[ktn  ];
+		f_TN   = (D.f[d0MM])[kbs  ];
+		f_TS   = (D.f[d0PM])[kbn  ];
+		f_BN   = (D.f[d0MP])[kts  ];
+		f_BSW  = (D.f[dPPP])[ktne ];
+		f_BNE  = (D.f[dMMP])[ktsw ];
+		f_BNW  = (D.f[dPMP])[ktse ];
+		f_BSE  = (D.f[dMPP])[ktnw ];
+		f_TSW  = (D.f[dPPM])[kbne ];
+		f_TNE  = (D.f[dMMM])[kbsw ];
+		f_TNW  = (D.f[dPMM])[kbse ];
+		f_TSE  = (D.f[dMPM])[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 @@ __global__ void DragLiftPre27(   real* DD,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
 	} 
 	else
 	{
-		D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -365,32 +365,32 @@ __global__ void DragLiftPre27(   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[DIR_P00 * numberOfBCnodes];
-		q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-		q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-		q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-		q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-		q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-		q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-		q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-		q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-		q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-		q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-		q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-		q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-		q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-		q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-		q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-		q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-		q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-		q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-		q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-		q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-		q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-		q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-		q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-		q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-		q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+		q_dirE   = &QQ[dP00 * numberOfBCnodes];
+		q_dirW   = &QQ[dM00 * numberOfBCnodes];
+		q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+		q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+		q_dirT   = &QQ[d00P * numberOfBCnodes];
+		q_dirB   = &QQ[d00M * numberOfBCnodes];
+		q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+		q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+		q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+		q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+		q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+		q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+		q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+		q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+		q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+		q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+		q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+		q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+		q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+		q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+		q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+		q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+		q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+		q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+		q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+		q_dirBNW = &QQ[dMPM * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK  = k_Q[k];
@@ -425,32 +425,32 @@ __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[DIR_P00])[ke   ];
-		f_W   = (D.f[DIR_M00])[kw   ];
-		f_N   = (D.f[DIR_0P0])[kn   ];
-		f_S   = (D.f[DIR_0M0])[ks   ];
-		f_T   = (D.f[DIR_00P])[kt   ];
-		f_B   = (D.f[DIR_00M])[kb   ];
-		f_NE  = (D.f[DIR_PP0])[kne  ];
-		f_SW  = (D.f[DIR_MM0])[ksw  ];
-		f_SE  = (D.f[DIR_PM0])[kse  ];
-		f_NW  = (D.f[DIR_MP0])[knw  ];
-		f_TE  = (D.f[DIR_P0P])[kte  ];
-		f_BW  = (D.f[DIR_M0M])[kbw  ];
-		f_BE  = (D.f[DIR_P0M])[kbe  ];
-		f_TW  = (D.f[DIR_M0P])[ktw  ];
-		f_TN  = (D.f[DIR_0PP])[ktn  ];
-		f_BS  = (D.f[DIR_0MM])[kbs  ];
-		f_BN  = (D.f[DIR_0PM])[kbn  ];
-		f_TS  = (D.f[DIR_0MP])[kts  ];
-		f_TNE = (D.f[DIR_PPP])[ktne ];
-		f_TSW = (D.f[DIR_MMP])[ktsw ];
-		f_TSE = (D.f[DIR_PMP])[ktse ];
-		f_TNW = (D.f[DIR_MPP])[ktnw ];
-		f_BNE = (D.f[DIR_PPM])[kbne ];
-		f_BSW = (D.f[DIR_MMM])[kbsw ];
-		f_BSE = (D.f[DIR_PMM])[kbse ];
-		f_BNW = (D.f[DIR_MPM])[kbnw ];
+		f_E   = (D.f[dP00])[ke   ];
+		f_W   = (D.f[dM00])[kw   ];
+		f_N   = (D.f[d0P0])[kn   ];
+		f_S   = (D.f[d0M0])[ks   ];
+		f_T   = (D.f[d00P])[kt   ];
+		f_B   = (D.f[d00M])[kb   ];
+		f_NE  = (D.f[dPP0])[kne  ];
+		f_SW  = (D.f[dMM0])[ksw  ];
+		f_SE  = (D.f[dPM0])[kse  ];
+		f_NW  = (D.f[dMP0])[knw  ];
+		f_TE  = (D.f[dP0P])[kte  ];
+		f_BW  = (D.f[dM0M])[kbw  ];
+		f_BE  = (D.f[dP0M])[kbe  ];
+		f_TW  = (D.f[dM0P])[ktw  ];
+		f_TN  = (D.f[d0PP])[ktn  ];
+		f_BS  = (D.f[d0MM])[kbs  ];
+		f_BN  = (D.f[d0PM])[kbn  ];
+		f_TS  = (D.f[d0MP])[kts  ];
+		f_TNE = (D.f[dPPP])[ktne ];
+		f_TSW = (D.f[dMMP])[ktsw ];
+		f_TSE = (D.f[dPMP])[ktse ];
+		f_TNW = (D.f[dMPP])[ktnw ];
+		f_BNE = (D.f[dPPM])[kbne ];
+		f_BSW = (D.f[dMMM])[kbsw ];
+		f_BSE = (D.f[dPMM])[kbse ];
+		f_BNW = (D.f[dMPM])[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/EnstrophyAnalyzer.cu b/src/gpu/core/GPU/EnstrophyAnalyzer.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.cu
rename to src/gpu/core/GPU/EnstrophyAnalyzer.cu
diff --git a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h b/src/gpu/core/GPU/EnstrophyAnalyzer.h
similarity index 72%
rename from src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h
rename to src/gpu/core/GPU/EnstrophyAnalyzer.h
index ab5c52e77cd4c028e044bfd6ec4b25b974f80ee2..dd633a5375a75dc66ff19d933fc9af81bf0b1a5a 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h
+++ b/src/gpu/core/GPU/EnstrophyAnalyzer.h
@@ -6,13 +6,13 @@
 
 
 
-#include "PointerDefinitions.h"
-#include "DataTypes.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/PointerDefinitions.h>
+#include <basics/DataTypes.h>
+
 
 class Parameter;
 
-class VIRTUALFLUIDS_GPU_EXPORT EnstrophyAnalyzer
+class EnstrophyAnalyzer
 {
 private:
 
diff --git a/src/gpu/core/GPU/ExchangeData27.cu b/src/gpu/core/GPU/ExchangeData27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..e0d13773b8c38d276cec5ffdd6f6dc0fb19465eb
--- /dev/null
+++ b/src/gpu/core/GPU/ExchangeData27.cu
@@ -0,0 +1,1072 @@
+/* Device code */
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void getSendFsPost27(real* DD,
+										   real* bufferFs,
+										   int* sendIndex,
+                                           int buffmax,
+                                           unsigned int* neighborX,
+                                           unsigned int* neighborY,
+                                           unsigned int* neighborZ,
+                                           unsigned long long 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 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<buffmax)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      //set index
+      unsigned int kIndex  = sendIndex[k];
+      unsigned int kzero   = kIndex;
+      unsigned int ke      = kIndex;
+      unsigned int kw      = neighborX[kIndex];
+      unsigned int kn      = kIndex;
+      unsigned int ks      = neighborY[kIndex];
+      unsigned int kt      = kIndex;
+      unsigned int kb      = neighborZ[kIndex];
+      unsigned int ksw     = neighborY[kw];
+      unsigned int kne     = kIndex;
+      unsigned int kse     = ks;
+      unsigned int knw     = kw;
+      unsigned int kbw     = neighborZ[kw];
+      unsigned int kte     = kIndex;
+      unsigned int kbe     = kb;
+      unsigned int ktw     = kw;
+      unsigned int kbs     = neighborZ[ks];
+      unsigned int ktn     = kIndex;
+      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    = kIndex;
+      unsigned int kbsw    = neighborZ[ksw];
+      ////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Fs
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Buffer Fs
+      Distributions27 Dbuff;
+      Dbuff.f[dP00] = &bufferFs[dP00 * buffmax];
+      Dbuff.f[dM00] = &bufferFs[dM00 * buffmax];
+      Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax];
+      Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax];
+      Dbuff.f[d00P] = &bufferFs[d00P * buffmax];
+      Dbuff.f[d00M] = &bufferFs[d00M * buffmax];
+      Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax];
+      Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax];
+      Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax];
+      Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax];
+      Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax];
+      Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax];
+      Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax];
+      Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax];
+      Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax];
+      Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax];
+      Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax];
+      Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax];
+      Dbuff.f[d000] = &bufferFs[d000 * buffmax];
+      Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax];
+      Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax];
+      Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax];
+      Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax];
+      Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax];
+      Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax];
+      Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax];
+      Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax];
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //copy to buffer
+      //(Dbuff.f[dP00])[k] = (D.f[dP00])[ke   ];
+      //(Dbuff.f[dM00])[k] = (D.f[dM00])[kw   ];
+      //(Dbuff.f[d0P0])[k] = (D.f[d0P0])[kn   ];
+      //(Dbuff.f[d0M0])[k] = (D.f[d0M0])[ks   ];
+      //(Dbuff.f[d00P])[k] = (D.f[d00P])[kt   ];
+      //(Dbuff.f[d00M])[k] = (D.f[d00M])[kb   ];
+      //(Dbuff.f[dPP0])[k] = (D.f[dPP0])[kne  ];
+      //(Dbuff.f[dMM0])[k] = (D.f[dMM0])[ksw  ];
+      //(Dbuff.f[dPM0])[k] = (D.f[dPM0])[kse  ];
+      //(Dbuff.f[dMP0])[k] = (D.f[dMP0])[knw  ];
+      //(Dbuff.f[dP0P])[k] = (D.f[dP0P])[kte  ];
+      //(Dbuff.f[dM0M])[k] = (D.f[dM0M])[kbw  ];
+      //(Dbuff.f[dP0M])[k] = (D.f[dP0M])[kbe  ];
+      //(Dbuff.f[dM0P])[k] = (D.f[dM0P])[ktw  ];
+      //(Dbuff.f[d0PP])[k] = (D.f[d0PP])[ktn  ];
+      //(Dbuff.f[d0MM])[k] = (D.f[d0MM])[kbs  ];
+      //(Dbuff.f[d0PM])[k] = (D.f[d0PM])[kbn  ];
+      //(Dbuff.f[d0MP])[k] = (D.f[d0MP])[kts  ];
+      //(Dbuff.f[d000])[k] = (D.f[d000])[kzero];
+      //(Dbuff.f[dPPP])[k] = (D.f[dPPP])[ktne ];
+      //(Dbuff.f[dMMP])[k] = (D.f[dMMP])[ktsw ];
+      //(Dbuff.f[dPMP])[k] = (D.f[dPMP])[ktse ];
+      //(Dbuff.f[dMPP])[k] = (D.f[dMPP])[ktnw ];
+      //(Dbuff.f[dPPM])[k] = (D.f[dPPM])[kbne ];
+      //(Dbuff.f[dMMM])[k] = (D.f[dMMM])[kbsw ];
+      //(Dbuff.f[dPMM])[k] = (D.f[dPMM])[kbse ];
+      //(Dbuff.f[dMPM])[k] = (D.f[dMPM])[kbnw ];
+      (Dbuff.f[dP00])[k] = (D.f[dM00])[kw   ];
+      (Dbuff.f[dM00])[k] = (D.f[dP00])[ke   ];
+      (Dbuff.f[d0P0])[k] = (D.f[d0M0])[ks   ];
+      (Dbuff.f[d0M0])[k] = (D.f[d0P0])[kn   ];
+      (Dbuff.f[d00P])[k] = (D.f[d00M])[kb   ];
+      (Dbuff.f[d00M])[k] = (D.f[d00P])[kt   ];
+      (Dbuff.f[dPP0])[k] = (D.f[dMM0])[ksw  ];
+      (Dbuff.f[dMM0])[k] = (D.f[dPP0])[kne  ];
+      (Dbuff.f[dPM0])[k] = (D.f[dMP0])[knw  ];
+      (Dbuff.f[dMP0])[k] = (D.f[dPM0])[kse  ];
+      (Dbuff.f[dP0P])[k] = (D.f[dM0M])[kbw  ];
+      (Dbuff.f[dM0M])[k] = (D.f[dP0P])[kte  ];
+      (Dbuff.f[dP0M])[k] = (D.f[dM0P])[ktw  ];
+      (Dbuff.f[dM0P])[k] = (D.f[dP0M])[kbe  ];
+      (Dbuff.f[d0PP])[k] = (D.f[d0MM])[kbs  ];
+      (Dbuff.f[d0MM])[k] = (D.f[d0PP])[ktn  ];
+      (Dbuff.f[d0PM])[k] = (D.f[d0MP])[kts  ];
+      (Dbuff.f[d0MP])[k] = (D.f[d0PM])[kbn  ];
+      (Dbuff.f[d000])[k] = (D.f[d000])[kzero];
+      (Dbuff.f[dPPP])[k] = (D.f[dMMM])[kbsw ];
+      (Dbuff.f[dMMP])[k] = (D.f[dPPM])[kbne ];
+      (Dbuff.f[dPMP])[k] = (D.f[dMPM])[kbnw ];
+      (Dbuff.f[dMPP])[k] = (D.f[dPMM])[kbse ];
+      (Dbuff.f[dPPM])[k] = (D.f[dMMP])[ktsw ];
+      (Dbuff.f[dMMM])[k] = (D.f[dPPP])[ktne ];
+      (Dbuff.f[dPMM])[k] = (D.f[dMPP])[ktnw ];
+      (Dbuff.f[dMPM])[k] = (D.f[dPMP])[ktse ];
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void setRecvFsPost27(real* DD,
+										   real* bufferFs,
+										   int* recvIndex,
+                                           int buffmax,
+                                           unsigned int* neighborX,
+                                           unsigned int* neighborY,
+                                           unsigned int* neighborZ,
+                                           unsigned long long 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 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<buffmax)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      //set index
+      unsigned int kIndex  = recvIndex[k];
+      unsigned int kzero   = kIndex;
+      unsigned int ke      = kIndex;
+      unsigned int kw      = neighborX[kIndex];
+      unsigned int kn      = kIndex;
+      unsigned int ks      = neighborY[kIndex];
+      unsigned int kt      = kIndex;
+      unsigned int kb      = neighborZ[kIndex];
+      unsigned int ksw     = neighborY[kw];
+      unsigned int kne     = kIndex;
+      unsigned int kse     = ks;
+      unsigned int knw     = kw;
+      unsigned int kbw     = neighborZ[kw];
+      unsigned int kte     = kIndex;
+      unsigned int kbe     = kb;
+      unsigned int ktw     = kw;
+      unsigned int kbs     = neighborZ[ks];
+      unsigned int ktn     = kIndex;
+      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    = kIndex;
+      unsigned int kbsw    = neighborZ[ksw];
+      ////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Fs
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Buffer Fs
+      Distributions27 Dbuff;
+      Dbuff.f[dP00] = &bufferFs[dP00 * buffmax];
+      Dbuff.f[dM00] = &bufferFs[dM00 * buffmax];
+      Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax];
+      Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax];
+      Dbuff.f[d00P] = &bufferFs[d00P * buffmax];
+      Dbuff.f[d00M] = &bufferFs[d00M * buffmax];
+      Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax];
+      Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax];
+      Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax];
+      Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax];
+      Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax];
+      Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax];
+      Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax];
+      Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax];
+      Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax];
+      Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax];
+      Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax];
+      Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax];
+      Dbuff.f[d000] = &bufferFs[d000 * buffmax];
+      Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax];
+      Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax];
+      Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax];
+      Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax];
+      Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax];
+      Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax];
+      Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax];
+      Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax];
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //copy from buffer
+      //(D.f[dP00])[ke   ] = (Dbuff.f[dP00])[k];
+      //(D.f[dM00])[kw   ] = (Dbuff.f[dM00])[k];
+      //(D.f[d0P0])[kn   ] = (Dbuff.f[d0P0])[k];
+      //(D.f[d0M0])[ks   ] = (Dbuff.f[d0M0])[k];
+      //(D.f[d00P])[kt   ] = (Dbuff.f[d00P])[k];
+      //(D.f[d00M])[kb   ] = (Dbuff.f[d00M])[k];
+      //(D.f[dPP0])[kne  ] = (Dbuff.f[dPP0])[k];
+      //(D.f[dMM0])[ksw  ] = (Dbuff.f[dMM0])[k];
+      //(D.f[dPM0])[kse  ] = (Dbuff.f[dPM0])[k];
+      //(D.f[dMP0])[knw  ] = (Dbuff.f[dMP0])[k];
+      //(D.f[dP0P])[kte  ] = (Dbuff.f[dP0P])[k];
+      //(D.f[dM0M])[kbw  ] = (Dbuff.f[dM0M])[k];
+      //(D.f[dP0M])[kbe  ] = (Dbuff.f[dP0M])[k];
+      //(D.f[dM0P])[ktw  ] = (Dbuff.f[dM0P])[k];
+      //(D.f[d0PP])[ktn  ] = (Dbuff.f[d0PP])[k];
+      //(D.f[d0MM])[kbs  ] = (Dbuff.f[d0MM])[k];
+      //(D.f[d0PM])[kbn  ] = (Dbuff.f[d0PM])[k];
+      //(D.f[d0MP])[kts  ] = (Dbuff.f[d0MP])[k];
+      //(D.f[d000])[kzero] = (Dbuff.f[d000])[k];
+      //(D.f[dPPP])[ktne ] = (Dbuff.f[dPPP])[k];
+      //(D.f[dMMP])[ktsw ] = (Dbuff.f[dMMP])[k];
+      //(D.f[dPMP])[ktse ] = (Dbuff.f[dPMP])[k];
+      //(D.f[dMPP])[ktnw ] = (Dbuff.f[dMPP])[k];
+      //(D.f[dPPM])[kbne ] = (Dbuff.f[dPPM])[k];
+      //(D.f[dMMM])[kbsw ] = (Dbuff.f[dMMM])[k];
+      //(D.f[dPMM])[kbse ] = (Dbuff.f[dPMM])[k];
+      //(D.f[dMPM])[kbnw ] = (Dbuff.f[dMPM])[k];
+      (D.f[dM00])[kw   ] = (Dbuff.f[dP00])[k];
+      (D.f[dP00])[ke   ] = (Dbuff.f[dM00])[k];
+      (D.f[d0M0])[ks   ] = (Dbuff.f[d0P0])[k];
+      (D.f[d0P0])[kn   ] = (Dbuff.f[d0M0])[k];
+      (D.f[d00M])[kb   ] = (Dbuff.f[d00P])[k];
+      (D.f[d00P])[kt   ] = (Dbuff.f[d00M])[k];
+      (D.f[dMM0])[ksw  ] = (Dbuff.f[dPP0])[k];
+      (D.f[dPP0])[kne  ] = (Dbuff.f[dMM0])[k];
+      (D.f[dMP0])[knw  ] = (Dbuff.f[dPM0])[k];
+      (D.f[dPM0])[kse  ] = (Dbuff.f[dMP0])[k];
+      (D.f[dM0M])[kbw  ] = (Dbuff.f[dP0P])[k];
+      (D.f[dP0P])[kte  ] = (Dbuff.f[dM0M])[k];
+      (D.f[dM0P])[ktw  ] = (Dbuff.f[dP0M])[k];
+      (D.f[dP0M])[kbe  ] = (Dbuff.f[dM0P])[k];
+      (D.f[d0MM])[kbs  ] = (Dbuff.f[d0PP])[k];
+      (D.f[d0PP])[ktn  ] = (Dbuff.f[d0MM])[k];
+      (D.f[d0MP])[kts  ] = (Dbuff.f[d0PM])[k];
+      (D.f[d0PM])[kbn  ] = (Dbuff.f[d0MP])[k];
+      (D.f[d000])[kzero] = (Dbuff.f[d000])[k];
+      (D.f[dMMM])[kbsw ] = (Dbuff.f[dPPP])[k];
+      (D.f[dPPM])[kbne ] = (Dbuff.f[dMMP])[k];
+      (D.f[dMPM])[kbnw ] = (Dbuff.f[dPMP])[k];
+      (D.f[dPMM])[kbse ] = (Dbuff.f[dMPP])[k];
+      (D.f[dMMP])[ktsw ] = (Dbuff.f[dPPM])[k];
+      (D.f[dPPP])[ktne ] = (Dbuff.f[dMMM])[k];
+      (D.f[dMPP])[ktnw ] = (Dbuff.f[dPMM])[k];
+      (D.f[dPMP])[ktse ] = (Dbuff.f[dMPM])[k];
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void getSendFsPre27(real* DD,
+										  real* bufferFs,
+										  int* sendIndex,
+                                          int buffmax,
+                                          unsigned int* neighborX,
+                                          unsigned int* neighborY,
+                                          unsigned int* neighborZ,
+                                          unsigned long long 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 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<buffmax)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      //set index
+      unsigned int kIndex  = sendIndex[k];
+      unsigned int kzero   = kIndex;
+      unsigned int ke      = kIndex;
+      unsigned int kw      = neighborX[kIndex];
+      unsigned int kn      = kIndex;
+      unsigned int ks      = neighborY[kIndex];
+      unsigned int kt      = kIndex;
+      unsigned int kb      = neighborZ[kIndex];
+      unsigned int ksw     = neighborY[kw];
+      unsigned int kne     = kIndex;
+      unsigned int kse     = ks;
+      unsigned int knw     = kw;
+      unsigned int kbw     = neighborZ[kw];
+      unsigned int kte     = kIndex;
+      unsigned int kbe     = kb;
+      unsigned int ktw     = kw;
+      unsigned int kbs     = neighborZ[ks];
+      unsigned int ktn     = kIndex;
+      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    = kIndex;
+      unsigned int kbsw    = neighborZ[ksw];
+      ////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Fs
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Buffer Fs
+      Distributions27 Dbuff;
+      Dbuff.f[dP00] = &bufferFs[dP00 * buffmax];
+      Dbuff.f[dM00] = &bufferFs[dM00 * buffmax];
+      Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax];
+      Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax];
+      Dbuff.f[d00P] = &bufferFs[d00P * buffmax];
+      Dbuff.f[d00M] = &bufferFs[d00M * buffmax];
+      Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax];
+      Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax];
+      Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax];
+      Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax];
+      Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax];
+      Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax];
+      Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax];
+      Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax];
+      Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax];
+      Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax];
+      Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax];
+      Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax];
+      Dbuff.f[d000] = &bufferFs[d000 * buffmax];
+      Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax];
+      Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax];
+      Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax];
+      Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax];
+      Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax];
+      Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax];
+      Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax];
+      Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax];
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //copy to buffer
+      (Dbuff.f[dP00])[k] = (D.f[dP00])[ke   ];
+      (Dbuff.f[dM00])[k] = (D.f[dM00])[kw   ];
+      (Dbuff.f[d0P0])[k] = (D.f[d0P0])[kn   ];
+      (Dbuff.f[d0M0])[k] = (D.f[d0M0])[ks   ];
+      (Dbuff.f[d00P])[k] = (D.f[d00P])[kt   ];
+      (Dbuff.f[d00M])[k] = (D.f[d00M])[kb   ];
+      (Dbuff.f[dPP0])[k] = (D.f[dPP0])[kne  ];
+      (Dbuff.f[dMM0])[k] = (D.f[dMM0])[ksw  ];
+      (Dbuff.f[dPM0])[k] = (D.f[dPM0])[kse  ];
+      (Dbuff.f[dMP0])[k] = (D.f[dMP0])[knw  ];
+      (Dbuff.f[dP0P])[k] = (D.f[dP0P])[kte  ];
+      (Dbuff.f[dM0M])[k] = (D.f[dM0M])[kbw  ];
+      (Dbuff.f[dP0M])[k] = (D.f[dP0M])[kbe  ];
+      (Dbuff.f[dM0P])[k] = (D.f[dM0P])[ktw  ];
+      (Dbuff.f[d0PP])[k] = (D.f[d0PP])[ktn  ];
+      (Dbuff.f[d0MM])[k] = (D.f[d0MM])[kbs  ];
+      (Dbuff.f[d0PM])[k] = (D.f[d0PM])[kbn  ];
+      (Dbuff.f[d0MP])[k] = (D.f[d0MP])[kts  ];
+      (Dbuff.f[d000])[k] = (D.f[d000])[kzero];
+      (Dbuff.f[dPPP])[k] = (D.f[dPPP])[ktne ];
+      (Dbuff.f[dMMP])[k] = (D.f[dMMP])[ktsw ];
+      (Dbuff.f[dPMP])[k] = (D.f[dPMP])[ktse ];
+      (Dbuff.f[dMPP])[k] = (D.f[dMPP])[ktnw ];
+      (Dbuff.f[dPPM])[k] = (D.f[dPPM])[kbne ];
+      (Dbuff.f[dMMM])[k] = (D.f[dMMM])[kbsw ];
+      (Dbuff.f[dPMM])[k] = (D.f[dPMM])[kbse ];
+      (Dbuff.f[dMPM])[k] = (D.f[dMPM])[kbnw ];
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void setRecvFsPre27(real* DD,
+										  real* bufferFs,
+										  int* recvIndex,
+                                          int buffmax,
+                                          unsigned int* neighborX,
+                                          unsigned int* neighborY,
+                                          unsigned int* neighborZ,
+                                          unsigned long long 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 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<buffmax)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      //set index
+      unsigned int kIndex  = recvIndex[k];
+      unsigned int kzero   = kIndex;
+      unsigned int ke      = kIndex;
+      unsigned int kw      = neighborX[kIndex];
+      unsigned int kn      = kIndex;
+      unsigned int ks      = neighborY[kIndex];
+      unsigned int kt      = kIndex;
+      unsigned int kb      = neighborZ[kIndex];
+      unsigned int ksw     = neighborY[kw];
+      unsigned int kne     = kIndex;
+      unsigned int kse     = ks;
+      unsigned int knw     = kw;
+      unsigned int kbw     = neighborZ[kw];
+      unsigned int kte     = kIndex;
+      unsigned int kbe     = kb;
+      unsigned int ktw     = kw;
+      unsigned int kbs     = neighborZ[ks];
+      unsigned int ktn     = kIndex;
+      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    = kIndex;
+      unsigned int kbsw    = neighborZ[ksw];
+      ////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Fs
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //set Pointer for Buffer Fs
+      Distributions27 Dbuff;
+      Dbuff.f[dP00] = &bufferFs[dP00 * buffmax];
+      Dbuff.f[dM00] = &bufferFs[dM00 * buffmax];
+      Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax];
+      Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax];
+      Dbuff.f[d00P] = &bufferFs[d00P * buffmax];
+      Dbuff.f[d00M] = &bufferFs[d00M * buffmax];
+      Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax];
+      Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax];
+      Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax];
+      Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax];
+      Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax];
+      Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax];
+      Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax];
+      Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax];
+      Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax];
+      Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax];
+      Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax];
+      Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax];
+      Dbuff.f[d000] = &bufferFs[d000 * buffmax];
+      Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax];
+      Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax];
+      Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax];
+      Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax];
+      Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax];
+      Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax];
+      Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax];
+      Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax];
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //copy from buffer
+      (D.f[dP00])[ke   ] = (Dbuff.f[dP00])[k];
+      (D.f[dM00])[kw   ] = (Dbuff.f[dM00])[k];
+      (D.f[d0P0])[kn   ] = (Dbuff.f[d0P0])[k];
+      (D.f[d0M0])[ks   ] = (Dbuff.f[d0M0])[k];
+      (D.f[d00P])[kt   ] = (Dbuff.f[d00P])[k];
+      (D.f[d00M])[kb   ] = (Dbuff.f[d00M])[k];
+      (D.f[dPP0])[kne  ] = (Dbuff.f[dPP0])[k];
+      (D.f[dMM0])[ksw  ] = (Dbuff.f[dMM0])[k];
+      (D.f[dPM0])[kse  ] = (Dbuff.f[dPM0])[k];
+      (D.f[dMP0])[knw  ] = (Dbuff.f[dMP0])[k];
+      (D.f[dP0P])[kte  ] = (Dbuff.f[dP0P])[k];
+      (D.f[dM0M])[kbw  ] = (Dbuff.f[dM0M])[k];
+      (D.f[dP0M])[kbe  ] = (Dbuff.f[dP0M])[k];
+      (D.f[dM0P])[ktw  ] = (Dbuff.f[dM0P])[k];
+      (D.f[d0PP])[ktn  ] = (Dbuff.f[d0PP])[k];
+      (D.f[d0MM])[kbs  ] = (Dbuff.f[d0MM])[k];
+      (D.f[d0PM])[kbn  ] = (Dbuff.f[d0PM])[k];
+      (D.f[d0MP])[kts  ] = (Dbuff.f[d0MP])[k];
+      (D.f[d000])[kzero] = (Dbuff.f[d000])[k];
+      (D.f[dPPP])[ktne ] = (Dbuff.f[dPPP])[k];
+      (D.f[dMMP])[ktsw ] = (Dbuff.f[dMMP])[k];
+      (D.f[dPMP])[ktse ] = (Dbuff.f[dPMP])[k];
+      (D.f[dMPP])[ktnw ] = (Dbuff.f[dMPP])[k];
+      (D.f[dPPM])[kbne ] = (Dbuff.f[dPPM])[k];
+      (D.f[dMMM])[kbsw ] = (Dbuff.f[dMMM])[k];
+      (D.f[dPMM])[kbse ] = (Dbuff.f[dPMM])[k];
+      (D.f[dMPM])[kbnw ] = (Dbuff.f[dMPM])[k];
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void getSendGsF3(
+	real* G6,
+	real* bufferGs,
+	int* sendIndex,
+	int buffmax,
+	unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned long long 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 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if (k < buffmax)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		//set index
+		unsigned int kIndex = sendIndex[k];
+		unsigned int kr = kIndex;
+		unsigned int kw = neighborX[kIndex];
+		unsigned int ks = neighborY[kIndex];
+		unsigned int kb = neighborZ[kIndex];
+		////////////////////////////////////////////////////////////////////////////////
+		//set Pointer for Gs
+		Distributions6 G;
+		if (isEvenTimestep)
+		{
+			G.g[dP00] = &G6[dP00 * numberOfLBnodes];
+			G.g[dM00] = &G6[dM00 * numberOfLBnodes];
+			G.g[d0P0] = &G6[d0P0 * numberOfLBnodes];
+			G.g[d0M0] = &G6[d0M0 * numberOfLBnodes];
+			G.g[d00P] = &G6[d00P * numberOfLBnodes];
+			G.g[d00M] = &G6[d00M * numberOfLBnodes];
+		}
+		else
+		{
+			G.g[dM00] = &G6[dP00 * numberOfLBnodes];
+			G.g[dP00] = &G6[dM00 * numberOfLBnodes];
+			G.g[d0M0] = &G6[d0P0 * numberOfLBnodes];
+			G.g[d0P0] = &G6[d0M0 * numberOfLBnodes];
+			G.g[d00M] = &G6[d00P * numberOfLBnodes];
+			G.g[d00P] = &G6[d00M * numberOfLBnodes];
+		}
+		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//set Pointer for Buffer Gs
+		Distributions6 Dbuff;
+		Dbuff.g[dP00] = &bufferGs[dP00 * buffmax];
+		Dbuff.g[dM00] = &bufferGs[dM00 * buffmax];
+		Dbuff.g[d0P0] = &bufferGs[d0P0 * buffmax];
+		Dbuff.g[d0M0] = &bufferGs[d0M0 * buffmax];
+		Dbuff.g[d00P] = &bufferGs[d00P * buffmax];
+		Dbuff.g[d00M] = &bufferGs[d00M * buffmax];
+		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//write Gs to buffer
+		(Dbuff.g[dP00])[k] = (G.g[dM00])[kw];
+		(Dbuff.g[dM00])[k] = (G.g[dP00])[kr];
+		(Dbuff.g[d0P0])[k] = (G.g[d0M0])[ks];
+		(Dbuff.g[d0M0])[k] = (G.g[d0P0])[kr];
+		(Dbuff.g[d00P])[k] = (G.g[d00M])[kb];
+		(Dbuff.g[d00M])[k] = (G.g[d00P])[kr];
+	}
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void setRecvGsF3(
+	real* G6,
+	real* bufferGs,
+	int* recvIndex,
+	int buffmax,
+	unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned long long 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 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if (k < buffmax)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		//set index
+		unsigned int kIndex = recvIndex[k];
+		unsigned int kr = kIndex;
+		unsigned int kw = neighborX[kIndex];
+		unsigned int ks = neighborY[kIndex];
+		unsigned int kb = neighborZ[kIndex];
+		////////////////////////////////////////////////////////////////////////////////
+		//set Pointer for Gs
+		Distributions6 G;
+		if (isEvenTimestep)
+		{
+			G.g[dP00] = &G6[dP00 * numberOfLBnodes];
+			G.g[dM00] = &G6[dM00 * numberOfLBnodes];
+			G.g[d0P0] = &G6[d0P0 * numberOfLBnodes];
+			G.g[d0M0] = &G6[d0M0 * numberOfLBnodes];
+			G.g[d00P] = &G6[d00P * numberOfLBnodes];
+			G.g[d00M] = &G6[d00M * numberOfLBnodes];
+		}
+		else
+		{
+			G.g[dM00] = &G6[dP00 * numberOfLBnodes];
+			G.g[dP00] = &G6[dM00 * numberOfLBnodes];
+			G.g[d0M0] = &G6[d0P0 * numberOfLBnodes];
+			G.g[d0P0] = &G6[d0M0 * numberOfLBnodes];
+			G.g[d00M] = &G6[d00P * numberOfLBnodes];
+			G.g[d00P] = &G6[d00M * numberOfLBnodes];
+		}
+		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//set Pointer for Buffer Gs
+		Distributions6 Dbuff;
+		Dbuff.g[dP00] = &bufferGs[dP00 * buffmax];
+		Dbuff.g[dM00] = &bufferGs[dM00 * buffmax];
+		Dbuff.g[d0P0] = &bufferGs[d0P0 * buffmax];
+		Dbuff.g[d0M0] = &bufferGs[d0M0 * buffmax];
+		Dbuff.g[d00P] = &bufferGs[d00P * buffmax];
+		Dbuff.g[d00M] = &bufferGs[d00M * buffmax];
+		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//write buffer to Gs
+		(G.g[dM00])[kw] = (Dbuff.g[dP00])[k];
+		(G.g[dP00])[kr] = (Dbuff.g[dM00])[k];
+		(G.g[d0M0])[ks] = (Dbuff.g[d0P0])[k];
+		(G.g[d0P0])[kr] = (Dbuff.g[d0M0])[k];
+		(G.g[d00M])[kb] = (Dbuff.g[d00P])[k];
+		(G.g[d00P])[kr] = (Dbuff.g[d00M])[k];
+	}
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h b/src/gpu/core/GPU/GPU_Interface.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h
rename to src/gpu/core/GPU/GPU_Interface.h
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh b/src/gpu/core/GPU/GPU_Kernels.cuh
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh
rename to src/gpu/core/GPU/GPU_Kernels.cuh
index 941f8325297cd62480f36a6bb348e219bb07dd27..b8bb1f69ce80b31c4e2c3477ddeadee4bd9f4989 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh
+++ b/src/gpu/core/GPU/GPU_Kernels.cuh
@@ -207,7 +207,7 @@ __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
     bool EvenOrOdd);
 
 
-__global__ void LB_Kernel_PM_Cum_One_Comp_SP_27( real omega,
+__global__ void K15CompressibleNavierStokesPorousMedia_Device( real omega,
                                                             unsigned int* neighborX,
                                                             unsigned int* neighborY,
                                                             unsigned int* neighborZ,
@@ -222,7 +222,7 @@ __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27( real omega,
                                                             unsigned int* nodeIdsPorousMedia,
                                                             bool EvenOrOdd);
 
-__global__ void LB_Kernel_AD_Incomp_7( real diffusivity,
+__global__ void B12IncompressibleAdvectionDiffusionD3Q7_Device( real diffusivity,
                                                   unsigned int* bcMatD,
                                                   unsigned int* neighborX,
                                                   unsigned int* neighborY,
@@ -232,7 +232,7 @@ __global__ void LB_Kernel_AD_Incomp_7( real diffusivity,
                                                   unsigned long long numberOfLBnodes,
                                                   bool EvenOrOdd);
 
-__global__ void LB_Kernel_AD_Incomp_27( real diffusivity,
+__global__ void F16IncompressibleAdvectionDiffusion_Device( real diffusivity,
                                                    unsigned int* bcMatD,
                                                    unsigned int* neighborX,
                                                    unsigned int* neighborY,
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GeometryUtils.h b/src/gpu/core/GPU/GeometryUtils.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/GPU/GeometryUtils.h
rename to src/gpu/core/GPU/GeometryUtils.h
index d312c826036c1b5d856da0f0ab52832ba89c2f57..37fe00b6b67e1376e79500f4430db47736f18c46 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GeometryUtils.h
+++ b/src/gpu/core/GPU/GeometryUtils.h
@@ -1,9 +1,9 @@
 #ifndef _GEOMETRYUTILS_H
 #define _GEOMETRYUTILS_H
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 
 
-__inline__ __host__ __device__ void getNeighborIndicesOfBSW(  uint k, //index of DIR_MMM node
+__inline__ __host__ __device__ void getNeighborIndicesOfBSW(  uint k, //index of dMMM node
                                         uint &ke, uint &kn, uint &kt, uint &kne, uint &kte,uint &ktn, uint &ktne,
                                         uint* neighborX, uint* neighborY, uint* neighborZ)
 {
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GeometryUtilsTest.cu b/src/gpu/core/GPU/GeometryUtilsTest.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GeometryUtilsTest.cu
rename to src/gpu/core/GPU/GeometryUtilsTest.cu
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF27.cu b/src/gpu/core/GPU/GridScaling/ScaleCF27.cu
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF27.cu
rename to src/gpu/core/GPU/GridScaling/ScaleCF27.cu
index 4c586faa2fa60fe2894d86f97c680c5f0f11087b..222e29ae624facc3727ca4249cd4723b9dea7c85 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF27.cu
+++ b/src/gpu/core/GPU/GridScaling/ScaleCF27.cu
@@ -43,33 +43,33 @@ __global__ void scaleCF_0817_comp_27( real* DC,
 		*f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest;
 
 
-	fP00dest = &DF[DIR_P00 * numberOfLBnodesFine];
-	fM00dest = &DF[DIR_M00 * numberOfLBnodesFine];
-	f0P0dest = &DF[DIR_0P0 * numberOfLBnodesFine];
-	f0M0dest = &DF[DIR_0M0 * numberOfLBnodesFine];
-	f00Pdest = &DF[DIR_00P * numberOfLBnodesFine];
-	f00Mdest = &DF[DIR_00M * numberOfLBnodesFine];
-	fPP0dest = &DF[DIR_PP0 * numberOfLBnodesFine];
-	fMM0dest = &DF[DIR_MM0 * numberOfLBnodesFine];
-	fPM0dest = &DF[DIR_PM0 * numberOfLBnodesFine];
-	fMP0dest = &DF[DIR_MP0 * numberOfLBnodesFine];
-	fP0Pdest = &DF[DIR_P0P * numberOfLBnodesFine];
-	fM0Mdest = &DF[DIR_M0M * numberOfLBnodesFine];
-	fP0Mdest = &DF[DIR_P0M * numberOfLBnodesFine];
-	fM0Pdest = &DF[DIR_M0P * numberOfLBnodesFine];
-	f0PPdest = &DF[DIR_0PP * numberOfLBnodesFine];
-	f0MMdest = &DF[DIR_0MM * numberOfLBnodesFine];
-	f0PMdest = &DF[DIR_0PM * numberOfLBnodesFine];
-	f0MPdest = &DF[DIR_0MP * numberOfLBnodesFine];
-	f000dest = &DF[DIR_000 * numberOfLBnodesFine];
-	fMMMdest = &DF[DIR_MMM * numberOfLBnodesFine];
-	fMMPdest = &DF[DIR_MMP * numberOfLBnodesFine];
-	fMPPdest = &DF[DIR_MPP * numberOfLBnodesFine];
-	fMPMdest = &DF[DIR_MPM * numberOfLBnodesFine];
-	fPPMdest = &DF[DIR_PPM * numberOfLBnodesFine];
-	fPPPdest = &DF[DIR_PPP * numberOfLBnodesFine];
-	fPMPdest = &DF[DIR_PMP * numberOfLBnodesFine];
-	fPMMdest = &DF[DIR_PMM * numberOfLBnodesFine];
+	fP00dest = &DF[dP00 * numberOfLBnodesFine];
+	fM00dest = &DF[dM00 * numberOfLBnodesFine];
+	f0P0dest = &DF[d0P0 * numberOfLBnodesFine];
+	f0M0dest = &DF[d0M0 * numberOfLBnodesFine];
+	f00Pdest = &DF[d00P * numberOfLBnodesFine];
+	f00Mdest = &DF[d00M * numberOfLBnodesFine];
+	fPP0dest = &DF[dPP0 * numberOfLBnodesFine];
+	fMM0dest = &DF[dMM0 * numberOfLBnodesFine];
+	fPM0dest = &DF[dPM0 * numberOfLBnodesFine];
+	fMP0dest = &DF[dMP0 * numberOfLBnodesFine];
+	fP0Pdest = &DF[dP0P * numberOfLBnodesFine];
+	fM0Mdest = &DF[dM0M * numberOfLBnodesFine];
+	fP0Mdest = &DF[dP0M * numberOfLBnodesFine];
+	fM0Pdest = &DF[dM0P * numberOfLBnodesFine];
+	f0PPdest = &DF[d0PP * numberOfLBnodesFine];
+	f0MMdest = &DF[d0MM * numberOfLBnodesFine];
+	f0PMdest = &DF[d0PM * numberOfLBnodesFine];
+	f0MPdest = &DF[d0MP * numberOfLBnodesFine];
+	f000dest = &DF[d000 * numberOfLBnodesFine];
+	fMMMdest = &DF[dMMM * numberOfLBnodesFine];
+	fMMPdest = &DF[dMMP * numberOfLBnodesFine];
+	fMPPdest = &DF[dMPP * numberOfLBnodesFine];
+	fMPMdest = &DF[dMPM * numberOfLBnodesFine];
+	fPPMdest = &DF[dPPM * numberOfLBnodesFine];
+	fPPPdest = &DF[dPPP * numberOfLBnodesFine];
+	fPMPdest = &DF[dPMP * numberOfLBnodesFine];
+	fPMMdest = &DF[dPMM * numberOfLBnodesFine];
 
 	real
 		*fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source,
@@ -78,63 +78,63 @@ __global__ void scaleCF_0817_comp_27( real* DC,
 
 	if (isEvenTimestep == true)
 	{
-		fP00source = &DC[DIR_P00 * numberOfLBnodesCoarse];
-		fM00source = &DC[DIR_M00 * numberOfLBnodesCoarse];
-		f0P0source = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-		f0M0source = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-		f00Psource = &DC[DIR_00P * numberOfLBnodesCoarse];
-		f00Msource = &DC[DIR_00M * numberOfLBnodesCoarse];
-		fPP0source = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-		fMM0source = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-		fPM0source = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-		fMP0source = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-		fP0Psource = &DC[DIR_P0P * numberOfLBnodesCoarse];
-		fM0Msource = &DC[DIR_M0M * numberOfLBnodesCoarse];
-		fP0Msource = &DC[DIR_P0M * numberOfLBnodesCoarse];
-		fM0Psource = &DC[DIR_M0P * numberOfLBnodesCoarse];
-		f0PPsource = &DC[DIR_0PP * numberOfLBnodesCoarse];
-		f0MMsource = &DC[DIR_0MM * numberOfLBnodesCoarse];
-		f0PMsource = &DC[DIR_0PM * numberOfLBnodesCoarse];
-		f0MPsource = &DC[DIR_0MP * numberOfLBnodesCoarse];
-		f000source = &DC[DIR_000 * numberOfLBnodesCoarse];
-		fMMMsource = &DC[DIR_MMM * numberOfLBnodesCoarse];
-		fMMPsource = &DC[DIR_MMP * numberOfLBnodesCoarse];
-		fMPPsource = &DC[DIR_MPP * numberOfLBnodesCoarse];
-		fMPMsource = &DC[DIR_MPM * numberOfLBnodesCoarse];
-		fPPMsource = &DC[DIR_PPM * numberOfLBnodesCoarse];
-		fPPPsource = &DC[DIR_PPP * numberOfLBnodesCoarse];
-		fPMPsource = &DC[DIR_PMP * numberOfLBnodesCoarse];
-		fPMMsource = &DC[DIR_PMM * numberOfLBnodesCoarse];
+		fP00source = &DC[dP00 * numberOfLBnodesCoarse];
+		fM00source = &DC[dM00 * numberOfLBnodesCoarse];
+		f0P0source = &DC[d0P0 * numberOfLBnodesCoarse];
+		f0M0source = &DC[d0M0 * numberOfLBnodesCoarse];
+		f00Psource = &DC[d00P * numberOfLBnodesCoarse];
+		f00Msource = &DC[d00M * numberOfLBnodesCoarse];
+		fPP0source = &DC[dPP0 * numberOfLBnodesCoarse];
+		fMM0source = &DC[dMM0 * numberOfLBnodesCoarse];
+		fPM0source = &DC[dPM0 * numberOfLBnodesCoarse];
+		fMP0source = &DC[dMP0 * numberOfLBnodesCoarse];
+		fP0Psource = &DC[dP0P * numberOfLBnodesCoarse];
+		fM0Msource = &DC[dM0M * numberOfLBnodesCoarse];
+		fP0Msource = &DC[dP0M * numberOfLBnodesCoarse];
+		fM0Psource = &DC[dM0P * numberOfLBnodesCoarse];
+		f0PPsource = &DC[d0PP * numberOfLBnodesCoarse];
+		f0MMsource = &DC[d0MM * numberOfLBnodesCoarse];
+		f0PMsource = &DC[d0PM * numberOfLBnodesCoarse];
+		f0MPsource = &DC[d0MP * numberOfLBnodesCoarse];
+		f000source = &DC[d000 * numberOfLBnodesCoarse];
+		fMMMsource = &DC[dMMM * numberOfLBnodesCoarse];
+		fMMPsource = &DC[dMMP * numberOfLBnodesCoarse];
+		fMPPsource = &DC[dMPP * numberOfLBnodesCoarse];
+		fMPMsource = &DC[dMPM * numberOfLBnodesCoarse];
+		fPPMsource = &DC[dPPM * numberOfLBnodesCoarse];
+		fPPPsource = &DC[dPPP * numberOfLBnodesCoarse];
+		fPMPsource = &DC[dPMP * numberOfLBnodesCoarse];
+		fPMMsource = &DC[dPMM * numberOfLBnodesCoarse];
 	}
 	else
 	{
-		fP00source = &DC[DIR_M00 * numberOfLBnodesCoarse];
-		fM00source = &DC[DIR_P00 * numberOfLBnodesCoarse];
-		f0P0source = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-		f0M0source = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-		f00Psource = &DC[DIR_00M * numberOfLBnodesCoarse];
-		f00Msource = &DC[DIR_00P * numberOfLBnodesCoarse];
-		fPP0source = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-		fMM0source = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-		fPM0source = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-		fMP0source = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-		fP0Psource = &DC[DIR_M0M * numberOfLBnodesCoarse];
-		fM0Msource = &DC[DIR_P0P * numberOfLBnodesCoarse];
-		fP0Msource = &DC[DIR_M0P * numberOfLBnodesCoarse];
-		fM0Psource = &DC[DIR_P0M * numberOfLBnodesCoarse];
-		f0PPsource = &DC[DIR_0MM * numberOfLBnodesCoarse];
-		f0MMsource = &DC[DIR_0PP * numberOfLBnodesCoarse];
-		f0PMsource = &DC[DIR_0MP * numberOfLBnodesCoarse];
-		f0MPsource = &DC[DIR_0PM * numberOfLBnodesCoarse];
-		f000source = &DC[DIR_000 * numberOfLBnodesCoarse];
-		fMMMsource = &DC[DIR_PPP * numberOfLBnodesCoarse];
-		fMMPsource = &DC[DIR_PPM * numberOfLBnodesCoarse];
-		fMPPsource = &DC[DIR_PMM * numberOfLBnodesCoarse];
-		fMPMsource = &DC[DIR_PMP * numberOfLBnodesCoarse];
-		fPPMsource = &DC[DIR_MMP * numberOfLBnodesCoarse];
-		fPPPsource = &DC[DIR_MMM * numberOfLBnodesCoarse];
-		fPMPsource = &DC[DIR_MPM * numberOfLBnodesCoarse];
-		fPMMsource = &DC[DIR_MPP * numberOfLBnodesCoarse];
+		fP00source = &DC[dM00 * numberOfLBnodesCoarse];
+		fM00source = &DC[dP00 * numberOfLBnodesCoarse];
+		f0P0source = &DC[d0M0 * numberOfLBnodesCoarse];
+		f0M0source = &DC[d0P0 * numberOfLBnodesCoarse];
+		f00Psource = &DC[d00M * numberOfLBnodesCoarse];
+		f00Msource = &DC[d00P * numberOfLBnodesCoarse];
+		fPP0source = &DC[dMM0 * numberOfLBnodesCoarse];
+		fMM0source = &DC[dPP0 * numberOfLBnodesCoarse];
+		fPM0source = &DC[dMP0 * numberOfLBnodesCoarse];
+		fMP0source = &DC[dPM0 * numberOfLBnodesCoarse];
+		fP0Psource = &DC[dM0M * numberOfLBnodesCoarse];
+		fM0Msource = &DC[dP0P * numberOfLBnodesCoarse];
+		fP0Msource = &DC[dM0P * numberOfLBnodesCoarse];
+		fM0Psource = &DC[dP0M * numberOfLBnodesCoarse];
+		f0PPsource = &DC[d0MM * numberOfLBnodesCoarse];
+		f0MMsource = &DC[d0PP * numberOfLBnodesCoarse];
+		f0PMsource = &DC[d0MP * numberOfLBnodesCoarse];
+		f0MPsource = &DC[d0PM * numberOfLBnodesCoarse];
+		f000source = &DC[d000 * numberOfLBnodesCoarse];
+		fMMMsource = &DC[dPPP * numberOfLBnodesCoarse];
+		fMMPsource = &DC[dPPM * numberOfLBnodesCoarse];
+		fMPPsource = &DC[dPMM * numberOfLBnodesCoarse];
+		fMPMsource = &DC[dPMP * numberOfLBnodesCoarse];
+		fPPMsource = &DC[dMMP * numberOfLBnodesCoarse];
+		fPPPsource = &DC[dMMM * numberOfLBnodesCoarse];
+		fPMPsource = &DC[dMPM * numberOfLBnodesCoarse];
+		fPMMsource = &DC[dMPP * numberOfLBnodesCoarse];
 	}
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -4109,96 +4109,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -10992,96 +10992,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -17867,96 +17867,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -22151,96 +22151,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -26387,96 +26387,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -31154,96 +31154,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -35098,96 +35098,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -39356,96 +39356,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -41030,96 +41030,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -43261,96 +43261,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   //fzeroF = &DF[DIR_000 * size_MatF];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   //fzeroF = &DF[d000 * size_MatF];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      //fzeroC = &DC[DIR_000 * size_MatC];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      //fzeroC = &DC[d000 * size_MatC];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      //fzeroC = &DC[DIR_000 * size_MatC];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      //fzeroC = &DC[d000 * size_MatC];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
 
@@ -44487,96 +44487,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   //fzeroF = &DF[DIR_000 * size_MatF];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   //fzeroF = &DF[d000 * size_MatF];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      //fzeroC = &DC[DIR_000 * size_MatC];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      //fzeroC = &DC[d000 * size_MatC];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      //fzeroC = &DC[DIR_000 * size_MatC];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      //fzeroC = &DC[d000 * size_MatC];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
 
@@ -45611,188 +45611,188 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   //fzeroF = &DF[DIR_000 * size_MatF];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   //fzeroF = &DF[d000 * size_MatF];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      //fzeroC = &DC[DIR_000 * size_MatC];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      //fzeroC = &DC[d000 * size_MatC];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      //fzeroC = &DC[DIR_000 * size_MatC];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      //fzeroC = &DC[d000 * size_MatC];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
 
    Distributions27 D27F;
-   D27F.f[DIR_P00] = &DD27F[DIR_P00 * numberOfLBnodesFine];
-   D27F.f[DIR_M00] = &DD27F[DIR_M00 * numberOfLBnodesFine];
-   D27F.f[DIR_0P0] = &DD27F[DIR_0P0 * numberOfLBnodesFine];
-   D27F.f[DIR_0M0] = &DD27F[DIR_0M0 * numberOfLBnodesFine];
-   D27F.f[DIR_00P] = &DD27F[DIR_00P * numberOfLBnodesFine];
-   D27F.f[DIR_00M] = &DD27F[DIR_00M * numberOfLBnodesFine];
-   D27F.f[DIR_PP0] = &DD27F[DIR_PP0 * numberOfLBnodesFine];
-   D27F.f[DIR_MM0] = &DD27F[DIR_MM0 * numberOfLBnodesFine];
-   D27F.f[DIR_PM0] = &DD27F[DIR_PM0 * numberOfLBnodesFine];
-   D27F.f[DIR_MP0] = &DD27F[DIR_MP0 * numberOfLBnodesFine];
-   D27F.f[DIR_P0P] = &DD27F[DIR_P0P * numberOfLBnodesFine];
-   D27F.f[DIR_M0M] = &DD27F[DIR_M0M * numberOfLBnodesFine];
-   D27F.f[DIR_P0M] = &DD27F[DIR_P0M * numberOfLBnodesFine];
-   D27F.f[DIR_M0P] = &DD27F[DIR_M0P * numberOfLBnodesFine];
-   D27F.f[DIR_0PP] = &DD27F[DIR_0PP * numberOfLBnodesFine];
-   D27F.f[DIR_0MM] = &DD27F[DIR_0MM * numberOfLBnodesFine];
-   D27F.f[DIR_0PM] = &DD27F[DIR_0PM * numberOfLBnodesFine];
-   D27F.f[DIR_0MP] = &DD27F[DIR_0MP * numberOfLBnodesFine];
-   D27F.f[DIR_000] = &DD27F[DIR_000 * numberOfLBnodesFine];
-   D27F.f[DIR_PPP] = &DD27F[DIR_PPP * numberOfLBnodesFine];
-   D27F.f[DIR_MMP] = &DD27F[DIR_MMP * numberOfLBnodesFine];
-   D27F.f[DIR_PMP] = &DD27F[DIR_PMP * numberOfLBnodesFine];
-   D27F.f[DIR_MPP] = &DD27F[DIR_MPP * numberOfLBnodesFine];
-   D27F.f[DIR_PPM] = &DD27F[DIR_PPM * numberOfLBnodesFine];
-   D27F.f[DIR_MMM] = &DD27F[DIR_MMM * numberOfLBnodesFine];
-   D27F.f[DIR_PMM] = &DD27F[DIR_PMM * numberOfLBnodesFine];
-   D27F.f[DIR_MPM] = &DD27F[DIR_MPM * numberOfLBnodesFine];
+   D27F.f[dP00] = &DD27F[dP00 * numberOfLBnodesFine];
+   D27F.f[dM00] = &DD27F[dM00 * numberOfLBnodesFine];
+   D27F.f[d0P0] = &DD27F[d0P0 * numberOfLBnodesFine];
+   D27F.f[d0M0] = &DD27F[d0M0 * numberOfLBnodesFine];
+   D27F.f[d00P] = &DD27F[d00P * numberOfLBnodesFine];
+   D27F.f[d00M] = &DD27F[d00M * numberOfLBnodesFine];
+   D27F.f[dPP0] = &DD27F[dPP0 * numberOfLBnodesFine];
+   D27F.f[dMM0] = &DD27F[dMM0 * numberOfLBnodesFine];
+   D27F.f[dPM0] = &DD27F[dPM0 * numberOfLBnodesFine];
+   D27F.f[dMP0] = &DD27F[dMP0 * numberOfLBnodesFine];
+   D27F.f[dP0P] = &DD27F[dP0P * numberOfLBnodesFine];
+   D27F.f[dM0M] = &DD27F[dM0M * numberOfLBnodesFine];
+   D27F.f[dP0M] = &DD27F[dP0M * numberOfLBnodesFine];
+   D27F.f[dM0P] = &DD27F[dM0P * numberOfLBnodesFine];
+   D27F.f[d0PP] = &DD27F[d0PP * numberOfLBnodesFine];
+   D27F.f[d0MM] = &DD27F[d0MM * numberOfLBnodesFine];
+   D27F.f[d0PM] = &DD27F[d0PM * numberOfLBnodesFine];
+   D27F.f[d0MP] = &DD27F[d0MP * numberOfLBnodesFine];
+   D27F.f[d000] = &DD27F[d000 * numberOfLBnodesFine];
+   D27F.f[dPPP] = &DD27F[dPPP * numberOfLBnodesFine];
+   D27F.f[dMMP] = &DD27F[dMMP * numberOfLBnodesFine];
+   D27F.f[dPMP] = &DD27F[dPMP * numberOfLBnodesFine];
+   D27F.f[dMPP] = &DD27F[dMPP * numberOfLBnodesFine];
+   D27F.f[dPPM] = &DD27F[dPPM * numberOfLBnodesFine];
+   D27F.f[dMMM] = &DD27F[dMMM * numberOfLBnodesFine];
+   D27F.f[dPMM] = &DD27F[dPMM * numberOfLBnodesFine];
+   D27F.f[dMPM] = &DD27F[dMPM * numberOfLBnodesFine];
 
    Distributions27 D27C;
    if (isEvenTimestep==true)
    {
-      D27C.f[DIR_P00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_M00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0P0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0M0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_00P] = &DD27C[DIR_00P * numberOfLBnodesCoarse];
-      D27C.f[DIR_00M] = &DD27C[DIR_00M * numberOfLBnodesCoarse];
-      D27C.f[DIR_PP0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MM0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PM0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MP0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0P] = &DD27C[DIR_P0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0M] = &DD27C[DIR_M0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0M] = &DD27C[DIR_P0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0P] = &DD27C[DIR_M0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PP] = &DD27C[DIR_0PP * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MM] = &DD27C[DIR_0MM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PM] = &DD27C[DIR_0PM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MP] = &DD27C[DIR_0MP * numberOfLBnodesCoarse];
-      D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPP] = &DD27C[DIR_PPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMP] = &DD27C[DIR_MMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMP] = &DD27C[DIR_PMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPP] = &DD27C[DIR_MPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPM] = &DD27C[DIR_PPM * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMM] = &DD27C[DIR_MMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMM] = &DD27C[DIR_PMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPM] = &DD27C[DIR_MPM * numberOfLBnodesCoarse];
+      D27C.f[dP00] = &DD27C[dP00 * numberOfLBnodesCoarse];
+      D27C.f[dM00] = &DD27C[dM00 * numberOfLBnodesCoarse];
+      D27C.f[d0P0] = &DD27C[d0P0 * numberOfLBnodesCoarse];
+      D27C.f[d0M0] = &DD27C[d0M0 * numberOfLBnodesCoarse];
+      D27C.f[d00P] = &DD27C[d00P * numberOfLBnodesCoarse];
+      D27C.f[d00M] = &DD27C[d00M * numberOfLBnodesCoarse];
+      D27C.f[dPP0] = &DD27C[dPP0 * numberOfLBnodesCoarse];
+      D27C.f[dMM0] = &DD27C[dMM0 * numberOfLBnodesCoarse];
+      D27C.f[dPM0] = &DD27C[dPM0 * numberOfLBnodesCoarse];
+      D27C.f[dMP0] = &DD27C[dMP0 * numberOfLBnodesCoarse];
+      D27C.f[dP0P] = &DD27C[dP0P * numberOfLBnodesCoarse];
+      D27C.f[dM0M] = &DD27C[dM0M * numberOfLBnodesCoarse];
+      D27C.f[dP0M] = &DD27C[dP0M * numberOfLBnodesCoarse];
+      D27C.f[dM0P] = &DD27C[dM0P * numberOfLBnodesCoarse];
+      D27C.f[d0PP] = &DD27C[d0PP * numberOfLBnodesCoarse];
+      D27C.f[d0MM] = &DD27C[d0MM * numberOfLBnodesCoarse];
+      D27C.f[d0PM] = &DD27C[d0PM * numberOfLBnodesCoarse];
+      D27C.f[d0MP] = &DD27C[d0MP * numberOfLBnodesCoarse];
+      D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse];
+      D27C.f[dPPP] = &DD27C[dPPP * numberOfLBnodesCoarse];
+      D27C.f[dMMP] = &DD27C[dMMP * numberOfLBnodesCoarse];
+      D27C.f[dPMP] = &DD27C[dPMP * numberOfLBnodesCoarse];
+      D27C.f[dMPP] = &DD27C[dMPP * numberOfLBnodesCoarse];
+      D27C.f[dPPM] = &DD27C[dPPM * numberOfLBnodesCoarse];
+      D27C.f[dMMM] = &DD27C[dMMM * numberOfLBnodesCoarse];
+      D27C.f[dPMM] = &DD27C[dPMM * numberOfLBnodesCoarse];
+      D27C.f[dMPM] = &DD27C[dMPM * numberOfLBnodesCoarse];
    }
    else
    {
-      D27C.f[DIR_M00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_P00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0M0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0P0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_00M] = &DD27C[DIR_00P * numberOfLBnodesCoarse];
-      D27C.f[DIR_00P] = &DD27C[DIR_00M * numberOfLBnodesCoarse];
-      D27C.f[DIR_MM0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PP0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MP0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PM0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0M] = &DD27C[DIR_P0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0P] = &DD27C[DIR_M0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0P] = &DD27C[DIR_P0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0M] = &DD27C[DIR_M0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MM] = &DD27C[DIR_0PP * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PP] = &DD27C[DIR_0MM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MP] = &DD27C[DIR_0PM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PM] = &DD27C[DIR_0MP * numberOfLBnodesCoarse];
-      D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMM] = &DD27C[DIR_PPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPM] = &DD27C[DIR_MMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPM] = &DD27C[DIR_PMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMM] = &DD27C[DIR_MPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMP] = &DD27C[DIR_PPM * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPP] = &DD27C[DIR_MMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPP] = &DD27C[DIR_PMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMP] = &DD27C[DIR_MPM * numberOfLBnodesCoarse];
+      D27C.f[dM00] = &DD27C[dP00 * numberOfLBnodesCoarse];
+      D27C.f[dP00] = &DD27C[dM00 * numberOfLBnodesCoarse];
+      D27C.f[d0M0] = &DD27C[d0P0 * numberOfLBnodesCoarse];
+      D27C.f[d0P0] = &DD27C[d0M0 * numberOfLBnodesCoarse];
+      D27C.f[d00M] = &DD27C[d00P * numberOfLBnodesCoarse];
+      D27C.f[d00P] = &DD27C[d00M * numberOfLBnodesCoarse];
+      D27C.f[dMM0] = &DD27C[dPP0 * numberOfLBnodesCoarse];
+      D27C.f[dPP0] = &DD27C[dMM0 * numberOfLBnodesCoarse];
+      D27C.f[dMP0] = &DD27C[dPM0 * numberOfLBnodesCoarse];
+      D27C.f[dPM0] = &DD27C[dMP0 * numberOfLBnodesCoarse];
+      D27C.f[dM0M] = &DD27C[dP0P * numberOfLBnodesCoarse];
+      D27C.f[dP0P] = &DD27C[dM0M * numberOfLBnodesCoarse];
+      D27C.f[dM0P] = &DD27C[dP0M * numberOfLBnodesCoarse];
+      D27C.f[dP0M] = &DD27C[dM0P * numberOfLBnodesCoarse];
+      D27C.f[d0MM] = &DD27C[d0PP * numberOfLBnodesCoarse];
+      D27C.f[d0PP] = &DD27C[d0MM * numberOfLBnodesCoarse];
+      D27C.f[d0MP] = &DD27C[d0PM * numberOfLBnodesCoarse];
+      D27C.f[d0PM] = &DD27C[d0MP * numberOfLBnodesCoarse];
+      D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse];
+      D27C.f[dMMM] = &DD27C[dPPP * numberOfLBnodesCoarse];
+      D27C.f[dPPM] = &DD27C[dMMP * numberOfLBnodesCoarse];
+      D27C.f[dMPM] = &DD27C[dPMP * numberOfLBnodesCoarse];
+      D27C.f[dPMM] = &DD27C[dMPP * numberOfLBnodesCoarse];
+      D27C.f[dMMP] = &DD27C[dPPM * numberOfLBnodesCoarse];
+      D27C.f[dPPP] = &DD27C[dMMM * numberOfLBnodesCoarse];
+      D27C.f[dMPP] = &DD27C[dPMM * numberOfLBnodesCoarse];
+      D27C.f[dPMP] = &DD27C[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -45892,33 +45892,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_SWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -45979,33 +45979,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_SWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46066,33 +46066,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_SET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46153,33 +46153,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_SEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46250,33 +46250,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_NWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46337,33 +46337,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_NWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46424,33 +46424,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_NET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46511,33 +46511,33 @@ __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       ////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27C.f[DIR_M00])[kw   ];
-      f27N    =  (D27C.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27C.f[DIR_0M0])[ks   ];
-      f27T    =  (D27C.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27C.f[DIR_00M])[kb   ];
-      f27NE   =  (D27C.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27C.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27C.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27C.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27C.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27C.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27C.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27C.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27C.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27C.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27C.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27C.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27C.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27C.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27C.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27C.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27C.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27C.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27C.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27C.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27C.f[dP00])[kzero];//ke
+      f27W    =  (D27C.f[dM00])[kw   ];
+      f27N    =  (D27C.f[d0P0])[kzero];//kn
+      f27S    =  (D27C.f[d0M0])[ks   ];
+      f27T    =  (D27C.f[d00P])[kzero];//kt
+      f27B    =  (D27C.f[d00M])[kb   ];
+      f27NE   =  (D27C.f[dPP0])[kzero];//kne
+      f27SW   =  (D27C.f[dMM0])[ksw  ];
+      f27SE   =  (D27C.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27C.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27C.f[dP0P])[kzero];//kte
+      f27BW   =  (D27C.f[dM0M])[kbw  ];
+      f27BE   =  (D27C.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27C.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27C.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27C.f[d0MM])[kbs  ];
+      f27BN   =  (D27C.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27C.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27C.f[d000])[kzero];//kzero
+      f27TNE   = (D27C.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27C.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27C.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27C.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27C.f[dMMM])[kbsw ];
+      f27BSE   = (D27C.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27C.f[dMPM])[kbw  ];//kbnw
 
       Conc_C_NEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46655,33 +46655,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46733,33 +46733,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46811,33 +46811,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46889,33 +46889,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46977,33 +46977,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -47055,33 +47055,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -47133,33 +47133,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -47211,33 +47211,33 @@ __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[DIR_000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[d000])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -47305,96 +47305,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -49014,96 +49014,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF_F3_27.cu b/src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF_F3_27.cu
rename to src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu
index a3044503b2e08b8bc713c7431c43a98395ec3298..5301e3c212c35f92c7fc23697f9b6badbbef4a69 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF_F3_27.cu
+++ b/src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu
@@ -44,33 +44,33 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 		*f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest;
 
 
-	fP00dest = &DF[DIR_P00 * numberOfLBnodesFine];
-	fM00dest = &DF[DIR_M00 * numberOfLBnodesFine];
-	f0P0dest = &DF[DIR_0P0 * numberOfLBnodesFine];
-	f0M0dest = &DF[DIR_0M0 * numberOfLBnodesFine];
-	f00Pdest = &DF[DIR_00P * numberOfLBnodesFine];
-	f00Mdest = &DF[DIR_00M * numberOfLBnodesFine];
-	fPP0dest = &DF[DIR_PP0 * numberOfLBnodesFine];
-	fMM0dest = &DF[DIR_MM0 * numberOfLBnodesFine];
-	fPM0dest = &DF[DIR_PM0 * numberOfLBnodesFine];
-	fMP0dest = &DF[DIR_MP0 * numberOfLBnodesFine];
-	fP0Pdest = &DF[DIR_P0P * numberOfLBnodesFine];
-	fM0Mdest = &DF[DIR_M0M * numberOfLBnodesFine];
-	fP0Mdest = &DF[DIR_P0M * numberOfLBnodesFine];
-	fM0Pdest = &DF[DIR_M0P * numberOfLBnodesFine];
-	f0PPdest = &DF[DIR_0PP * numberOfLBnodesFine];
-	f0MMdest = &DF[DIR_0MM * numberOfLBnodesFine];
-	f0PMdest = &DF[DIR_0PM * numberOfLBnodesFine];
-	f0MPdest = &DF[DIR_0MP * numberOfLBnodesFine];
-	f000dest = &DF[DIR_000 * numberOfLBnodesFine];
-	fMMMdest = &DF[DIR_MMM * numberOfLBnodesFine];
-	fMMPdest = &DF[DIR_MMP * numberOfLBnodesFine];
-	fMPPdest = &DF[DIR_MPP * numberOfLBnodesFine];
-	fMPMdest = &DF[DIR_MPM * numberOfLBnodesFine];
-	fPPMdest = &DF[DIR_PPM * numberOfLBnodesFine];
-	fPPPdest = &DF[DIR_PPP * numberOfLBnodesFine];
-	fPMPdest = &DF[DIR_PMP * numberOfLBnodesFine];
-	fPMMdest = &DF[DIR_PMM * numberOfLBnodesFine];
+	fP00dest = &DF[dP00 * numberOfLBnodesFine];
+	fM00dest = &DF[dM00 * numberOfLBnodesFine];
+	f0P0dest = &DF[d0P0 * numberOfLBnodesFine];
+	f0M0dest = &DF[d0M0 * numberOfLBnodesFine];
+	f00Pdest = &DF[d00P * numberOfLBnodesFine];
+	f00Mdest = &DF[d00M * numberOfLBnodesFine];
+	fPP0dest = &DF[dPP0 * numberOfLBnodesFine];
+	fMM0dest = &DF[dMM0 * numberOfLBnodesFine];
+	fPM0dest = &DF[dPM0 * numberOfLBnodesFine];
+	fMP0dest = &DF[dMP0 * numberOfLBnodesFine];
+	fP0Pdest = &DF[dP0P * numberOfLBnodesFine];
+	fM0Mdest = &DF[dM0M * numberOfLBnodesFine];
+	fP0Mdest = &DF[dP0M * numberOfLBnodesFine];
+	fM0Pdest = &DF[dM0P * numberOfLBnodesFine];
+	f0PPdest = &DF[d0PP * numberOfLBnodesFine];
+	f0MMdest = &DF[d0MM * numberOfLBnodesFine];
+	f0PMdest = &DF[d0PM * numberOfLBnodesFine];
+	f0MPdest = &DF[d0MP * numberOfLBnodesFine];
+	f000dest = &DF[d000 * numberOfLBnodesFine];
+	fMMMdest = &DF[dMMM * numberOfLBnodesFine];
+	fMMPdest = &DF[dMMP * numberOfLBnodesFine];
+	fMPPdest = &DF[dMPP * numberOfLBnodesFine];
+	fMPMdest = &DF[dMPM * numberOfLBnodesFine];
+	fPPMdest = &DF[dPPM * numberOfLBnodesFine];
+	fPPPdest = &DF[dPPP * numberOfLBnodesFine];
+	fPMPdest = &DF[dPMP * numberOfLBnodesFine];
+	fPMMdest = &DF[dPMM * numberOfLBnodesFine];
 
 	real
 		*fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source,
@@ -79,72 +79,72 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 
 	if (isEvenTimestep == true)
 	{
-		fP00source = &DC[DIR_P00 * numberOfLBnodesCoarse];
-		fM00source = &DC[DIR_M00 * numberOfLBnodesCoarse];
-		f0P0source = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-		f0M0source = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-		f00Psource = &DC[DIR_00P * numberOfLBnodesCoarse];
-		f00Msource = &DC[DIR_00M * numberOfLBnodesCoarse];
-		fPP0source = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-		fMM0source = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-		fPM0source = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-		fMP0source = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-		fP0Psource = &DC[DIR_P0P * numberOfLBnodesCoarse];
-		fM0Msource = &DC[DIR_M0M * numberOfLBnodesCoarse];
-		fP0Msource = &DC[DIR_P0M * numberOfLBnodesCoarse];
-		fM0Psource = &DC[DIR_M0P * numberOfLBnodesCoarse];
-		f0PPsource = &DC[DIR_0PP * numberOfLBnodesCoarse];
-		f0MMsource = &DC[DIR_0MM * numberOfLBnodesCoarse];
-		f0PMsource = &DC[DIR_0PM * numberOfLBnodesCoarse];
-		f0MPsource = &DC[DIR_0MP * numberOfLBnodesCoarse];
-		f000source = &DC[DIR_000 * numberOfLBnodesCoarse];
-		fMMMsource = &DC[DIR_MMM * numberOfLBnodesCoarse];
-		fMMPsource = &DC[DIR_MMP * numberOfLBnodesCoarse];
-		fMPPsource = &DC[DIR_MPP * numberOfLBnodesCoarse];
-		fMPMsource = &DC[DIR_MPM * numberOfLBnodesCoarse];
-		fPPMsource = &DC[DIR_PPM * numberOfLBnodesCoarse];
-		fPPPsource = &DC[DIR_PPP * numberOfLBnodesCoarse];
-		fPMPsource = &DC[DIR_PMP * numberOfLBnodesCoarse];
-		fPMMsource = &DC[DIR_PMM * numberOfLBnodesCoarse];
+		fP00source = &DC[dP00 * numberOfLBnodesCoarse];
+		fM00source = &DC[dM00 * numberOfLBnodesCoarse];
+		f0P0source = &DC[d0P0 * numberOfLBnodesCoarse];
+		f0M0source = &DC[d0M0 * numberOfLBnodesCoarse];
+		f00Psource = &DC[d00P * numberOfLBnodesCoarse];
+		f00Msource = &DC[d00M * numberOfLBnodesCoarse];
+		fPP0source = &DC[dPP0 * numberOfLBnodesCoarse];
+		fMM0source = &DC[dMM0 * numberOfLBnodesCoarse];
+		fPM0source = &DC[dPM0 * numberOfLBnodesCoarse];
+		fMP0source = &DC[dMP0 * numberOfLBnodesCoarse];
+		fP0Psource = &DC[dP0P * numberOfLBnodesCoarse];
+		fM0Msource = &DC[dM0M * numberOfLBnodesCoarse];
+		fP0Msource = &DC[dP0M * numberOfLBnodesCoarse];
+		fM0Psource = &DC[dM0P * numberOfLBnodesCoarse];
+		f0PPsource = &DC[d0PP * numberOfLBnodesCoarse];
+		f0MMsource = &DC[d0MM * numberOfLBnodesCoarse];
+		f0PMsource = &DC[d0PM * numberOfLBnodesCoarse];
+		f0MPsource = &DC[d0MP * numberOfLBnodesCoarse];
+		f000source = &DC[d000 * numberOfLBnodesCoarse];
+		fMMMsource = &DC[dMMM * numberOfLBnodesCoarse];
+		fMMPsource = &DC[dMMP * numberOfLBnodesCoarse];
+		fMPPsource = &DC[dMPP * numberOfLBnodesCoarse];
+		fMPMsource = &DC[dMPM * numberOfLBnodesCoarse];
+		fPPMsource = &DC[dPPM * numberOfLBnodesCoarse];
+		fPPPsource = &DC[dPPP * numberOfLBnodesCoarse];
+		fPMPsource = &DC[dPMP * numberOfLBnodesCoarse];
+		fPMMsource = &DC[dPMM * numberOfLBnodesCoarse];
 	}
 	else
 	{
-		fP00source = &DC[DIR_M00 * numberOfLBnodesCoarse];
-		fM00source = &DC[DIR_P00 * numberOfLBnodesCoarse];
-		f0P0source = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-		f0M0source = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-		f00Psource = &DC[DIR_00M * numberOfLBnodesCoarse];
-		f00Msource = &DC[DIR_00P * numberOfLBnodesCoarse];
-		fPP0source = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-		fMM0source = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-		fPM0source = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-		fMP0source = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-		fP0Psource = &DC[DIR_M0M * numberOfLBnodesCoarse];
-		fM0Msource = &DC[DIR_P0P * numberOfLBnodesCoarse];
-		fP0Msource = &DC[DIR_M0P * numberOfLBnodesCoarse];
-		fM0Psource = &DC[DIR_P0M * numberOfLBnodesCoarse];
-		f0PPsource = &DC[DIR_0MM * numberOfLBnodesCoarse];
-		f0MMsource = &DC[DIR_0PP * numberOfLBnodesCoarse];
-		f0PMsource = &DC[DIR_0MP * numberOfLBnodesCoarse];
-		f0MPsource = &DC[DIR_0PM * numberOfLBnodesCoarse];
-		f000source = &DC[DIR_000 * numberOfLBnodesCoarse];
-		fMMMsource = &DC[DIR_PPP * numberOfLBnodesCoarse];
-		fMMPsource = &DC[DIR_PPM * numberOfLBnodesCoarse];
-		fMPPsource = &DC[DIR_PMM * numberOfLBnodesCoarse];
-		fMPMsource = &DC[DIR_PMP * numberOfLBnodesCoarse];
-		fPPMsource = &DC[DIR_MMP * numberOfLBnodesCoarse];
-		fPPPsource = &DC[DIR_MMM * numberOfLBnodesCoarse];
-		fPMPsource = &DC[DIR_MPM * numberOfLBnodesCoarse];
-		fPMMsource = &DC[DIR_MPP * numberOfLBnodesCoarse];
+		fP00source = &DC[dM00 * numberOfLBnodesCoarse];
+		fM00source = &DC[dP00 * numberOfLBnodesCoarse];
+		f0P0source = &DC[d0M0 * numberOfLBnodesCoarse];
+		f0M0source = &DC[d0P0 * numberOfLBnodesCoarse];
+		f00Psource = &DC[d00M * numberOfLBnodesCoarse];
+		f00Msource = &DC[d00P * numberOfLBnodesCoarse];
+		fPP0source = &DC[dMM0 * numberOfLBnodesCoarse];
+		fMM0source = &DC[dPP0 * numberOfLBnodesCoarse];
+		fPM0source = &DC[dMP0 * numberOfLBnodesCoarse];
+		fMP0source = &DC[dPM0 * numberOfLBnodesCoarse];
+		fP0Psource = &DC[dM0M * numberOfLBnodesCoarse];
+		fM0Msource = &DC[dP0P * numberOfLBnodesCoarse];
+		fP0Msource = &DC[dM0P * numberOfLBnodesCoarse];
+		fM0Psource = &DC[dP0M * numberOfLBnodesCoarse];
+		f0PPsource = &DC[d0MM * numberOfLBnodesCoarse];
+		f0MMsource = &DC[d0PP * numberOfLBnodesCoarse];
+		f0PMsource = &DC[d0MP * numberOfLBnodesCoarse];
+		f0MPsource = &DC[d0PM * numberOfLBnodesCoarse];
+		f000source = &DC[d000 * numberOfLBnodesCoarse];
+		fMMMsource = &DC[dPPP * numberOfLBnodesCoarse];
+		fMMPsource = &DC[dPPM * numberOfLBnodesCoarse];
+		fMPPsource = &DC[dPMM * numberOfLBnodesCoarse];
+		fMPMsource = &DC[dPMP * numberOfLBnodesCoarse];
+		fPPMsource = &DC[dMMP * numberOfLBnodesCoarse];
+		fPPPsource = &DC[dMMM * numberOfLBnodesCoarse];
+		fPMPsource = &DC[dMPM * numberOfLBnodesCoarse];
+		fPMMsource = &DC[dMPP * numberOfLBnodesCoarse];
 	}
 
 	Distributions6 G;
-	G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesFine];
-	G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesFine];
-	G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesFine];
-	G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesFine];
-	G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesFine];
-	G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesFine];
+	G.g[dP00] = &G6[dP00 * numberOfLBnodesFine];
+	G.g[dM00] = &G6[dM00 * numberOfLBnodesFine];
+	G.g[d0P0] = &G6[d0P0 * numberOfLBnodesFine];
+	G.g[d0M0] = &G6[d0M0 * numberOfLBnodesFine];
+	G.g[d00P] = &G6[d00P * numberOfLBnodesFine];
+	G.g[d00M] = &G6[d00M * numberOfLBnodesFine];
 
 	////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -1187,12 +1187,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -1623,12 +1623,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -2062,12 +2062,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -2501,12 +2501,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -2950,12 +2950,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -3389,12 +3389,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -3828,12 +3828,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -4267,12 +4267,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -4391,33 +4391,33 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 		*f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest;
 
 
-	fP00dest = &DF[DIR_P00 * numberOfLBnodesFine];
-	fM00dest = &DF[DIR_M00 * numberOfLBnodesFine];
-	f0P0dest = &DF[DIR_0P0 * numberOfLBnodesFine];
-	f0M0dest = &DF[DIR_0M0 * numberOfLBnodesFine];
-	f00Pdest = &DF[DIR_00P * numberOfLBnodesFine];
-	f00Mdest = &DF[DIR_00M * numberOfLBnodesFine];
-	fPP0dest = &DF[DIR_PP0 * numberOfLBnodesFine];
-	fMM0dest = &DF[DIR_MM0 * numberOfLBnodesFine];
-	fPM0dest = &DF[DIR_PM0 * numberOfLBnodesFine];
-	fMP0dest = &DF[DIR_MP0 * numberOfLBnodesFine];
-	fP0Pdest = &DF[DIR_P0P * numberOfLBnodesFine];
-	fM0Mdest = &DF[DIR_M0M * numberOfLBnodesFine];
-	fP0Mdest = &DF[DIR_P0M * numberOfLBnodesFine];
-	fM0Pdest = &DF[DIR_M0P * numberOfLBnodesFine];
-	f0PPdest = &DF[DIR_0PP * numberOfLBnodesFine];
-	f0MMdest = &DF[DIR_0MM * numberOfLBnodesFine];
-	f0PMdest = &DF[DIR_0PM * numberOfLBnodesFine];
-	f0MPdest = &DF[DIR_0MP * numberOfLBnodesFine];
-	f000dest = &DF[DIR_000 * numberOfLBnodesFine];
-	fMMMdest = &DF[DIR_MMM * numberOfLBnodesFine];
-	fMMPdest = &DF[DIR_MMP * numberOfLBnodesFine];
-	fMPPdest = &DF[DIR_MPP * numberOfLBnodesFine];
-	fMPMdest = &DF[DIR_MPM * numberOfLBnodesFine];
-	fPPMdest = &DF[DIR_PPM * numberOfLBnodesFine];
-	fPPPdest = &DF[DIR_PPP * numberOfLBnodesFine];
-	fPMPdest = &DF[DIR_PMP * numberOfLBnodesFine];
-	fPMMdest = &DF[DIR_PMM * numberOfLBnodesFine];
+	fP00dest = &DF[dP00 * numberOfLBnodesFine];
+	fM00dest = &DF[dM00 * numberOfLBnodesFine];
+	f0P0dest = &DF[d0P0 * numberOfLBnodesFine];
+	f0M0dest = &DF[d0M0 * numberOfLBnodesFine];
+	f00Pdest = &DF[d00P * numberOfLBnodesFine];
+	f00Mdest = &DF[d00M * numberOfLBnodesFine];
+	fPP0dest = &DF[dPP0 * numberOfLBnodesFine];
+	fMM0dest = &DF[dMM0 * numberOfLBnodesFine];
+	fPM0dest = &DF[dPM0 * numberOfLBnodesFine];
+	fMP0dest = &DF[dMP0 * numberOfLBnodesFine];
+	fP0Pdest = &DF[dP0P * numberOfLBnodesFine];
+	fM0Mdest = &DF[dM0M * numberOfLBnodesFine];
+	fP0Mdest = &DF[dP0M * numberOfLBnodesFine];
+	fM0Pdest = &DF[dM0P * numberOfLBnodesFine];
+	f0PPdest = &DF[d0PP * numberOfLBnodesFine];
+	f0MMdest = &DF[d0MM * numberOfLBnodesFine];
+	f0PMdest = &DF[d0PM * numberOfLBnodesFine];
+	f0MPdest = &DF[d0MP * numberOfLBnodesFine];
+	f000dest = &DF[d000 * numberOfLBnodesFine];
+	fMMMdest = &DF[dMMM * numberOfLBnodesFine];
+	fMMPdest = &DF[dMMP * numberOfLBnodesFine];
+	fMPPdest = &DF[dMPP * numberOfLBnodesFine];
+	fMPMdest = &DF[dMPM * numberOfLBnodesFine];
+	fPPMdest = &DF[dPPM * numberOfLBnodesFine];
+	fPPPdest = &DF[dPPP * numberOfLBnodesFine];
+	fPMPdest = &DF[dPMP * numberOfLBnodesFine];
+	fPMMdest = &DF[dPMM * numberOfLBnodesFine];
 
 	real
 		*fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source,
@@ -4426,72 +4426,72 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 
 	if (isEvenTimestep == true)
 	{
-		fP00source = &DC[DIR_P00 * numberOfLBnodesCoarse];
-		fM00source = &DC[DIR_M00 * numberOfLBnodesCoarse];
-		f0P0source = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-		f0M0source = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-		f00Psource = &DC[DIR_00P * numberOfLBnodesCoarse];
-		f00Msource = &DC[DIR_00M * numberOfLBnodesCoarse];
-		fPP0source = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-		fMM0source = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-		fPM0source = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-		fMP0source = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-		fP0Psource = &DC[DIR_P0P * numberOfLBnodesCoarse];
-		fM0Msource = &DC[DIR_M0M * numberOfLBnodesCoarse];
-		fP0Msource = &DC[DIR_P0M * numberOfLBnodesCoarse];
-		fM0Psource = &DC[DIR_M0P * numberOfLBnodesCoarse];
-		f0PPsource = &DC[DIR_0PP * numberOfLBnodesCoarse];
-		f0MMsource = &DC[DIR_0MM * numberOfLBnodesCoarse];
-		f0PMsource = &DC[DIR_0PM * numberOfLBnodesCoarse];
-		f0MPsource = &DC[DIR_0MP * numberOfLBnodesCoarse];
-		f000source = &DC[DIR_000 * numberOfLBnodesCoarse];
-		fMMMsource = &DC[DIR_MMM * numberOfLBnodesCoarse];
-		fMMPsource = &DC[DIR_MMP * numberOfLBnodesCoarse];
-		fMPPsource = &DC[DIR_MPP * numberOfLBnodesCoarse];
-		fMPMsource = &DC[DIR_MPM * numberOfLBnodesCoarse];
-		fPPMsource = &DC[DIR_PPM * numberOfLBnodesCoarse];
-		fPPPsource = &DC[DIR_PPP * numberOfLBnodesCoarse];
-		fPMPsource = &DC[DIR_PMP * numberOfLBnodesCoarse];
-		fPMMsource = &DC[DIR_PMM * numberOfLBnodesCoarse];
+		fP00source = &DC[dP00 * numberOfLBnodesCoarse];
+		fM00source = &DC[dM00 * numberOfLBnodesCoarse];
+		f0P0source = &DC[d0P0 * numberOfLBnodesCoarse];
+		f0M0source = &DC[d0M0 * numberOfLBnodesCoarse];
+		f00Psource = &DC[d00P * numberOfLBnodesCoarse];
+		f00Msource = &DC[d00M * numberOfLBnodesCoarse];
+		fPP0source = &DC[dPP0 * numberOfLBnodesCoarse];
+		fMM0source = &DC[dMM0 * numberOfLBnodesCoarse];
+		fPM0source = &DC[dPM0 * numberOfLBnodesCoarse];
+		fMP0source = &DC[dMP0 * numberOfLBnodesCoarse];
+		fP0Psource = &DC[dP0P * numberOfLBnodesCoarse];
+		fM0Msource = &DC[dM0M * numberOfLBnodesCoarse];
+		fP0Msource = &DC[dP0M * numberOfLBnodesCoarse];
+		fM0Psource = &DC[dM0P * numberOfLBnodesCoarse];
+		f0PPsource = &DC[d0PP * numberOfLBnodesCoarse];
+		f0MMsource = &DC[d0MM * numberOfLBnodesCoarse];
+		f0PMsource = &DC[d0PM * numberOfLBnodesCoarse];
+		f0MPsource = &DC[d0MP * numberOfLBnodesCoarse];
+		f000source = &DC[d000 * numberOfLBnodesCoarse];
+		fMMMsource = &DC[dMMM * numberOfLBnodesCoarse];
+		fMMPsource = &DC[dMMP * numberOfLBnodesCoarse];
+		fMPPsource = &DC[dMPP * numberOfLBnodesCoarse];
+		fMPMsource = &DC[dMPM * numberOfLBnodesCoarse];
+		fPPMsource = &DC[dPPM * numberOfLBnodesCoarse];
+		fPPPsource = &DC[dPPP * numberOfLBnodesCoarse];
+		fPMPsource = &DC[dPMP * numberOfLBnodesCoarse];
+		fPMMsource = &DC[dPMM * numberOfLBnodesCoarse];
 	}
 	else
 	{
-		fP00source = &DC[DIR_M00 * numberOfLBnodesCoarse];
-		fM00source = &DC[DIR_P00 * numberOfLBnodesCoarse];
-		f0P0source = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-		f0M0source = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-		f00Psource = &DC[DIR_00M * numberOfLBnodesCoarse];
-		f00Msource = &DC[DIR_00P * numberOfLBnodesCoarse];
-		fPP0source = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-		fMM0source = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-		fPM0source = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-		fMP0source = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-		fP0Psource = &DC[DIR_M0M * numberOfLBnodesCoarse];
-		fM0Msource = &DC[DIR_P0P * numberOfLBnodesCoarse];
-		fP0Msource = &DC[DIR_M0P * numberOfLBnodesCoarse];
-		fM0Psource = &DC[DIR_P0M * numberOfLBnodesCoarse];
-		f0PPsource = &DC[DIR_0MM * numberOfLBnodesCoarse];
-		f0MMsource = &DC[DIR_0PP * numberOfLBnodesCoarse];
-		f0PMsource = &DC[DIR_0MP * numberOfLBnodesCoarse];
-		f0MPsource = &DC[DIR_0PM * numberOfLBnodesCoarse];
-		f000source = &DC[DIR_000 * numberOfLBnodesCoarse];
-		fMMMsource = &DC[DIR_PPP * numberOfLBnodesCoarse];
-		fMMPsource = &DC[DIR_PPM * numberOfLBnodesCoarse];
-		fMPPsource = &DC[DIR_PMM * numberOfLBnodesCoarse];
-		fMPMsource = &DC[DIR_PMP * numberOfLBnodesCoarse];
-		fPPMsource = &DC[DIR_MMP * numberOfLBnodesCoarse];
-		fPPPsource = &DC[DIR_MMM * numberOfLBnodesCoarse];
-		fPMPsource = &DC[DIR_MPM * numberOfLBnodesCoarse];
-		fPMMsource = &DC[DIR_MPP * numberOfLBnodesCoarse];
+		fP00source = &DC[dM00 * numberOfLBnodesCoarse];
+		fM00source = &DC[dP00 * numberOfLBnodesCoarse];
+		f0P0source = &DC[d0M0 * numberOfLBnodesCoarse];
+		f0M0source = &DC[d0P0 * numberOfLBnodesCoarse];
+		f00Psource = &DC[d00M * numberOfLBnodesCoarse];
+		f00Msource = &DC[d00P * numberOfLBnodesCoarse];
+		fPP0source = &DC[dMM0 * numberOfLBnodesCoarse];
+		fMM0source = &DC[dPP0 * numberOfLBnodesCoarse];
+		fPM0source = &DC[dMP0 * numberOfLBnodesCoarse];
+		fMP0source = &DC[dPM0 * numberOfLBnodesCoarse];
+		fP0Psource = &DC[dM0M * numberOfLBnodesCoarse];
+		fM0Msource = &DC[dP0P * numberOfLBnodesCoarse];
+		fP0Msource = &DC[dM0P * numberOfLBnodesCoarse];
+		fM0Psource = &DC[dP0M * numberOfLBnodesCoarse];
+		f0PPsource = &DC[d0MM * numberOfLBnodesCoarse];
+		f0MMsource = &DC[d0PP * numberOfLBnodesCoarse];
+		f0PMsource = &DC[d0MP * numberOfLBnodesCoarse];
+		f0MPsource = &DC[d0PM * numberOfLBnodesCoarse];
+		f000source = &DC[d000 * numberOfLBnodesCoarse];
+		fMMMsource = &DC[dPPP * numberOfLBnodesCoarse];
+		fMMPsource = &DC[dPPM * numberOfLBnodesCoarse];
+		fMPPsource = &DC[dPMM * numberOfLBnodesCoarse];
+		fMPMsource = &DC[dPMP * numberOfLBnodesCoarse];
+		fPPMsource = &DC[dMMP * numberOfLBnodesCoarse];
+		fPPPsource = &DC[dMMM * numberOfLBnodesCoarse];
+		fPMPsource = &DC[dMPM * numberOfLBnodesCoarse];
+		fPMMsource = &DC[dMPP * numberOfLBnodesCoarse];
 	}
 
 	Distributions6 G;
-	G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesFine];
-	G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesFine];
-	G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesFine];
-	G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesFine];
-	G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesFine];
-	G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesFine];
+	G.g[dP00] = &G6[dP00 * numberOfLBnodesFine];
+	G.g[dM00] = &G6[dM00 * numberOfLBnodesFine];
+	G.g[d0P0] = &G6[d0P0 * numberOfLBnodesFine];
+	G.g[d0M0] = &G6[d0M0 * numberOfLBnodesFine];
+	G.g[d00P] = &G6[d00P * numberOfLBnodesFine];
+	G.g[d00M] = &G6[d00M * numberOfLBnodesFine];
 
 	////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -5522,12 +5522,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -5949,12 +5949,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -6379,12 +6379,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -6809,12 +6809,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -7249,12 +7249,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -7679,12 +7679,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -8109,12 +8109,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -8539,12 +8539,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC27.cu b/src/gpu/core/GPU/GridScaling/ScaleFC27.cu
similarity index 93%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC27.cu
rename to src/gpu/core/GPU/GridScaling/ScaleFC27.cu
index 08c47230faa5ffeed0b996e2b1125d3c45e6bce1..803cf0bc4197d4e31b28899254f3d85a830efeff 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC27.cu
+++ b/src/gpu/core/GPU/GridScaling/ScaleFC27.cu
@@ -43,33 +43,33 @@ __global__ void scaleFC_0817_comp_27( real* DC,
 	   *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource;
 
 
-   fP00source = &DF[DIR_P00 * numberOfLBnodesFine];
-   fM00source = &DF[DIR_M00 * numberOfLBnodesFine];
-   f0P0source = &DF[DIR_0P0 * numberOfLBnodesFine];
-   f0M0source = &DF[DIR_0M0 * numberOfLBnodesFine];
-   f00Psource = &DF[DIR_00P * numberOfLBnodesFine];
-   f00Msource = &DF[DIR_00M * numberOfLBnodesFine];
-   fPP0source = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fMM0source = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fPM0source = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fMP0source = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fP0Psource = &DF[DIR_P0P * numberOfLBnodesFine];
-   fM0Msource = &DF[DIR_M0M * numberOfLBnodesFine];
-   fP0Msource = &DF[DIR_P0M * numberOfLBnodesFine];
-   fM0Psource = &DF[DIR_M0P * numberOfLBnodesFine];
-   f0PPsource = &DF[DIR_0PP * numberOfLBnodesFine];
-   f0MMsource = &DF[DIR_0MM * numberOfLBnodesFine];
-   f0PMsource = &DF[DIR_0PM * numberOfLBnodesFine];
-   f0MPsource = &DF[DIR_0MP * numberOfLBnodesFine];
-   f000source = &DF[DIR_000 * numberOfLBnodesFine];
-   fMMMsource = &DF[DIR_MMM * numberOfLBnodesFine];
-   fMMPsource = &DF[DIR_MMP * numberOfLBnodesFine];
-   fMPPsource = &DF[DIR_MPP * numberOfLBnodesFine];
-   fMPMsource = &DF[DIR_MPM * numberOfLBnodesFine];
-   fPPMsource = &DF[DIR_PPM * numberOfLBnodesFine];
-   fPPPsource = &DF[DIR_PPP * numberOfLBnodesFine];
-   fPMPsource = &DF[DIR_PMP * numberOfLBnodesFine];
-   fPMMsource = &DF[DIR_PMM * numberOfLBnodesFine];
+   fP00source = &DF[dP00 * numberOfLBnodesFine];
+   fM00source = &DF[dM00 * numberOfLBnodesFine];
+   f0P0source = &DF[d0P0 * numberOfLBnodesFine];
+   f0M0source = &DF[d0M0 * numberOfLBnodesFine];
+   f00Psource = &DF[d00P * numberOfLBnodesFine];
+   f00Msource = &DF[d00M * numberOfLBnodesFine];
+   fPP0source = &DF[dPP0 * numberOfLBnodesFine];
+   fMM0source = &DF[dMM0 * numberOfLBnodesFine];
+   fPM0source = &DF[dPM0 * numberOfLBnodesFine];
+   fMP0source = &DF[dMP0 * numberOfLBnodesFine];
+   fP0Psource = &DF[dP0P * numberOfLBnodesFine];
+   fM0Msource = &DF[dM0M * numberOfLBnodesFine];
+   fP0Msource = &DF[dP0M * numberOfLBnodesFine];
+   fM0Psource = &DF[dM0P * numberOfLBnodesFine];
+   f0PPsource = &DF[d0PP * numberOfLBnodesFine];
+   f0MMsource = &DF[d0MM * numberOfLBnodesFine];
+   f0PMsource = &DF[d0PM * numberOfLBnodesFine];
+   f0MPsource = &DF[d0MP * numberOfLBnodesFine];
+   f000source = &DF[d000 * numberOfLBnodesFine];
+   fMMMsource = &DF[dMMM * numberOfLBnodesFine];
+   fMMPsource = &DF[dMMP * numberOfLBnodesFine];
+   fMPPsource = &DF[dMPP * numberOfLBnodesFine];
+   fMPMsource = &DF[dMPM * numberOfLBnodesFine];
+   fPPMsource = &DF[dPPM * numberOfLBnodesFine];
+   fPPPsource = &DF[dPPP * numberOfLBnodesFine];
+   fPMPsource = &DF[dPMP * numberOfLBnodesFine];
+   fPMMsource = &DF[dPMM * numberOfLBnodesFine];
 
    real
 	   *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest,
@@ -78,63 +78,63 @@ __global__ void scaleFC_0817_comp_27( real* DC,
 
    if (isEvenTimestep==true)
    {
-	   fP00dest = &DC[DIR_P00 * numberOfLBnodesCoarse];
-	   fM00dest = &DC[DIR_M00 * numberOfLBnodesCoarse];
-	   f0P0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-	   f0M0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-	   f00Pdest = &DC[DIR_00P * numberOfLBnodesCoarse];
-	   f00Mdest = &DC[DIR_00M * numberOfLBnodesCoarse];
-	   fPP0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-	   fMM0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-	   fPM0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-	   fMP0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-	   fP0Pdest = &DC[DIR_P0P * numberOfLBnodesCoarse];
-	   fM0Mdest = &DC[DIR_M0M * numberOfLBnodesCoarse];
-	   fP0Mdest = &DC[DIR_P0M * numberOfLBnodesCoarse];
-	   fM0Pdest = &DC[DIR_M0P * numberOfLBnodesCoarse];
-	   f0PPdest = &DC[DIR_0PP * numberOfLBnodesCoarse];
-	   f0MMdest = &DC[DIR_0MM * numberOfLBnodesCoarse];
-	   f0PMdest = &DC[DIR_0PM * numberOfLBnodesCoarse];
-	   f0MPdest = &DC[DIR_0MP * numberOfLBnodesCoarse];
-	   f000dest = &DC[DIR_000 * numberOfLBnodesCoarse];
-	   fMMMdest = &DC[DIR_MMM * numberOfLBnodesCoarse];
-	   fMMPdest = &DC[DIR_MMP * numberOfLBnodesCoarse];
-	   fMPPdest = &DC[DIR_MPP * numberOfLBnodesCoarse];
-	   fMPMdest = &DC[DIR_MPM * numberOfLBnodesCoarse];
-	   fPPMdest = &DC[DIR_PPM * numberOfLBnodesCoarse];
-	   fPPPdest = &DC[DIR_PPP * numberOfLBnodesCoarse];
-	   fPMPdest = &DC[DIR_PMP * numberOfLBnodesCoarse];
-	   fPMMdest = &DC[DIR_PMM * numberOfLBnodesCoarse];
+	   fP00dest = &DC[dP00 * numberOfLBnodesCoarse];
+	   fM00dest = &DC[dM00 * numberOfLBnodesCoarse];
+	   f0P0dest = &DC[d0P0 * numberOfLBnodesCoarse];
+	   f0M0dest = &DC[d0M0 * numberOfLBnodesCoarse];
+	   f00Pdest = &DC[d00P * numberOfLBnodesCoarse];
+	   f00Mdest = &DC[d00M * numberOfLBnodesCoarse];
+	   fPP0dest = &DC[dPP0 * numberOfLBnodesCoarse];
+	   fMM0dest = &DC[dMM0 * numberOfLBnodesCoarse];
+	   fPM0dest = &DC[dPM0 * numberOfLBnodesCoarse];
+	   fMP0dest = &DC[dMP0 * numberOfLBnodesCoarse];
+	   fP0Pdest = &DC[dP0P * numberOfLBnodesCoarse];
+	   fM0Mdest = &DC[dM0M * numberOfLBnodesCoarse];
+	   fP0Mdest = &DC[dP0M * numberOfLBnodesCoarse];
+	   fM0Pdest = &DC[dM0P * numberOfLBnodesCoarse];
+	   f0PPdest = &DC[d0PP * numberOfLBnodesCoarse];
+	   f0MMdest = &DC[d0MM * numberOfLBnodesCoarse];
+	   f0PMdest = &DC[d0PM * numberOfLBnodesCoarse];
+	   f0MPdest = &DC[d0MP * numberOfLBnodesCoarse];
+	   f000dest = &DC[d000 * numberOfLBnodesCoarse];
+	   fMMMdest = &DC[dMMM * numberOfLBnodesCoarse];
+	   fMMPdest = &DC[dMMP * numberOfLBnodesCoarse];
+	   fMPPdest = &DC[dMPP * numberOfLBnodesCoarse];
+	   fMPMdest = &DC[dMPM * numberOfLBnodesCoarse];
+	   fPPMdest = &DC[dPPM * numberOfLBnodesCoarse];
+	   fPPPdest = &DC[dPPP * numberOfLBnodesCoarse];
+	   fPMPdest = &DC[dPMP * numberOfLBnodesCoarse];
+	   fPMMdest = &DC[dPMM * numberOfLBnodesCoarse];
    } 
    else
    {
-	   fP00dest = &DC[DIR_M00 * numberOfLBnodesCoarse];
-	   fM00dest = &DC[DIR_P00 * numberOfLBnodesCoarse];
-	   f0P0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-	   f0M0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-	   f00Pdest = &DC[DIR_00M * numberOfLBnodesCoarse];
-	   f00Mdest = &DC[DIR_00P * numberOfLBnodesCoarse];
-	   fPP0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-	   fMM0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-	   fPM0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-	   fMP0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-	   fP0Pdest = &DC[DIR_M0M * numberOfLBnodesCoarse];
-	   fM0Mdest = &DC[DIR_P0P * numberOfLBnodesCoarse];
-	   fP0Mdest = &DC[DIR_M0P * numberOfLBnodesCoarse];
-	   fM0Pdest = &DC[DIR_P0M * numberOfLBnodesCoarse];
-	   f0PPdest = &DC[DIR_0MM * numberOfLBnodesCoarse];
-	   f0MMdest = &DC[DIR_0PP * numberOfLBnodesCoarse];
-	   f0PMdest = &DC[DIR_0MP * numberOfLBnodesCoarse];
-	   f0MPdest = &DC[DIR_0PM * numberOfLBnodesCoarse];
-	   f000dest = &DC[DIR_000 * numberOfLBnodesCoarse];
-	   fMMMdest = &DC[DIR_PPP * numberOfLBnodesCoarse];
-	   fMMPdest = &DC[DIR_PPM * numberOfLBnodesCoarse];
-	   fMPPdest = &DC[DIR_PMM * numberOfLBnodesCoarse];
-	   fMPMdest = &DC[DIR_PMP * numberOfLBnodesCoarse];
-	   fPPMdest = &DC[DIR_MMP * numberOfLBnodesCoarse];
-	   fPPPdest = &DC[DIR_MMM * numberOfLBnodesCoarse];
-	   fPMPdest = &DC[DIR_MPM * numberOfLBnodesCoarse];
-	   fPMMdest = &DC[DIR_MPP * numberOfLBnodesCoarse];
+	   fP00dest = &DC[dM00 * numberOfLBnodesCoarse];
+	   fM00dest = &DC[dP00 * numberOfLBnodesCoarse];
+	   f0P0dest = &DC[d0M0 * numberOfLBnodesCoarse];
+	   f0M0dest = &DC[d0P0 * numberOfLBnodesCoarse];
+	   f00Pdest = &DC[d00M * numberOfLBnodesCoarse];
+	   f00Mdest = &DC[d00P * numberOfLBnodesCoarse];
+	   fPP0dest = &DC[dMM0 * numberOfLBnodesCoarse];
+	   fMM0dest = &DC[dPP0 * numberOfLBnodesCoarse];
+	   fPM0dest = &DC[dMP0 * numberOfLBnodesCoarse];
+	   fMP0dest = &DC[dPM0 * numberOfLBnodesCoarse];
+	   fP0Pdest = &DC[dM0M * numberOfLBnodesCoarse];
+	   fM0Mdest = &DC[dP0P * numberOfLBnodesCoarse];
+	   fP0Mdest = &DC[dM0P * numberOfLBnodesCoarse];
+	   fM0Pdest = &DC[dP0M * numberOfLBnodesCoarse];
+	   f0PPdest = &DC[d0MM * numberOfLBnodesCoarse];
+	   f0MMdest = &DC[d0PP * numberOfLBnodesCoarse];
+	   f0PMdest = &DC[d0MP * numberOfLBnodesCoarse];
+	   f0MPdest = &DC[d0PM * numberOfLBnodesCoarse];
+	   f000dest = &DC[d000 * numberOfLBnodesCoarse];
+	   fMMMdest = &DC[dPPP * numberOfLBnodesCoarse];
+	   fMMPdest = &DC[dPPM * numberOfLBnodesCoarse];
+	   fMPPdest = &DC[dPMM * numberOfLBnodesCoarse];
+	   fMPMdest = &DC[dPMP * numberOfLBnodesCoarse];
+	   fPPMdest = &DC[dMMP * numberOfLBnodesCoarse];
+	   fPPPdest = &DC[dMMM * numberOfLBnodesCoarse];
+	   fPMPdest = &DC[dMPM * numberOfLBnodesCoarse];
+	   fPMMdest = &DC[dMPP * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -1236,96 +1236,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -5425,96 +5425,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -9614,93 +9614,93 @@ __device__ void scaleFC_RhoSq_comp_27_Calculation(
     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[DIR_P00 * numberOfLBnodesFine];
-    fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-    fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-    fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-    ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-    fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-    fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-    fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-    fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-    fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-    fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-    fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-    fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-    ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-    ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-    fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-    fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-    ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-    fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-    ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-    ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-    ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-    ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-    fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-    fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-    fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-    fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+    feF    = &DF[dP00 * numberOfLBnodesFine];
+    fwF    = &DF[dM00 * numberOfLBnodesFine];
+    fnF    = &DF[d0P0 * numberOfLBnodesFine];
+    fsF    = &DF[d0M0 * numberOfLBnodesFine];
+    ftF    = &DF[d00P * numberOfLBnodesFine];
+    fbF    = &DF[d00M * numberOfLBnodesFine];
+    fneF   = &DF[dPP0 * numberOfLBnodesFine];
+    fswF   = &DF[dMM0 * numberOfLBnodesFine];
+    fseF   = &DF[dPM0 * numberOfLBnodesFine];
+    fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+    fteF   = &DF[dP0P * numberOfLBnodesFine];
+    fbwF   = &DF[dM0M * numberOfLBnodesFine];
+    fbeF   = &DF[dP0M * numberOfLBnodesFine];
+    ftwF   = &DF[dM0P * numberOfLBnodesFine];
+    ftnF   = &DF[d0PP * numberOfLBnodesFine];
+    fbsF   = &DF[d0MM * numberOfLBnodesFine];
+    fbnF   = &DF[d0PM * numberOfLBnodesFine];
+    ftsF   = &DF[d0MP * numberOfLBnodesFine];
+    fzeroF = &DF[d000 * numberOfLBnodesFine];
+    ftneF  = &DF[dPPP * numberOfLBnodesFine];
+    ftswF  = &DF[dMMP * numberOfLBnodesFine];
+    ftseF  = &DF[dPMP * numberOfLBnodesFine];
+    ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+    fbneF  = &DF[dPPM * numberOfLBnodesFine];
+    fbswF  = &DF[dMMM * numberOfLBnodesFine];
+    fbseF  = &DF[dPMM * numberOfLBnodesFine];
+    fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
     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[DIR_P00 * numberOfLBnodesCoarse];
-        fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-        fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-        fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-        ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-        fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-        fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-        fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-        fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-        fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-        fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-        fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-        fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-        ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-        ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-        fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-        fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-        ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-        fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-        ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-        ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-        ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-        ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-        fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-        fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-        fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-        fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+        feC    = &DC[dP00 * numberOfLBnodesCoarse];
+        fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+        fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+        fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+        ftC    = &DC[d00P * numberOfLBnodesCoarse];
+        fbC    = &DC[d00M * numberOfLBnodesCoarse];
+        fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+        fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+        fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+        fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+        fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+        fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+        fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+        ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+        ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+        fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+        fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+        ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+        fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+        ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+        ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+        ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+        ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+        fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+        fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+        fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+        fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
     } else {
-        fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-        feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-        fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-        fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-        fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-        ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-        fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-        fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-        fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-        fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-        fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-        fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-        ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-        fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-        fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-        ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-        ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-        fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-        fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-        fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-        fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-        fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-        fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-        ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-        ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-        ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-        ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+        fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+        feC    = &DC[dM00 * numberOfLBnodesCoarse];
+        fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+        fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+        fbC    = &DC[d00P * numberOfLBnodesCoarse];
+        ftC    = &DC[d00M * numberOfLBnodesCoarse];
+        fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+        fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+        fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+        fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+        fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+        fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+        ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+        fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+        fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+        ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+        ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+        fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+        fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+        fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+        fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+        fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+        fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+        ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+        ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+        ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+        ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
     }
 
     ////////////////////////////////////////////////////////////////////////////////
@@ -11192,96 +11192,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -12492,96 +12492,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -14352,96 +14352,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -15558,96 +15558,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -16918,96 +16918,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -17843,96 +17843,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -19236,93 +19236,93 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    Distributions7 D7F;
@@ -20105,93 +20105,93 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    Distributions7 D7F;
@@ -20894,184 +20894,184 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
 
    Distributions27 D27F;
-   D27F.f[DIR_P00] = &DD27F[DIR_P00 * numberOfLBnodesFine];
-   D27F.f[DIR_M00] = &DD27F[DIR_M00 * numberOfLBnodesFine];
-   D27F.f[DIR_0P0] = &DD27F[DIR_0P0 * numberOfLBnodesFine];
-   D27F.f[DIR_0M0] = &DD27F[DIR_0M0 * numberOfLBnodesFine];
-   D27F.f[DIR_00P] = &DD27F[DIR_00P * numberOfLBnodesFine];
-   D27F.f[DIR_00M] = &DD27F[DIR_00M * numberOfLBnodesFine];
-   D27F.f[DIR_PP0] = &DD27F[DIR_PP0 * numberOfLBnodesFine];
-   D27F.f[DIR_MM0] = &DD27F[DIR_MM0 * numberOfLBnodesFine];
-   D27F.f[DIR_PM0] = &DD27F[DIR_PM0 * numberOfLBnodesFine];
-   D27F.f[DIR_MP0] = &DD27F[DIR_MP0 * numberOfLBnodesFine];
-   D27F.f[DIR_P0P] = &DD27F[DIR_P0P * numberOfLBnodesFine];
-   D27F.f[DIR_M0M] = &DD27F[DIR_M0M * numberOfLBnodesFine];
-   D27F.f[DIR_P0M] = &DD27F[DIR_P0M * numberOfLBnodesFine];
-   D27F.f[DIR_M0P] = &DD27F[DIR_M0P * numberOfLBnodesFine];
-   D27F.f[DIR_0PP] = &DD27F[DIR_0PP * numberOfLBnodesFine];
-   D27F.f[DIR_0MM] = &DD27F[DIR_0MM * numberOfLBnodesFine];
-   D27F.f[DIR_0PM] = &DD27F[DIR_0PM * numberOfLBnodesFine];
-   D27F.f[DIR_0MP] = &DD27F[DIR_0MP * numberOfLBnodesFine];
-   D27F.f[DIR_000] = &DD27F[DIR_000 * numberOfLBnodesFine];
-   D27F.f[DIR_PPP] = &DD27F[DIR_PPP * numberOfLBnodesFine];
-   D27F.f[DIR_MMP] = &DD27F[DIR_MMP * numberOfLBnodesFine];
-   D27F.f[DIR_PMP] = &DD27F[DIR_PMP * numberOfLBnodesFine];
-   D27F.f[DIR_MPP] = &DD27F[DIR_MPP * numberOfLBnodesFine];
-   D27F.f[DIR_PPM] = &DD27F[DIR_PPM * numberOfLBnodesFine];
-   D27F.f[DIR_MMM] = &DD27F[DIR_MMM * numberOfLBnodesFine];
-   D27F.f[DIR_PMM] = &DD27F[DIR_PMM * numberOfLBnodesFine];
-   D27F.f[DIR_MPM] = &DD27F[DIR_MPM * numberOfLBnodesFine];
+   D27F.f[dP00] = &DD27F[dP00 * numberOfLBnodesFine];
+   D27F.f[dM00] = &DD27F[dM00 * numberOfLBnodesFine];
+   D27F.f[d0P0] = &DD27F[d0P0 * numberOfLBnodesFine];
+   D27F.f[d0M0] = &DD27F[d0M0 * numberOfLBnodesFine];
+   D27F.f[d00P] = &DD27F[d00P * numberOfLBnodesFine];
+   D27F.f[d00M] = &DD27F[d00M * numberOfLBnodesFine];
+   D27F.f[dPP0] = &DD27F[dPP0 * numberOfLBnodesFine];
+   D27F.f[dMM0] = &DD27F[dMM0 * numberOfLBnodesFine];
+   D27F.f[dPM0] = &DD27F[dPM0 * numberOfLBnodesFine];
+   D27F.f[dMP0] = &DD27F[dMP0 * numberOfLBnodesFine];
+   D27F.f[dP0P] = &DD27F[dP0P * numberOfLBnodesFine];
+   D27F.f[dM0M] = &DD27F[dM0M * numberOfLBnodesFine];
+   D27F.f[dP0M] = &DD27F[dP0M * numberOfLBnodesFine];
+   D27F.f[dM0P] = &DD27F[dM0P * numberOfLBnodesFine];
+   D27F.f[d0PP] = &DD27F[d0PP * numberOfLBnodesFine];
+   D27F.f[d0MM] = &DD27F[d0MM * numberOfLBnodesFine];
+   D27F.f[d0PM] = &DD27F[d0PM * numberOfLBnodesFine];
+   D27F.f[d0MP] = &DD27F[d0MP * numberOfLBnodesFine];
+   D27F.f[d000] = &DD27F[d000 * numberOfLBnodesFine];
+   D27F.f[dPPP] = &DD27F[dPPP * numberOfLBnodesFine];
+   D27F.f[dMMP] = &DD27F[dMMP * numberOfLBnodesFine];
+   D27F.f[dPMP] = &DD27F[dPMP * numberOfLBnodesFine];
+   D27F.f[dMPP] = &DD27F[dMPP * numberOfLBnodesFine];
+   D27F.f[dPPM] = &DD27F[dPPM * numberOfLBnodesFine];
+   D27F.f[dMMM] = &DD27F[dMMM * numberOfLBnodesFine];
+   D27F.f[dPMM] = &DD27F[dPMM * numberOfLBnodesFine];
+   D27F.f[dMPM] = &DD27F[dMPM * numberOfLBnodesFine];
 
    Distributions27 D27C;
    if (isEvenTimestep==true)
    {
-      D27C.f[DIR_P00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_M00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0P0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0M0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_00P] = &DD27C[DIR_00P * numberOfLBnodesCoarse];
-      D27C.f[DIR_00M] = &DD27C[DIR_00M * numberOfLBnodesCoarse];
-      D27C.f[DIR_PP0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MM0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PM0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MP0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0P] = &DD27C[DIR_P0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0M] = &DD27C[DIR_M0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0M] = &DD27C[DIR_P0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0P] = &DD27C[DIR_M0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PP] = &DD27C[DIR_0PP * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MM] = &DD27C[DIR_0MM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PM] = &DD27C[DIR_0PM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MP] = &DD27C[DIR_0MP * numberOfLBnodesCoarse];
-      D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPP] = &DD27C[DIR_PPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMP] = &DD27C[DIR_MMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMP] = &DD27C[DIR_PMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPP] = &DD27C[DIR_MPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPM] = &DD27C[DIR_PPM * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMM] = &DD27C[DIR_MMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMM] = &DD27C[DIR_PMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPM] = &DD27C[DIR_MPM * numberOfLBnodesCoarse];
+      D27C.f[dP00] = &DD27C[dP00 * numberOfLBnodesCoarse];
+      D27C.f[dM00] = &DD27C[dM00 * numberOfLBnodesCoarse];
+      D27C.f[d0P0] = &DD27C[d0P0 * numberOfLBnodesCoarse];
+      D27C.f[d0M0] = &DD27C[d0M0 * numberOfLBnodesCoarse];
+      D27C.f[d00P] = &DD27C[d00P * numberOfLBnodesCoarse];
+      D27C.f[d00M] = &DD27C[d00M * numberOfLBnodesCoarse];
+      D27C.f[dPP0] = &DD27C[dPP0 * numberOfLBnodesCoarse];
+      D27C.f[dMM0] = &DD27C[dMM0 * numberOfLBnodesCoarse];
+      D27C.f[dPM0] = &DD27C[dPM0 * numberOfLBnodesCoarse];
+      D27C.f[dMP0] = &DD27C[dMP0 * numberOfLBnodesCoarse];
+      D27C.f[dP0P] = &DD27C[dP0P * numberOfLBnodesCoarse];
+      D27C.f[dM0M] = &DD27C[dM0M * numberOfLBnodesCoarse];
+      D27C.f[dP0M] = &DD27C[dP0M * numberOfLBnodesCoarse];
+      D27C.f[dM0P] = &DD27C[dM0P * numberOfLBnodesCoarse];
+      D27C.f[d0PP] = &DD27C[d0PP * numberOfLBnodesCoarse];
+      D27C.f[d0MM] = &DD27C[d0MM * numberOfLBnodesCoarse];
+      D27C.f[d0PM] = &DD27C[d0PM * numberOfLBnodesCoarse];
+      D27C.f[d0MP] = &DD27C[d0MP * numberOfLBnodesCoarse];
+      D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse];
+      D27C.f[dPPP] = &DD27C[dPPP * numberOfLBnodesCoarse];
+      D27C.f[dMMP] = &DD27C[dMMP * numberOfLBnodesCoarse];
+      D27C.f[dPMP] = &DD27C[dPMP * numberOfLBnodesCoarse];
+      D27C.f[dMPP] = &DD27C[dMPP * numberOfLBnodesCoarse];
+      D27C.f[dPPM] = &DD27C[dPPM * numberOfLBnodesCoarse];
+      D27C.f[dMMM] = &DD27C[dMMM * numberOfLBnodesCoarse];
+      D27C.f[dPMM] = &DD27C[dPMM * numberOfLBnodesCoarse];
+      D27C.f[dMPM] = &DD27C[dMPM * numberOfLBnodesCoarse];
    }
    else
    {
-      D27C.f[DIR_M00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_P00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0M0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_0P0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_00M] = &DD27C[DIR_00P * numberOfLBnodesCoarse];
-      D27C.f[DIR_00P] = &DD27C[DIR_00M * numberOfLBnodesCoarse];
-      D27C.f[DIR_MM0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PP0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MP0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_PM0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0M] = &DD27C[DIR_P0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0P] = &DD27C[DIR_M0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_M0P] = &DD27C[DIR_P0M * numberOfLBnodesCoarse];
-      D27C.f[DIR_P0M] = &DD27C[DIR_M0P * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MM] = &DD27C[DIR_0PP * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PP] = &DD27C[DIR_0MM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0MP] = &DD27C[DIR_0PM * numberOfLBnodesCoarse];
-      D27C.f[DIR_0PM] = &DD27C[DIR_0MP * numberOfLBnodesCoarse];
-      D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMM] = &DD27C[DIR_PPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPM] = &DD27C[DIR_MMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPM] = &DD27C[DIR_PMP * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMM] = &DD27C[DIR_MPP * numberOfLBnodesCoarse];
-      D27C.f[DIR_MMP] = &DD27C[DIR_PPM * numberOfLBnodesCoarse];
-      D27C.f[DIR_PPP] = &DD27C[DIR_MMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_MPP] = &DD27C[DIR_PMM * numberOfLBnodesCoarse];
-      D27C.f[DIR_PMP] = &DD27C[DIR_MPM * numberOfLBnodesCoarse];
+      D27C.f[dM00] = &DD27C[dP00 * numberOfLBnodesCoarse];
+      D27C.f[dP00] = &DD27C[dM00 * numberOfLBnodesCoarse];
+      D27C.f[d0M0] = &DD27C[d0P0 * numberOfLBnodesCoarse];
+      D27C.f[d0P0] = &DD27C[d0M0 * numberOfLBnodesCoarse];
+      D27C.f[d00M] = &DD27C[d00P * numberOfLBnodesCoarse];
+      D27C.f[d00P] = &DD27C[d00M * numberOfLBnodesCoarse];
+      D27C.f[dMM0] = &DD27C[dPP0 * numberOfLBnodesCoarse];
+      D27C.f[dPP0] = &DD27C[dMM0 * numberOfLBnodesCoarse];
+      D27C.f[dMP0] = &DD27C[dPM0 * numberOfLBnodesCoarse];
+      D27C.f[dPM0] = &DD27C[dMP0 * numberOfLBnodesCoarse];
+      D27C.f[dM0M] = &DD27C[dP0P * numberOfLBnodesCoarse];
+      D27C.f[dP0P] = &DD27C[dM0M * numberOfLBnodesCoarse];
+      D27C.f[dM0P] = &DD27C[dP0M * numberOfLBnodesCoarse];
+      D27C.f[dP0M] = &DD27C[dM0P * numberOfLBnodesCoarse];
+      D27C.f[d0MM] = &DD27C[d0PP * numberOfLBnodesCoarse];
+      D27C.f[d0PP] = &DD27C[d0MM * numberOfLBnodesCoarse];
+      D27C.f[d0MP] = &DD27C[d0PM * numberOfLBnodesCoarse];
+      D27C.f[d0PM] = &DD27C[d0MP * numberOfLBnodesCoarse];
+      D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse];
+      D27C.f[dMMM] = &DD27C[dPPP * numberOfLBnodesCoarse];
+      D27C.f[dPPM] = &DD27C[dMMP * numberOfLBnodesCoarse];
+      D27C.f[dMPM] = &DD27C[dPMP * numberOfLBnodesCoarse];
+      D27C.f[dPMM] = &DD27C[dMPP * numberOfLBnodesCoarse];
+      D27C.f[dMMP] = &DD27C[dPPM * numberOfLBnodesCoarse];
+      D27C.f[dPPP] = &DD27C[dMMM * numberOfLBnodesCoarse];
+      D27C.f[dMPP] = &DD27C[dPMM * numberOfLBnodesCoarse];
+      D27C.f[dPMP] = &DD27C[dMPM * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -21167,33 +21167,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_SWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21254,33 +21254,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_SWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21341,33 +21341,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_SET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21428,33 +21428,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_SEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21525,33 +21525,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_NWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21612,33 +21612,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_NWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21699,33 +21699,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_NET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21786,33 +21786,33 @@ __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[DIR_P00])[kzero];//ke
-      f27W    =  (D27F.f[DIR_M00])[kw   ];
-      f27N    =  (D27F.f[DIR_0P0])[kzero];//kn
-      f27S    =  (D27F.f[DIR_0M0])[ks   ];
-      f27T    =  (D27F.f[DIR_00P])[kzero];//kt
-      f27B    =  (D27F.f[DIR_00M])[kb   ];
-      f27NE   =  (D27F.f[DIR_PP0])[kzero];//kne
-      f27SW   =  (D27F.f[DIR_MM0])[ksw  ];
-      f27SE   =  (D27F.f[DIR_PM0])[ks   ];//kse
-      f27NW   =  (D27F.f[DIR_MP0])[kw   ];//knw
-      f27TE   =  (D27F.f[DIR_P0P])[kzero];//kte
-      f27BW   =  (D27F.f[DIR_M0M])[kbw  ];
-      f27BE   =  (D27F.f[DIR_P0M])[kb   ];//kbe
-      f27TW   =  (D27F.f[DIR_M0P])[kw   ];//ktw
-      f27TN   =  (D27F.f[DIR_0PP])[kzero];//ktn
-      f27BS   =  (D27F.f[DIR_0MM])[kbs  ];
-      f27BN   =  (D27F.f[DIR_0PM])[kb   ];//kbn
-      f27TS   =  (D27F.f[DIR_0MP])[ks   ];//kts
-      f27ZERO =  (D27F.f[DIR_000])[kzero];//kzero
-      f27TNE   = (D27F.f[DIR_PPP])[kzero];//ktne
-      f27TSW   = (D27F.f[DIR_MMP])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[DIR_PMP])[ks   ];//ktse
-      f27TNW   = (D27F.f[DIR_MPP])[kw   ];//ktnw
-      f27BNE   = (D27F.f[DIR_PPM])[kb   ];//kbne
-      f27BSW   = (D27F.f[DIR_MMM])[kbsw ];
-      f27BSE   = (D27F.f[DIR_PMM])[kbs  ];//kbse
-      f27BNW   = (D27F.f[DIR_MPM])[kbw  ];//kbnw
+      f27E    =  (D27F.f[dP00])[kzero];//ke
+      f27W    =  (D27F.f[dM00])[kw   ];
+      f27N    =  (D27F.f[d0P0])[kzero];//kn
+      f27S    =  (D27F.f[d0M0])[ks   ];
+      f27T    =  (D27F.f[d00P])[kzero];//kt
+      f27B    =  (D27F.f[d00M])[kb   ];
+      f27NE   =  (D27F.f[dPP0])[kzero];//kne
+      f27SW   =  (D27F.f[dMM0])[ksw  ];
+      f27SE   =  (D27F.f[dPM0])[ks   ];//kse
+      f27NW   =  (D27F.f[dMP0])[kw   ];//knw
+      f27TE   =  (D27F.f[dP0P])[kzero];//kte
+      f27BW   =  (D27F.f[dM0M])[kbw  ];
+      f27BE   =  (D27F.f[dP0M])[kb   ];//kbe
+      f27TW   =  (D27F.f[dM0P])[kw   ];//ktw
+      f27TN   =  (D27F.f[d0PP])[kzero];//ktn
+      f27BS   =  (D27F.f[d0MM])[kbs  ];
+      f27BN   =  (D27F.f[d0PM])[kb   ];//kbn
+      f27TS   =  (D27F.f[d0MP])[ks   ];//kts
+      f27ZERO =  (D27F.f[d000])[kzero];//kzero
+      f27TNE   = (D27F.f[dPPP])[kzero];//ktne
+      f27TSW   = (D27F.f[dMMP])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[dPMP])[ks   ];//ktse
+      f27TNW   = (D27F.f[dMPP])[kw   ];//ktnw
+      f27BNE   = (D27F.f[dPPM])[kb   ];//kbne
+      f27BSW   = (D27F.f[dMMM])[kbsw ];
+      f27BSE   = (D27F.f[dPMM])[kbs  ];//kbse
+      f27BNW   = (D27F.f[dMPM])[kbw  ];//kbnw
 
       Conc_F_NEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -21925,33 +21925,33 @@ __global__ void scaleFCThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27C.f[DIR_000])[kzero] =   c8o27* Conc_C*(c1o1-cu_sq);
-      (D27C.f[DIR_P00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_C*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27C.f[DIR_M00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_C*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27C.f[DIR_0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_C*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27C.f[DIR_0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_C*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27C.f[DIR_00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_C*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27C.f[DIR_00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_C*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27C.f[DIR_PP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_C*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27C.f[DIR_MM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_C*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27C.f[DIR_PM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_C*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27C.f[DIR_MP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_C*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27C.f[DIR_P0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_C*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27C.f[DIR_M0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_C*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27C.f[DIR_P0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_C*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27C.f[DIR_M0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_C*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27C.f[DIR_0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_C*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27C.f[DIR_0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_C*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27C.f[DIR_0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_C*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27C.f[DIR_0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_C*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27C.f[DIR_PPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27C.f[DIR_MMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27C.f[DIR_PPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27C.f[DIR_MMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27C.f[DIR_PMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27C.f[DIR_MPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27C.f[DIR_PMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27C.f[DIR_MPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27C.f[d000])[kzero] =   c8o27* Conc_C*(c1o1-cu_sq);
+      (D27C.f[dP00])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_C*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27C.f[dM00])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_C*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27C.f[d0P0])[kzero] =   c2o27* (c3o1*(     My    )+Conc_C*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27C.f[d0M0])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_C*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27C.f[d00P])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_C*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27C.f[d00M])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_C*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27C.f[dPP0])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_C*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27C.f[dMM0])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_C*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27C.f[dPM0])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_C*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27C.f[dMP0])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_C*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27C.f[dP0P])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_C*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27C.f[dM0M])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_C*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27C.f[dP0M])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_C*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27C.f[dM0P])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_C*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27C.f[d0PP])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_C*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27C.f[d0MM])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_C*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27C.f[d0PM])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_C*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27C.f[d0MP])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_C*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27C.f[dPPP])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27C.f[dMMM])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27C.f[dPPM])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27C.f[dMMP])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27C.f[dPMP])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27C.f[dMPM])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27C.f[dPMM])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27C.f[dMPP])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
    }
 }
@@ -22017,96 +22017,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -22995,96 +22995,96 @@ __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[DIR_P00 * numberOfLBnodesFine];
-   fwF    = &DF[DIR_M00 * numberOfLBnodesFine];
-   fnF    = &DF[DIR_0P0 * numberOfLBnodesFine];
-   fsF    = &DF[DIR_0M0 * numberOfLBnodesFine];
-   ftF    = &DF[DIR_00P * numberOfLBnodesFine];
-   fbF    = &DF[DIR_00M * numberOfLBnodesFine];
-   fneF   = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fswF   = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fseF   = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fnwF   = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fteF   = &DF[DIR_P0P * numberOfLBnodesFine];
-   fbwF   = &DF[DIR_M0M * numberOfLBnodesFine];
-   fbeF   = &DF[DIR_P0M * numberOfLBnodesFine];
-   ftwF   = &DF[DIR_M0P * numberOfLBnodesFine];
-   ftnF   = &DF[DIR_0PP * numberOfLBnodesFine];
-   fbsF   = &DF[DIR_0MM * numberOfLBnodesFine];
-   fbnF   = &DF[DIR_0PM * numberOfLBnodesFine];
-   ftsF   = &DF[DIR_0MP * numberOfLBnodesFine];
-   fzeroF = &DF[DIR_000 * numberOfLBnodesFine];
-   ftneF  = &DF[DIR_PPP * numberOfLBnodesFine];
-   ftswF  = &DF[DIR_MMP * numberOfLBnodesFine];
-   ftseF  = &DF[DIR_PMP * numberOfLBnodesFine];
-   ftnwF  = &DF[DIR_MPP * numberOfLBnodesFine];
-   fbneF  = &DF[DIR_PPM * numberOfLBnodesFine];
-   fbswF  = &DF[DIR_MMM * numberOfLBnodesFine];
-   fbseF  = &DF[DIR_PMM * numberOfLBnodesFine];
-   fbnwF  = &DF[DIR_MPM * numberOfLBnodesFine];
+   feF    = &DF[dP00 * numberOfLBnodesFine];
+   fwF    = &DF[dM00 * numberOfLBnodesFine];
+   fnF    = &DF[d0P0 * numberOfLBnodesFine];
+   fsF    = &DF[d0M0 * numberOfLBnodesFine];
+   ftF    = &DF[d00P * numberOfLBnodesFine];
+   fbF    = &DF[d00M * numberOfLBnodesFine];
+   fneF   = &DF[dPP0 * numberOfLBnodesFine];
+   fswF   = &DF[dMM0 * numberOfLBnodesFine];
+   fseF   = &DF[dPM0 * numberOfLBnodesFine];
+   fnwF   = &DF[dMP0 * numberOfLBnodesFine];
+   fteF   = &DF[dP0P * numberOfLBnodesFine];
+   fbwF   = &DF[dM0M * numberOfLBnodesFine];
+   fbeF   = &DF[dP0M * numberOfLBnodesFine];
+   ftwF   = &DF[dM0P * numberOfLBnodesFine];
+   ftnF   = &DF[d0PP * numberOfLBnodesFine];
+   fbsF   = &DF[d0MM * numberOfLBnodesFine];
+   fbnF   = &DF[d0PM * numberOfLBnodesFine];
+   ftsF   = &DF[d0MP * numberOfLBnodesFine];
+   fzeroF = &DF[d000 * numberOfLBnodesFine];
+   ftneF  = &DF[dPPP * numberOfLBnodesFine];
+   ftswF  = &DF[dMMP * numberOfLBnodesFine];
+   ftseF  = &DF[dPMP * numberOfLBnodesFine];
+   ftnwF  = &DF[dMPP * numberOfLBnodesFine];
+   fbneF  = &DF[dPPM * numberOfLBnodesFine];
+   fbswF  = &DF[dMMM * numberOfLBnodesFine];
+   fbseF  = &DF[dPMM * numberOfLBnodesFine];
+   fbnwF  = &DF[dMPM * numberOfLBnodesFine];
 
    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[DIR_P00 * numberOfLBnodesCoarse];
-      fwC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      feC    = &DC[dP00 * numberOfLBnodesCoarse];
+      fwC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      ftC    = &DC[d00P * numberOfLBnodesCoarse];
+      fbC    = &DC[d00M * numberOfLBnodesCoarse];
+      fneC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fswC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fteC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fbwC   = &DC[dM0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dP0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dM0P * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0PP * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0MM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0PM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      ftneC  = &DC[dPPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dMMP * numberOfLBnodesCoarse];
+      ftseC  = &DC[dPMP * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dMPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dPPM * numberOfLBnodesCoarse];
+      fbswC  = &DC[dMMM * numberOfLBnodesCoarse];
+      fbseC  = &DC[dPMM * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dMPM * numberOfLBnodesCoarse];
    } 
    else
    {
-      fwC    = &DC[DIR_P00 * numberOfLBnodesCoarse];
-      feC    = &DC[DIR_M00 * numberOfLBnodesCoarse];
-      fsC    = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-      fnC    = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-      fbC    = &DC[DIR_00P * numberOfLBnodesCoarse];
-      ftC    = &DC[DIR_00M * numberOfLBnodesCoarse];
-      fswC   = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-      fneC   = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-      fnwC   = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-      fseC   = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-      fbwC   = &DC[DIR_P0P * numberOfLBnodesCoarse];
-      fteC   = &DC[DIR_M0M * numberOfLBnodesCoarse];
-      ftwC   = &DC[DIR_P0M * numberOfLBnodesCoarse];
-      fbeC   = &DC[DIR_M0P * numberOfLBnodesCoarse];
-      fbsC   = &DC[DIR_0PP * numberOfLBnodesCoarse];
-      ftnC   = &DC[DIR_0MM * numberOfLBnodesCoarse];
-      ftsC   = &DC[DIR_0PM * numberOfLBnodesCoarse];
-      fbnC   = &DC[DIR_0MP * numberOfLBnodesCoarse];
-      fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse];
-      fbswC  = &DC[DIR_PPP * numberOfLBnodesCoarse];
-      fbneC  = &DC[DIR_MMP * numberOfLBnodesCoarse];
-      fbnwC  = &DC[DIR_PMP * numberOfLBnodesCoarse];
-      fbseC  = &DC[DIR_MPP * numberOfLBnodesCoarse];
-      ftswC  = &DC[DIR_PPM * numberOfLBnodesCoarse];
-      ftneC  = &DC[DIR_MMM * numberOfLBnodesCoarse];
-      ftnwC  = &DC[DIR_PMM * numberOfLBnodesCoarse];
-      ftseC  = &DC[DIR_MPM * numberOfLBnodesCoarse];
+      fwC    = &DC[dP00 * numberOfLBnodesCoarse];
+      feC    = &DC[dM00 * numberOfLBnodesCoarse];
+      fsC    = &DC[d0P0 * numberOfLBnodesCoarse];
+      fnC    = &DC[d0M0 * numberOfLBnodesCoarse];
+      fbC    = &DC[d00P * numberOfLBnodesCoarse];
+      ftC    = &DC[d00M * numberOfLBnodesCoarse];
+      fswC   = &DC[dPP0 * numberOfLBnodesCoarse];
+      fneC   = &DC[dMM0 * numberOfLBnodesCoarse];
+      fnwC   = &DC[dPM0 * numberOfLBnodesCoarse];
+      fseC   = &DC[dMP0 * numberOfLBnodesCoarse];
+      fbwC   = &DC[dP0P * numberOfLBnodesCoarse];
+      fteC   = &DC[dM0M * numberOfLBnodesCoarse];
+      ftwC   = &DC[dP0M * numberOfLBnodesCoarse];
+      fbeC   = &DC[dM0P * numberOfLBnodesCoarse];
+      fbsC   = &DC[d0PP * numberOfLBnodesCoarse];
+      ftnC   = &DC[d0MM * numberOfLBnodesCoarse];
+      ftsC   = &DC[d0PM * numberOfLBnodesCoarse];
+      fbnC   = &DC[d0MP * numberOfLBnodesCoarse];
+      fzeroC = &DC[d000 * numberOfLBnodesCoarse];
+      fbswC  = &DC[dPPP * numberOfLBnodesCoarse];
+      fbneC  = &DC[dMMP * numberOfLBnodesCoarse];
+      fbnwC  = &DC[dPMP * numberOfLBnodesCoarse];
+      fbseC  = &DC[dMPP * numberOfLBnodesCoarse];
+      ftswC  = &DC[dPPM * numberOfLBnodesCoarse];
+      ftneC  = &DC[dMMM * numberOfLBnodesCoarse];
+      ftnwC  = &DC[dPMM * numberOfLBnodesCoarse];
+      ftseC  = &DC[dMPM * numberOfLBnodesCoarse];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC_F3_27.cu b/src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu
similarity index 92%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC_F3_27.cu
rename to src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu
index 7de51b3b0aec87e3e8773c08435c3ada445e9a41..296c80c5c1a876a4453e6c53228af066b3ec6e22 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC_F3_27.cu
+++ b/src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu
@@ -44,33 +44,33 @@ __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
 	   *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource;
 
 
-   fP00source = &DF[DIR_P00 * numberOfLBnodesFine];
-   fM00source = &DF[DIR_M00 * numberOfLBnodesFine];
-   f0P0source = &DF[DIR_0P0 * numberOfLBnodesFine];
-   f0M0source = &DF[DIR_0M0 * numberOfLBnodesFine];
-   f00Psource = &DF[DIR_00P * numberOfLBnodesFine];
-   f00Msource = &DF[DIR_00M * numberOfLBnodesFine];
-   fPP0source = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fMM0source = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fPM0source = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fMP0source = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fP0Psource = &DF[DIR_P0P * numberOfLBnodesFine];
-   fM0Msource = &DF[DIR_M0M * numberOfLBnodesFine];
-   fP0Msource = &DF[DIR_P0M * numberOfLBnodesFine];
-   fM0Psource = &DF[DIR_M0P * numberOfLBnodesFine];
-   f0PPsource = &DF[DIR_0PP * numberOfLBnodesFine];
-   f0MMsource = &DF[DIR_0MM * numberOfLBnodesFine];
-   f0PMsource = &DF[DIR_0PM * numberOfLBnodesFine];
-   f0MPsource = &DF[DIR_0MP * numberOfLBnodesFine];
-   f000source = &DF[DIR_000 * numberOfLBnodesFine];
-   fMMMsource = &DF[DIR_MMM * numberOfLBnodesFine];
-   fMMPsource = &DF[DIR_MMP * numberOfLBnodesFine];
-   fMPPsource = &DF[DIR_MPP * numberOfLBnodesFine];
-   fMPMsource = &DF[DIR_MPM * numberOfLBnodesFine];
-   fPPMsource = &DF[DIR_PPM * numberOfLBnodesFine];
-   fPPPsource = &DF[DIR_PPP * numberOfLBnodesFine];
-   fPMPsource = &DF[DIR_PMP * numberOfLBnodesFine];
-   fPMMsource = &DF[DIR_PMM * numberOfLBnodesFine];
+   fP00source = &DF[dP00 * numberOfLBnodesFine];
+   fM00source = &DF[dM00 * numberOfLBnodesFine];
+   f0P0source = &DF[d0P0 * numberOfLBnodesFine];
+   f0M0source = &DF[d0M0 * numberOfLBnodesFine];
+   f00Psource = &DF[d00P * numberOfLBnodesFine];
+   f00Msource = &DF[d00M * numberOfLBnodesFine];
+   fPP0source = &DF[dPP0 * numberOfLBnodesFine];
+   fMM0source = &DF[dMM0 * numberOfLBnodesFine];
+   fPM0source = &DF[dPM0 * numberOfLBnodesFine];
+   fMP0source = &DF[dMP0 * numberOfLBnodesFine];
+   fP0Psource = &DF[dP0P * numberOfLBnodesFine];
+   fM0Msource = &DF[dM0M * numberOfLBnodesFine];
+   fP0Msource = &DF[dP0M * numberOfLBnodesFine];
+   fM0Psource = &DF[dM0P * numberOfLBnodesFine];
+   f0PPsource = &DF[d0PP * numberOfLBnodesFine];
+   f0MMsource = &DF[d0MM * numberOfLBnodesFine];
+   f0PMsource = &DF[d0PM * numberOfLBnodesFine];
+   f0MPsource = &DF[d0MP * numberOfLBnodesFine];
+   f000source = &DF[d000 * numberOfLBnodesFine];
+   fMMMsource = &DF[dMMM * numberOfLBnodesFine];
+   fMMPsource = &DF[dMMP * numberOfLBnodesFine];
+   fMPPsource = &DF[dMPP * numberOfLBnodesFine];
+   fMPMsource = &DF[dMPM * numberOfLBnodesFine];
+   fPPMsource = &DF[dPPM * numberOfLBnodesFine];
+   fPPPsource = &DF[dPPP * numberOfLBnodesFine];
+   fPMPsource = &DF[dPMP * numberOfLBnodesFine];
+   fPMMsource = &DF[dPMM * numberOfLBnodesFine];
 
    real
 	   *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest,
@@ -79,83 +79,83 @@ __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
 
    if (isEvenTimestep==true)
    {
-	   fP00dest = &DC[DIR_P00 * numberOfLBnodesCoarse];
-	   fM00dest = &DC[DIR_M00 * numberOfLBnodesCoarse];
-	   f0P0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-	   f0M0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-	   f00Pdest = &DC[DIR_00P * numberOfLBnodesCoarse];
-	   f00Mdest = &DC[DIR_00M * numberOfLBnodesCoarse];
-	   fPP0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-	   fMM0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-	   fPM0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-	   fMP0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-	   fP0Pdest = &DC[DIR_P0P * numberOfLBnodesCoarse];
-	   fM0Mdest = &DC[DIR_M0M * numberOfLBnodesCoarse];
-	   fP0Mdest = &DC[DIR_P0M * numberOfLBnodesCoarse];
-	   fM0Pdest = &DC[DIR_M0P * numberOfLBnodesCoarse];
-	   f0PPdest = &DC[DIR_0PP * numberOfLBnodesCoarse];
-	   f0MMdest = &DC[DIR_0MM * numberOfLBnodesCoarse];
-	   f0PMdest = &DC[DIR_0PM * numberOfLBnodesCoarse];
-	   f0MPdest = &DC[DIR_0MP * numberOfLBnodesCoarse];
-	   f000dest = &DC[DIR_000 * numberOfLBnodesCoarse];
-	   fMMMdest = &DC[DIR_MMM * numberOfLBnodesCoarse];
-	   fMMPdest = &DC[DIR_MMP * numberOfLBnodesCoarse];
-	   fMPPdest = &DC[DIR_MPP * numberOfLBnodesCoarse];
-	   fMPMdest = &DC[DIR_MPM * numberOfLBnodesCoarse];
-	   fPPMdest = &DC[DIR_PPM * numberOfLBnodesCoarse];
-	   fPPPdest = &DC[DIR_PPP * numberOfLBnodesCoarse];
-	   fPMPdest = &DC[DIR_PMP * numberOfLBnodesCoarse];
-	   fPMMdest = &DC[DIR_PMM * numberOfLBnodesCoarse];
+	   fP00dest = &DC[dP00 * numberOfLBnodesCoarse];
+	   fM00dest = &DC[dM00 * numberOfLBnodesCoarse];
+	   f0P0dest = &DC[d0P0 * numberOfLBnodesCoarse];
+	   f0M0dest = &DC[d0M0 * numberOfLBnodesCoarse];
+	   f00Pdest = &DC[d00P * numberOfLBnodesCoarse];
+	   f00Mdest = &DC[d00M * numberOfLBnodesCoarse];
+	   fPP0dest = &DC[dPP0 * numberOfLBnodesCoarse];
+	   fMM0dest = &DC[dMM0 * numberOfLBnodesCoarse];
+	   fPM0dest = &DC[dPM0 * numberOfLBnodesCoarse];
+	   fMP0dest = &DC[dMP0 * numberOfLBnodesCoarse];
+	   fP0Pdest = &DC[dP0P * numberOfLBnodesCoarse];
+	   fM0Mdest = &DC[dM0M * numberOfLBnodesCoarse];
+	   fP0Mdest = &DC[dP0M * numberOfLBnodesCoarse];
+	   fM0Pdest = &DC[dM0P * numberOfLBnodesCoarse];
+	   f0PPdest = &DC[d0PP * numberOfLBnodesCoarse];
+	   f0MMdest = &DC[d0MM * numberOfLBnodesCoarse];
+	   f0PMdest = &DC[d0PM * numberOfLBnodesCoarse];
+	   f0MPdest = &DC[d0MP * numberOfLBnodesCoarse];
+	   f000dest = &DC[d000 * numberOfLBnodesCoarse];
+	   fMMMdest = &DC[dMMM * numberOfLBnodesCoarse];
+	   fMMPdest = &DC[dMMP * numberOfLBnodesCoarse];
+	   fMPPdest = &DC[dMPP * numberOfLBnodesCoarse];
+	   fMPMdest = &DC[dMPM * numberOfLBnodesCoarse];
+	   fPPMdest = &DC[dPPM * numberOfLBnodesCoarse];
+	   fPPPdest = &DC[dPPP * numberOfLBnodesCoarse];
+	   fPMPdest = &DC[dPMP * numberOfLBnodesCoarse];
+	   fPMMdest = &DC[dPMM * numberOfLBnodesCoarse];
    } 
    else
    {
-	   fP00dest = &DC[DIR_M00 * numberOfLBnodesCoarse];
-	   fM00dest = &DC[DIR_P00 * numberOfLBnodesCoarse];
-	   f0P0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-	   f0M0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-	   f00Pdest = &DC[DIR_00M * numberOfLBnodesCoarse];
-	   f00Mdest = &DC[DIR_00P * numberOfLBnodesCoarse];
-	   fPP0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-	   fMM0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-	   fPM0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-	   fMP0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-	   fP0Pdest = &DC[DIR_M0M * numberOfLBnodesCoarse];
-	   fM0Mdest = &DC[DIR_P0P * numberOfLBnodesCoarse];
-	   fP0Mdest = &DC[DIR_M0P * numberOfLBnodesCoarse];
-	   fM0Pdest = &DC[DIR_P0M * numberOfLBnodesCoarse];
-	   f0PPdest = &DC[DIR_0MM * numberOfLBnodesCoarse];
-	   f0MMdest = &DC[DIR_0PP * numberOfLBnodesCoarse];
-	   f0PMdest = &DC[DIR_0MP * numberOfLBnodesCoarse];
-	   f0MPdest = &DC[DIR_0PM * numberOfLBnodesCoarse];
-	   f000dest = &DC[DIR_000 * numberOfLBnodesCoarse];
-	   fMMMdest = &DC[DIR_PPP * numberOfLBnodesCoarse];
-	   fMMPdest = &DC[DIR_PPM * numberOfLBnodesCoarse];
-	   fMPPdest = &DC[DIR_PMM * numberOfLBnodesCoarse];
-	   fMPMdest = &DC[DIR_PMP * numberOfLBnodesCoarse];
-	   fPPMdest = &DC[DIR_MMP * numberOfLBnodesCoarse];
-	   fPPPdest = &DC[DIR_MMM * numberOfLBnodesCoarse];
-	   fPMPdest = &DC[DIR_MPM * numberOfLBnodesCoarse];
-	   fPMMdest = &DC[DIR_MPP * numberOfLBnodesCoarse];
+	   fP00dest = &DC[dM00 * numberOfLBnodesCoarse];
+	   fM00dest = &DC[dP00 * numberOfLBnodesCoarse];
+	   f0P0dest = &DC[d0M0 * numberOfLBnodesCoarse];
+	   f0M0dest = &DC[d0P0 * numberOfLBnodesCoarse];
+	   f00Pdest = &DC[d00M * numberOfLBnodesCoarse];
+	   f00Mdest = &DC[d00P * numberOfLBnodesCoarse];
+	   fPP0dest = &DC[dMM0 * numberOfLBnodesCoarse];
+	   fMM0dest = &DC[dPP0 * numberOfLBnodesCoarse];
+	   fPM0dest = &DC[dMP0 * numberOfLBnodesCoarse];
+	   fMP0dest = &DC[dPM0 * numberOfLBnodesCoarse];
+	   fP0Pdest = &DC[dM0M * numberOfLBnodesCoarse];
+	   fM0Mdest = &DC[dP0P * numberOfLBnodesCoarse];
+	   fP0Mdest = &DC[dM0P * numberOfLBnodesCoarse];
+	   fM0Pdest = &DC[dP0M * numberOfLBnodesCoarse];
+	   f0PPdest = &DC[d0MM * numberOfLBnodesCoarse];
+	   f0MMdest = &DC[d0PP * numberOfLBnodesCoarse];
+	   f0PMdest = &DC[d0MP * numberOfLBnodesCoarse];
+	   f0MPdest = &DC[d0PM * numberOfLBnodesCoarse];
+	   f000dest = &DC[d000 * numberOfLBnodesCoarse];
+	   fMMMdest = &DC[dPPP * numberOfLBnodesCoarse];
+	   fMMPdest = &DC[dPPM * numberOfLBnodesCoarse];
+	   fMPPdest = &DC[dPMM * numberOfLBnodesCoarse];
+	   fMPMdest = &DC[dPMP * numberOfLBnodesCoarse];
+	   fPPMdest = &DC[dMMP * numberOfLBnodesCoarse];
+	   fPPPdest = &DC[dMMM * numberOfLBnodesCoarse];
+	   fPMPdest = &DC[dMPM * numberOfLBnodesCoarse];
+	   fPMMdest = &DC[dMPP * numberOfLBnodesCoarse];
    }
 
    Distributions6 G;
    if (isEvenTimestep == true)
    {
-	   G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesCoarse];
-	   G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesCoarse];
-	   G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesCoarse];
-	   G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesCoarse];
-	   G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesCoarse];
-	   G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesCoarse];
+	   G.g[dP00] = &G6[dP00 * numberOfLBnodesCoarse];
+	   G.g[dM00] = &G6[dM00 * numberOfLBnodesCoarse];
+	   G.g[d0P0] = &G6[d0P0 * numberOfLBnodesCoarse];
+	   G.g[d0M0] = &G6[d0M0 * numberOfLBnodesCoarse];
+	   G.g[d00P] = &G6[d00P * numberOfLBnodesCoarse];
+	   G.g[d00M] = &G6[d00M * numberOfLBnodesCoarse];
    }
    else
    {
-	   G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodesCoarse];
-	   G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodesCoarse];
-	   G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodesCoarse];
-	   G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodesCoarse];
-	   G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodesCoarse];
-	   G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodesCoarse];
+	   G.g[dM00] = &G6[dP00 * numberOfLBnodesCoarse];
+	   G.g[dP00] = &G6[dM00 * numberOfLBnodesCoarse];
+	   G.g[d0M0] = &G6[d0P0 * numberOfLBnodesCoarse];
+	   G.g[d0P0] = &G6[d0M0 * numberOfLBnodesCoarse];
+	   G.g[d00M] = &G6[d00P * numberOfLBnodesCoarse];
+	   G.g[d00P] = &G6[d00M * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -1168,12 +1168,12 @@ __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;                                                                 
 	  fM00dest[kM00] = mfabb;                                                               
@@ -1291,33 +1291,33 @@ __global__ void scaleFC_comp_D3Q27F3( real* DC,
 	   *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource;
 
 
-   fP00source = &DF[DIR_P00 * numberOfLBnodesFine];
-   fM00source = &DF[DIR_M00 * numberOfLBnodesFine];
-   f0P0source = &DF[DIR_0P0 * numberOfLBnodesFine];
-   f0M0source = &DF[DIR_0M0 * numberOfLBnodesFine];
-   f00Psource = &DF[DIR_00P * numberOfLBnodesFine];
-   f00Msource = &DF[DIR_00M * numberOfLBnodesFine];
-   fPP0source = &DF[DIR_PP0 * numberOfLBnodesFine];
-   fMM0source = &DF[DIR_MM0 * numberOfLBnodesFine];
-   fPM0source = &DF[DIR_PM0 * numberOfLBnodesFine];
-   fMP0source = &DF[DIR_MP0 * numberOfLBnodesFine];
-   fP0Psource = &DF[DIR_P0P * numberOfLBnodesFine];
-   fM0Msource = &DF[DIR_M0M * numberOfLBnodesFine];
-   fP0Msource = &DF[DIR_P0M * numberOfLBnodesFine];
-   fM0Psource = &DF[DIR_M0P * numberOfLBnodesFine];
-   f0PPsource = &DF[DIR_0PP * numberOfLBnodesFine];
-   f0MMsource = &DF[DIR_0MM * numberOfLBnodesFine];
-   f0PMsource = &DF[DIR_0PM * numberOfLBnodesFine];
-   f0MPsource = &DF[DIR_0MP * numberOfLBnodesFine];
-   f000source = &DF[DIR_000 * numberOfLBnodesFine];
-   fMMMsource = &DF[DIR_MMM * numberOfLBnodesFine];
-   fMMPsource = &DF[DIR_MMP * numberOfLBnodesFine];
-   fMPPsource = &DF[DIR_MPP * numberOfLBnodesFine];
-   fMPMsource = &DF[DIR_MPM * numberOfLBnodesFine];
-   fPPMsource = &DF[DIR_PPM * numberOfLBnodesFine];
-   fPPPsource = &DF[DIR_PPP * numberOfLBnodesFine];
-   fPMPsource = &DF[DIR_PMP * numberOfLBnodesFine];
-   fPMMsource = &DF[DIR_PMM * numberOfLBnodesFine];
+   fP00source = &DF[dP00 * numberOfLBnodesFine];
+   fM00source = &DF[dM00 * numberOfLBnodesFine];
+   f0P0source = &DF[d0P0 * numberOfLBnodesFine];
+   f0M0source = &DF[d0M0 * numberOfLBnodesFine];
+   f00Psource = &DF[d00P * numberOfLBnodesFine];
+   f00Msource = &DF[d00M * numberOfLBnodesFine];
+   fPP0source = &DF[dPP0 * numberOfLBnodesFine];
+   fMM0source = &DF[dMM0 * numberOfLBnodesFine];
+   fPM0source = &DF[dPM0 * numberOfLBnodesFine];
+   fMP0source = &DF[dMP0 * numberOfLBnodesFine];
+   fP0Psource = &DF[dP0P * numberOfLBnodesFine];
+   fM0Msource = &DF[dM0M * numberOfLBnodesFine];
+   fP0Msource = &DF[dP0M * numberOfLBnodesFine];
+   fM0Psource = &DF[dM0P * numberOfLBnodesFine];
+   f0PPsource = &DF[d0PP * numberOfLBnodesFine];
+   f0MMsource = &DF[d0MM * numberOfLBnodesFine];
+   f0PMsource = &DF[d0PM * numberOfLBnodesFine];
+   f0MPsource = &DF[d0MP * numberOfLBnodesFine];
+   f000source = &DF[d000 * numberOfLBnodesFine];
+   fMMMsource = &DF[dMMM * numberOfLBnodesFine];
+   fMMPsource = &DF[dMMP * numberOfLBnodesFine];
+   fMPPsource = &DF[dMPP * numberOfLBnodesFine];
+   fMPMsource = &DF[dMPM * numberOfLBnodesFine];
+   fPPMsource = &DF[dPPM * numberOfLBnodesFine];
+   fPPPsource = &DF[dPPP * numberOfLBnodesFine];
+   fPMPsource = &DF[dPMP * numberOfLBnodesFine];
+   fPMMsource = &DF[dPMM * numberOfLBnodesFine];
 
    real
 	   *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest,
@@ -1326,83 +1326,83 @@ __global__ void scaleFC_comp_D3Q27F3( real* DC,
 
    if (isEvenTimestep==true)
    {
-	   fP00dest = &DC[DIR_P00 * numberOfLBnodesCoarse];
-	   fM00dest = &DC[DIR_M00 * numberOfLBnodesCoarse];
-	   f0P0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-	   f0M0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-	   f00Pdest = &DC[DIR_00P * numberOfLBnodesCoarse];
-	   f00Mdest = &DC[DIR_00M * numberOfLBnodesCoarse];
-	   fPP0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-	   fMM0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-	   fPM0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-	   fMP0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-	   fP0Pdest = &DC[DIR_P0P * numberOfLBnodesCoarse];
-	   fM0Mdest = &DC[DIR_M0M * numberOfLBnodesCoarse];
-	   fP0Mdest = &DC[DIR_P0M * numberOfLBnodesCoarse];
-	   fM0Pdest = &DC[DIR_M0P * numberOfLBnodesCoarse];
-	   f0PPdest = &DC[DIR_0PP * numberOfLBnodesCoarse];
-	   f0MMdest = &DC[DIR_0MM * numberOfLBnodesCoarse];
-	   f0PMdest = &DC[DIR_0PM * numberOfLBnodesCoarse];
-	   f0MPdest = &DC[DIR_0MP * numberOfLBnodesCoarse];
-	   f000dest = &DC[DIR_000 * numberOfLBnodesCoarse];
-	   fMMMdest = &DC[DIR_MMM * numberOfLBnodesCoarse];
-	   fMMPdest = &DC[DIR_MMP * numberOfLBnodesCoarse];
-	   fMPPdest = &DC[DIR_MPP * numberOfLBnodesCoarse];
-	   fMPMdest = &DC[DIR_MPM * numberOfLBnodesCoarse];
-	   fPPMdest = &DC[DIR_PPM * numberOfLBnodesCoarse];
-	   fPPPdest = &DC[DIR_PPP * numberOfLBnodesCoarse];
-	   fPMPdest = &DC[DIR_PMP * numberOfLBnodesCoarse];
-	   fPMMdest = &DC[DIR_PMM * numberOfLBnodesCoarse];
+	   fP00dest = &DC[dP00 * numberOfLBnodesCoarse];
+	   fM00dest = &DC[dM00 * numberOfLBnodesCoarse];
+	   f0P0dest = &DC[d0P0 * numberOfLBnodesCoarse];
+	   f0M0dest = &DC[d0M0 * numberOfLBnodesCoarse];
+	   f00Pdest = &DC[d00P * numberOfLBnodesCoarse];
+	   f00Mdest = &DC[d00M * numberOfLBnodesCoarse];
+	   fPP0dest = &DC[dPP0 * numberOfLBnodesCoarse];
+	   fMM0dest = &DC[dMM0 * numberOfLBnodesCoarse];
+	   fPM0dest = &DC[dPM0 * numberOfLBnodesCoarse];
+	   fMP0dest = &DC[dMP0 * numberOfLBnodesCoarse];
+	   fP0Pdest = &DC[dP0P * numberOfLBnodesCoarse];
+	   fM0Mdest = &DC[dM0M * numberOfLBnodesCoarse];
+	   fP0Mdest = &DC[dP0M * numberOfLBnodesCoarse];
+	   fM0Pdest = &DC[dM0P * numberOfLBnodesCoarse];
+	   f0PPdest = &DC[d0PP * numberOfLBnodesCoarse];
+	   f0MMdest = &DC[d0MM * numberOfLBnodesCoarse];
+	   f0PMdest = &DC[d0PM * numberOfLBnodesCoarse];
+	   f0MPdest = &DC[d0MP * numberOfLBnodesCoarse];
+	   f000dest = &DC[d000 * numberOfLBnodesCoarse];
+	   fMMMdest = &DC[dMMM * numberOfLBnodesCoarse];
+	   fMMPdest = &DC[dMMP * numberOfLBnodesCoarse];
+	   fMPPdest = &DC[dMPP * numberOfLBnodesCoarse];
+	   fMPMdest = &DC[dMPM * numberOfLBnodesCoarse];
+	   fPPMdest = &DC[dPPM * numberOfLBnodesCoarse];
+	   fPPPdest = &DC[dPPP * numberOfLBnodesCoarse];
+	   fPMPdest = &DC[dPMP * numberOfLBnodesCoarse];
+	   fPMMdest = &DC[dPMM * numberOfLBnodesCoarse];
    } 
    else
    {
-	   fP00dest = &DC[DIR_M00 * numberOfLBnodesCoarse];
-	   fM00dest = &DC[DIR_P00 * numberOfLBnodesCoarse];
-	   f0P0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse];
-	   f0M0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse];
-	   f00Pdest = &DC[DIR_00M * numberOfLBnodesCoarse];
-	   f00Mdest = &DC[DIR_00P * numberOfLBnodesCoarse];
-	   fPP0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse];
-	   fMM0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse];
-	   fPM0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse];
-	   fMP0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse];
-	   fP0Pdest = &DC[DIR_M0M * numberOfLBnodesCoarse];
-	   fM0Mdest = &DC[DIR_P0P * numberOfLBnodesCoarse];
-	   fP0Mdest = &DC[DIR_M0P * numberOfLBnodesCoarse];
-	   fM0Pdest = &DC[DIR_P0M * numberOfLBnodesCoarse];
-	   f0PPdest = &DC[DIR_0MM * numberOfLBnodesCoarse];
-	   f0MMdest = &DC[DIR_0PP * numberOfLBnodesCoarse];
-	   f0PMdest = &DC[DIR_0MP * numberOfLBnodesCoarse];
-	   f0MPdest = &DC[DIR_0PM * numberOfLBnodesCoarse];
-	   f000dest = &DC[DIR_000 * numberOfLBnodesCoarse];
-	   fMMMdest = &DC[DIR_PPP * numberOfLBnodesCoarse];
-	   fMMPdest = &DC[DIR_PPM * numberOfLBnodesCoarse];
-	   fMPPdest = &DC[DIR_PMM * numberOfLBnodesCoarse];
-	   fMPMdest = &DC[DIR_PMP * numberOfLBnodesCoarse];
-	   fPPMdest = &DC[DIR_MMP * numberOfLBnodesCoarse];
-	   fPPPdest = &DC[DIR_MMM * numberOfLBnodesCoarse];
-	   fPMPdest = &DC[DIR_MPM * numberOfLBnodesCoarse];
-	   fPMMdest = &DC[DIR_MPP * numberOfLBnodesCoarse];
+	   fP00dest = &DC[dM00 * numberOfLBnodesCoarse];
+	   fM00dest = &DC[dP00 * numberOfLBnodesCoarse];
+	   f0P0dest = &DC[d0M0 * numberOfLBnodesCoarse];
+	   f0M0dest = &DC[d0P0 * numberOfLBnodesCoarse];
+	   f00Pdest = &DC[d00M * numberOfLBnodesCoarse];
+	   f00Mdest = &DC[d00P * numberOfLBnodesCoarse];
+	   fPP0dest = &DC[dMM0 * numberOfLBnodesCoarse];
+	   fMM0dest = &DC[dPP0 * numberOfLBnodesCoarse];
+	   fPM0dest = &DC[dMP0 * numberOfLBnodesCoarse];
+	   fMP0dest = &DC[dPM0 * numberOfLBnodesCoarse];
+	   fP0Pdest = &DC[dM0M * numberOfLBnodesCoarse];
+	   fM0Mdest = &DC[dP0P * numberOfLBnodesCoarse];
+	   fP0Mdest = &DC[dM0P * numberOfLBnodesCoarse];
+	   fM0Pdest = &DC[dP0M * numberOfLBnodesCoarse];
+	   f0PPdest = &DC[d0MM * numberOfLBnodesCoarse];
+	   f0MMdest = &DC[d0PP * numberOfLBnodesCoarse];
+	   f0PMdest = &DC[d0MP * numberOfLBnodesCoarse];
+	   f0MPdest = &DC[d0PM * numberOfLBnodesCoarse];
+	   f000dest = &DC[d000 * numberOfLBnodesCoarse];
+	   fMMMdest = &DC[dPPP * numberOfLBnodesCoarse];
+	   fMMPdest = &DC[dPPM * numberOfLBnodesCoarse];
+	   fMPPdest = &DC[dPMM * numberOfLBnodesCoarse];
+	   fMPMdest = &DC[dPMP * numberOfLBnodesCoarse];
+	   fPPMdest = &DC[dMMP * numberOfLBnodesCoarse];
+	   fPPPdest = &DC[dMMM * numberOfLBnodesCoarse];
+	   fPMPdest = &DC[dMPM * numberOfLBnodesCoarse];
+	   fPMMdest = &DC[dMPP * numberOfLBnodesCoarse];
    }
 
    Distributions6 G;
    if (isEvenTimestep == true)
    {
-	   G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesCoarse];
-	   G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesCoarse];
-	   G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesCoarse];
-	   G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesCoarse];
-	   G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesCoarse];
-	   G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesCoarse];
+	   G.g[dP00] = &G6[dP00 * numberOfLBnodesCoarse];
+	   G.g[dM00] = &G6[dM00 * numberOfLBnodesCoarse];
+	   G.g[d0P0] = &G6[d0P0 * numberOfLBnodesCoarse];
+	   G.g[d0M0] = &G6[d0M0 * numberOfLBnodesCoarse];
+	   G.g[d00P] = &G6[d00P * numberOfLBnodesCoarse];
+	   G.g[d00M] = &G6[d00M * numberOfLBnodesCoarse];
    }
    else
    {
-	   G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodesCoarse];
-	   G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodesCoarse];
-	   G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodesCoarse];
-	   G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodesCoarse];
-	   G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodesCoarse];
-	   G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodesCoarse];
+	   G.g[dM00] = &G6[dP00 * numberOfLBnodesCoarse];
+	   G.g[dP00] = &G6[dM00 * numberOfLBnodesCoarse];
+	   G.g[d0M0] = &G6[d0P0 * numberOfLBnodesCoarse];
+	   G.g[d0P0] = &G6[d0M0 * numberOfLBnodesCoarse];
+	   G.g[d00M] = &G6[d00P * numberOfLBnodesCoarse];
+	   G.g[d00P] = &G6[d00M * numberOfLBnodesCoarse];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -2409,12 +2409,12 @@ __global__ void scaleFC_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[DIR_P00])[k000] = mgcbb;
-	  (G.g[DIR_M00])[kM00] = mgabb;
-	  (G.g[DIR_0P0])[k000] = mgbcb;
-	  (G.g[DIR_0M0])[k0M0] = mgbab;
-	  (G.g[DIR_00P])[k000] = mgbbc;
-	  (G.g[DIR_00M])[k00M] = mgbba;
+	  (G.g[dP00])[k000] = mgcbb;
+	  (G.g[dM00])[kM00] = mgabb;
+	  (G.g[d0P0])[k000] = mgbcb;
+	  (G.g[d0M0])[k0M0] = mgbab;
+	  (G.g[d00P])[k000] = mgbbc;
+	  (G.g[d00M])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;                                                                 
 	  fM00dest[kM00] = mfabb;                                                               
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateRotatingToStatic.cu b/src/gpu/core/GPU/GridScaling/interpolateRotatingToStatic.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateRotatingToStatic.cu
rename to src/gpu/core/GPU/GridScaling/interpolateRotatingToStatic.cu
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateRotatingToStaticInlines.h b/src/gpu/core/GPU/GridScaling/interpolateRotatingToStaticInlines.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateRotatingToStaticInlines.h
rename to src/gpu/core/GPU/GridScaling/interpolateRotatingToStaticInlines.h
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateRotatingToStaticInlinesTest.cpp b/src/gpu/core/GPU/GridScaling/interpolateRotatingToStaticInlinesTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateRotatingToStaticInlinesTest.cpp
rename to src/gpu/core/GPU/GridScaling/interpolateRotatingToStaticInlinesTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateStaticToRotating.cu b/src/gpu/core/GPU/GridScaling/interpolateStaticToRotating.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateStaticToRotating.cu
rename to src/gpu/core/GPU/GridScaling/interpolateStaticToRotating.cu
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateStaticToRotatingInlines.h b/src/gpu/core/GPU/GridScaling/interpolateStaticToRotatingInlines.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateStaticToRotatingInlines.h
rename to src/gpu/core/GPU/GridScaling/interpolateStaticToRotatingInlines.h
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateStaticToRotatingInlinesTest.cpp b/src/gpu/core/GPU/GridScaling/interpolateStaticToRotatingInlinesTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/interpolateStaticToRotatingInlinesTest.cpp
rename to src/gpu/core/GPU/GridScaling/interpolateStaticToRotatingInlinesTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleCF_compressible.cu b/src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleCF_compressible.cu
rename to src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu
index 05ec8417976bd1b71d0a9ab08b1a44ab06ffd7b0..c14def2e9d0749ade216482556cc2a47b04d4b5b 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleCF_compressible.cu
+++ b/src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu
@@ -31,7 +31,7 @@
 //! \author Martin Schoenherr, Anna Wellmann
 //=======================================================================================
 
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 #include "LBM/GPUHelperFunctions/KernelUtilities.h"
 #include "LBM/GPUHelperFunctions/ChimeraTransformation.h"
 #include "LBM/GPUHelperFunctions/ScalingUtilities.h"
@@ -96,7 +96,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
     real f[27];
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
 
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -125,7 +125,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
@@ -153,7 +153,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
@@ -181,7 +181,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
     // Position BNW = MPM: -0.25, 0.25, -0.25
@@ -220,7 +220,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
     // Position TNW = MPP: -0.25, 0.25, 0.25
@@ -244,7 +244,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
     // Position TNE = PPP: 0.25, 0.25, 0.25
@@ -268,7 +268,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
     //Position BNE = PPM: 0.25, 0.25, -0.25
@@ -292,7 +292,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
 
     vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z);
 
-    write(distFine, indices, f);
+    setPreCollisionDistribution(distFine, indices, f);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -370,7 +370,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     real f_coarse[27];
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculateMMM(f_coarse, omegaC);
 
     //////////////////////////////////////////////////////////////////////////
@@ -388,7 +388,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculateMMP(f_coarse, omegaC);
 
     //////////////////////////////////////////////////////////////////////////
@@ -406,7 +406,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculatePMP(f_coarse, omegaC);
 
     //////////////////////////////////////////////////////////////////////////
@@ -424,7 +424,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculatePMM(f_coarse, omegaC);
 
     //////////////////////////////////////////////////////////////////////////
@@ -452,7 +452,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculateMPM(f_coarse, omegaC);
 
     //////////////////////////////////////////////////////////////////////////
@@ -470,7 +470,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculateMPP(f_coarse, omegaC);
     //////////////////////////////////////////////////////////////////////////
     // source node TNE = PPP
@@ -487,7 +487,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculatePPP(f_coarse, omegaC);
     //////////////////////////////////////////////////////////////////////////
     // source node BNE = PPM
@@ -504,7 +504,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible(
 
     omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse;
 
-    read(f_coarse, distCoarse, indices);
+    getPreCollisionDistribution(f_coarse, distCoarse, indices);
     momentsSet.calculatePPM(f_coarse, omegaC);
     // should be extractel until this line
     // - ###################################################################
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleFC_compressible.cu b/src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleFC_compressible.cu
rename to src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu
index 9decb44aab7d1f0944d98cd83fcfb081eabdabee..a95f3ed391a4bfe9a0355d9081883c1c674270de 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleFC_compressible.cu
+++ b/src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu
@@ -64,7 +64,7 @@ template <bool hasTurbulentViscosity> __device__ void interpolate(
     real fCoarse[27];
     vf::lbm::interpolateFC(fCoarse, epsilonNew, omegaCoarseNew, coefficients);
 
-    vf::gpu::write(distCoarse, indices, fCoarse);
+    vf::gpu::setPreCollisionDistribution(distCoarse, indices, fCoarse);
 }
 
 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Init27.cu b/src/gpu/core/GPU/Init27.cu
similarity index 50%
rename from src/gpu/VirtualFluids_GPU/GPU/Init27.cu
rename to src/gpu/core/GPU/Init27.cu
index ff844cfecd9e4cad02e41879ddd68246d0fe9ab2..a2197f6024114e885fca458ebcd082b43ab53cdb 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Init27.cu
+++ b/src/gpu/core/GPU/Init27.cu
@@ -24,33 +24,33 @@ __global__ void LBInit27( int myid,
                                      int maxlev)
 {
    Distributions27 D;
-   D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-   D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-   D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-   D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-   D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-   D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-   D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-   D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-   D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-   D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-   D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-   D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-   D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-   D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-   D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-   D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-   D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-   D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-   D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-   D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-   D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-   D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-   D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-   D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-   D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-   D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-   D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+   D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+   D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+   D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+   D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+   D.f[d00P] = &DD[d00P * numberOfLBnodes];
+   D.f[d00M] = &DD[d00M * numberOfLBnodes];
+   D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+   D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+   D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+   D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+   D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+   D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+   D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+   D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+   D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+   D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+   D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+   D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+   D.f[d000] = &DD[d000 * numberOfLBnodes];
+   D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+   D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+   D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+   D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+   D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+   D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+   D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+   D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
    ////////////////////////////////////////////////////////////////////////////////
    unsigned int  k;                   // Zugriff auf arrays im device
    //
@@ -141,33 +141,33 @@ __global__ void LBInit27( int myid,
 
    real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-   (D.f[DIR_000])[kzero] =   c8o27* (drho-cu_sq);
-   (D.f[DIR_P00])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-   (D.f[DIR_M00])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-   (D.f[DIR_0P0])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-   (D.f[DIR_0M0])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-   (D.f[DIR_00P])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-   (D.f[DIR_00M])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-   (D.f[DIR_PP0])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-   (D.f[DIR_MM0])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-   (D.f[DIR_PM0])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-   (D.f[DIR_MP0])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-   (D.f[DIR_P0P])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-   (D.f[DIR_M0M])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-   (D.f[DIR_P0M])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-   (D.f[DIR_M0P])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-   (D.f[DIR_0PP])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-   (D.f[DIR_0MM])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-   (D.f[DIR_0PM])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-   (D.f[DIR_0MP])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-   (D.f[DIR_PPP])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-   (D.f[DIR_MMM])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-   (D.f[DIR_PPM])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-   (D.f[DIR_MMP])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-   (D.f[DIR_PMP])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-   (D.f[DIR_MPM])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-   (D.f[DIR_PMM])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-   (D.f[DIR_MPP])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+   (D.f[d000])[kzero] =   c8o27* (drho-cu_sq);
+   (D.f[dP00])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+   (D.f[dM00])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+   (D.f[d0P0])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+   (D.f[d0M0])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+   (D.f[d00P])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+   (D.f[d00M])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+   (D.f[dPP0])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+   (D.f[dMM0])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+   (D.f[dPM0])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+   (D.f[dMP0])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+   (D.f[dP0P])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+   (D.f[dM0M])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+   (D.f[dP0M])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+   (D.f[dM0P])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+   (D.f[d0PP])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+   (D.f[d0MM])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+   (D.f[d0PM])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+   (D.f[d0MP])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+   (D.f[dPPP])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+   (D.f[dMMM])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+   (D.f[dPPM])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+   (D.f[dMMP])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+   (D.f[dPMP])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+   (D.f[dMPM])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+   (D.f[dPMM])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+   (D.f[dMPP])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 
 }
 ////////////////////////////////////////////////////////////////////////////////
@@ -218,63 +218,63 @@ __global__ void LBInitNonEqPartSP27( unsigned int* neighborX,
             Distributions27 D;
             if (EvenOrOdd==true)
             {
-                D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-                D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-                D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+                D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+                D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+                D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+                D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+                D.f[d00P] = &DD[d00P * numberOfLBnodes];
+                D.f[d00M] = &DD[d00M * numberOfLBnodes];
+                D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+                D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+                D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+                D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+                D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+                D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+                D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+                D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+                D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+                D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+                D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+                D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+                D.f[d000] = &DD[d000 * numberOfLBnodes];
+                D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+                D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+                D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+                D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+                D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+                D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+                D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+                D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
             }
             else
             {
-                D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-                D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-                D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-                D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-                D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-                D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-                D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-                D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-                D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-                D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-                D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-                D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-                D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-                D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-                D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-                D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-                D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-                D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-                D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-                D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-                D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-                D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
-                D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-                D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-                D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-                D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-                D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
+                D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+                D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+                D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+                D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+                D.f[d00M] = &DD[d00P * numberOfLBnodes];
+                D.f[d00P] = &DD[d00M * numberOfLBnodes];
+                D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+                D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+                D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+                D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+                D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+                D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+                D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+                D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+                D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+                D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+                D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+                D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+                D.f[d000] = &DD[d000 * numberOfLBnodes];
+                D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+                D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+                D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+                D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+                D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+                D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+                D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+                D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
             }
             //////////////////////////////////////////////////////////////////////////
             real drho = rho[k];//0.0f;//
@@ -396,63 +396,63 @@ __global__ void LBInitNonEqPartSP27( unsigned int* neighborX,
             //////////////////////////////////////////////////////////////////////////
             real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
             
-            (D.f[DIR_000])[kzero] =   c8o27* (drho-cu_sq);
-            (D.f[DIR_P00])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-            (D.f[DIR_M00])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-            (D.f[DIR_0P0])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-            (D.f[DIR_0M0])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-            (D.f[DIR_00P])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-            (D.f[DIR_00M])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-            (D.f[DIR_PP0])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-            (D.f[DIR_MM0])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-            (D.f[DIR_PM0])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-            (D.f[DIR_MP0])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-            (D.f[DIR_P0P])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-            (D.f[DIR_M0M])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-            (D.f[DIR_P0M])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-            (D.f[DIR_M0P])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-            (D.f[DIR_0PP])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-            (D.f[DIR_0MM])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-            (D.f[DIR_0PM])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-            (D.f[DIR_0MP])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-            (D.f[DIR_PPP])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-            (D.f[DIR_MMM])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-            (D.f[DIR_PPM])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-            (D.f[DIR_MMP])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-            (D.f[DIR_PMP])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-            (D.f[DIR_MPM])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-            (D.f[DIR_PMM])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-            (D.f[DIR_MPP])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+            (D.f[d000])[kzero] =   c8o27* (drho-cu_sq);
+            (D.f[dP00])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+            (D.f[dM00])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+            (D.f[d0P0])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+            (D.f[d0M0])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+            (D.f[d00P])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+            (D.f[d00M])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+            (D.f[dPP0])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+            (D.f[dMM0])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+            (D.f[dPM0])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+            (D.f[dMP0])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+            (D.f[dP0P])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+            (D.f[dM0M])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+            (D.f[dP0M])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+            (D.f[dM0P])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+            (D.f[d0PP])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+            (D.f[d0MM])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+            (D.f[d0PM])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+            (D.f[d0MP])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+            (D.f[dPPP])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+            (D.f[dMMM])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+            (D.f[dPPM])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+            (D.f[dMMP])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+            (D.f[dPMP])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+            (D.f[dMPM])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+            (D.f[dPMM])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+            (D.f[dMPP])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 
             //////////////////////////////////////////////////////////////////////////
 
-            (D.f[DIR_000])[kzero] += f_ZERO;
-            (D.f[DIR_P00])[ke   ] += f_E   ;
-            (D.f[DIR_M00])[kw   ] += f_E   ;
-            (D.f[DIR_0P0])[kn   ] += f_N   ;
-            (D.f[DIR_0M0])[ks   ] += f_N   ;
-            (D.f[DIR_00P])[kt   ] += f_T   ;
-            (D.f[DIR_00M])[kb   ] += f_T   ;
-            (D.f[DIR_PP0])[kne  ] += f_NE  ;
-            (D.f[DIR_MM0])[ksw  ] += f_NE  ;
-            (D.f[DIR_PM0])[kse  ] += f_SE  ;
-            (D.f[DIR_MP0])[knw  ] += f_SE  ;
-            (D.f[DIR_P0P])[kte  ] += f_TE  ;
-            (D.f[DIR_M0M])[kbw  ] += f_TE  ;
-            (D.f[DIR_P0M])[kbe  ] += f_BE  ;
-            (D.f[DIR_M0P])[ktw  ] += f_BE  ;
-            (D.f[DIR_0PP])[ktn  ] += f_TN  ;
-            (D.f[DIR_0MM])[kbs  ] += f_TN  ;
-            (D.f[DIR_0PM])[kbn  ] += f_BN  ;
-            (D.f[DIR_0MP])[kts  ] += f_BN  ;
-            (D.f[DIR_PPP])[ktne ] += f_TNE ;
-            (D.f[DIR_MMM])[kbsw ] += f_TNE ;
-            (D.f[DIR_PPM])[kbne ] += f_TSW ;
-            (D.f[DIR_MMP])[ktsw ] += f_TSW ;
-            (D.f[DIR_PMP])[ktse ] += f_TSE ;
-            (D.f[DIR_MPM])[kbnw ] += f_TSE ;
-            (D.f[DIR_PMM])[kbse ] += f_TNW ;
-            (D.f[DIR_MPP])[ktnw ] += f_TNW ;
+            (D.f[d000])[kzero] += f_ZERO;
+            (D.f[dP00])[ke   ] += f_E   ;
+            (D.f[dM00])[kw   ] += f_E   ;
+            (D.f[d0P0])[kn   ] += f_N   ;
+            (D.f[d0M0])[ks   ] += f_N   ;
+            (D.f[d00P])[kt   ] += f_T   ;
+            (D.f[d00M])[kb   ] += f_T   ;
+            (D.f[dPP0])[kne  ] += f_NE  ;
+            (D.f[dMM0])[ksw  ] += f_NE  ;
+            (D.f[dPM0])[kse  ] += f_SE  ;
+            (D.f[dMP0])[knw  ] += f_SE  ;
+            (D.f[dP0P])[kte  ] += f_TE  ;
+            (D.f[dM0M])[kbw  ] += f_TE  ;
+            (D.f[dP0M])[kbe  ] += f_BE  ;
+            (D.f[dM0P])[ktw  ] += f_BE  ;
+            (D.f[d0PP])[ktn  ] += f_TN  ;
+            (D.f[d0MM])[kbs  ] += f_TN  ;
+            (D.f[d0PM])[kbn  ] += f_BN  ;
+            (D.f[d0MP])[kts  ] += f_BN  ;
+            (D.f[dPPP])[ktne ] += f_TNE ;
+            (D.f[dMMM])[kbsw ] += f_TNE ;
+            (D.f[dPPM])[kbne ] += f_TSW ;
+            (D.f[dMMP])[ktsw ] += f_TSW ;
+            (D.f[dPMP])[ktse ] += f_TSE ;
+            (D.f[dMPM])[kbnw ] += f_TSE ;
+            (D.f[dPMM])[kbse ] += f_TNW ;
+            (D.f[dMPP])[ktnw ] += f_TNW ;
 
             //////////////////////////////////////////////////////////////////////////
         }
@@ -460,9 +460,9 @@ __global__ void LBInitNonEqPartSP27( unsigned int* neighborX,
 	    {
 		    //////////////////////////////////////////////////////////////////////////
 		    Distributions27 D;
-		    D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
+		    D.f[d000] = &DD[d000 * numberOfLBnodes];
 		    //////////////////////////////////////////////////////////////////////////
-		    (D.f[DIR_000])[k] = c96o1;
+		    (D.f[d000])[k] = c96o1;
 		    //////////////////////////////////////////////////////////////////////////
 	    }
    }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu b/src/gpu/core/GPU/InitAdvectionDiffusion27.cu
similarity index 50%
rename from src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu
rename to src/gpu/core/GPU/InitAdvectionDiffusion27.cu
index a4172403158adbd712e255676baa2616081e83b4..c58e4fd5a710562ad26d6bb74b3f0bb26749cb9b 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu
+++ b/src/gpu/core/GPU/InitAdvectionDiffusion27.cu
@@ -77,63 +77,63 @@ __global__ void InitAD27(
 		Distributions27 distAD;
 		if (isEvenTimestep)
 		{
-			distAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-			distAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-			distAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-			distAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-			distAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes];
-			distAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes];
-			distAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-			distAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-			distAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-			distAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-			distAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-			distAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-			distAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-			distAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-			distAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-			distAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-			distAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-			distAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-			distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-			distAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-			distAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-			distAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-			distAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-			distAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-			distAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-			distAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-			distAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes];
+			distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes];
+			distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes];
+			distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes];
+			distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes];
+			distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes];
+			distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes];
+			distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes];
+			distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes];
+			distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes];
+			distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes];
+			distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes];
+			distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes];
+			distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes];
+			distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes];
+			distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes];
+			distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes];
+			distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes];
+			distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes];
+			distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+			distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes];
+			distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes];
+			distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes];
+			distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes];
+			distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes];
+			distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes];
+			distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes];
+			distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes];
 		}
 		else
 		{
-			distAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes];
-			distAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes];
-			distAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes];
-			distAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes];
-			distAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes];
-			distAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes];
-			distAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes];
-			distAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes];
-			distAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes];
-			distAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes];
-			distAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes];
-			distAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes];
-			distAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes];
-			distAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes];
-			distAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes];
-			distAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes];
-			distAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes];
-			distAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes];
-			distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes];
-			distAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes];
-			distAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes];
-			distAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes];
-			distAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes];
-			distAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes];
-			distAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes];
-			distAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes];
-			distAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes];
+			distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes];
+			distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes];
+			distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes];
+			distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes];
+			distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes];
+			distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes];
+			distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes];
+			distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes];
+			distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes];
+			distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes];
+			distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes];
+			distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes];
+			distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes];
+			distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes];
+			distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes];
+			distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes];
+			distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes];
+			distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes];
+			distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes];
+			distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes];
+			distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes];
+			distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes];
+			distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes];
+			distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes];
+			distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes];
+			distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes];
+			distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes];
 		}
 		//////////////////////////////////////////////////////////////////////////
 		//! - Set local velocities and concetration
@@ -177,33 +177,33 @@ __global__ void InitAD27(
 		//!
 		real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
 
-		(distAD.f[DIR_000])[kzero] = c8o27  * conc * (c1o1 - cu_sq);
-		(distAD.f[DIR_P00])[ke   ] = c2o27  * conc * (c1o1 + c3o1 * ( vx1            ) + c9o2 * ( vx1            ) * ( vx1            ) - cu_sq);
-		(distAD.f[DIR_M00])[kw   ] = c2o27  * conc * (c1o1 + c3o1 * (-vx1            ) + c9o2 * (-vx1            ) * (-vx1            ) - cu_sq);
-		(distAD.f[DIR_0P0])[kn   ] = c2o27  * conc * (c1o1 + c3o1 * (       vx2      ) + c9o2 * (       vx2      ) * (       vx2      ) - cu_sq);
-		(distAD.f[DIR_0M0])[ks   ] = c2o27  * conc * (c1o1 + c3o1 * (     - vx2      ) + c9o2 * (     - vx2      ) * (     - vx2      ) - cu_sq);
-		(distAD.f[DIR_00P])[kt   ] = c2o27  * conc * (c1o1 + c3o1 * (             vx3) + c9o2 * (             vx3) * (             vx3) - cu_sq);
-		(distAD.f[DIR_00M])[kb   ] = c2o27  * conc * (c1o1 + c3o1 * (           - vx3) + c9o2 * (           - vx3) * (           - vx3) - cu_sq);
-		(distAD.f[DIR_PP0])[kne  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 + vx2      ) + c9o2 * ( vx1 + vx2      ) * ( vx1 + vx2      ) - cu_sq);
-		(distAD.f[DIR_MM0])[ksw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 - vx2      ) + c9o2 * (-vx1 - vx2      ) * (-vx1 - vx2      ) - cu_sq);
-		(distAD.f[DIR_PM0])[kse  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 - vx2      ) + c9o2 * ( vx1 - vx2      ) * ( vx1 - vx2      ) - cu_sq);
-		(distAD.f[DIR_MP0])[knw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 + vx2      ) + c9o2 * (-vx1 + vx2      ) * (-vx1 + vx2      ) - cu_sq);
-		(distAD.f[DIR_P0P])[kte  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       + vx3) + c9o2 * ( vx1       + vx3) * ( vx1       + vx3) - cu_sq);
-		(distAD.f[DIR_M0M])[kbw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       - vx3) + c9o2 * (-vx1       - vx3) * (-vx1       - vx3) - cu_sq);
-		(distAD.f[DIR_P0M])[kbe  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       - vx3) + c9o2 * ( vx1       - vx3) * ( vx1       - vx3) - cu_sq);
-		(distAD.f[DIR_M0P])[ktw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       + vx3) + c9o2 * (-vx1       + vx3) * (-vx1       + vx3) - cu_sq);
-		(distAD.f[DIR_0PP])[ktn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 + vx3) + c9o2 * (       vx2 + vx3) * (       vx2 + vx3) - cu_sq);
-		(distAD.f[DIR_0MM])[kbs  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 - vx3) + c9o2 * (     - vx2 - vx3) * (     - vx2 - vx3) - cu_sq);
-		(distAD.f[DIR_0PM])[kbn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 - vx3) + c9o2 * (       vx2 - vx3) * (       vx2 - vx3) - cu_sq);
-		(distAD.f[DIR_0MP])[kts  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 + vx3) + c9o2 * (     - vx2 + vx3) * (     - vx2 + vx3) - cu_sq);
-		(distAD.f[DIR_PPP])[ktne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 + vx3) + c9o2 * ( vx1 + vx2 + vx3) * ( vx1 + vx2 + vx3) - cu_sq);
-		(distAD.f[DIR_MMM])[kbsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
-		(distAD.f[DIR_PPM])[kbne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 - vx3) + c9o2 * ( vx1 + vx2 - vx3) * ( vx1 + vx2 - vx3) - cu_sq);
-		(distAD.f[DIR_MMP])[ktsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
-		(distAD.f[DIR_PMP])[ktse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 + vx3) + c9o2 * ( vx1 - vx2 + vx3) * ( vx1 - vx2 + vx3) - cu_sq);
-		(distAD.f[DIR_MPM])[kbnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
-		(distAD.f[DIR_PMM])[kbse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 - vx3) + c9o2 * ( vx1 - vx2 - vx3) * ( vx1 - vx2 - vx3) - cu_sq);
-		(distAD.f[DIR_MPP])[ktnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
+		(distAD.f[d000])[kzero] = c8o27  * conc * (c1o1 - cu_sq);
+		(distAD.f[dP00])[ke   ] = c2o27  * conc * (c1o1 + c3o1 * ( vx1            ) + c9o2 * ( vx1            ) * ( vx1            ) - cu_sq);
+		(distAD.f[dM00])[kw   ] = c2o27  * conc * (c1o1 + c3o1 * (-vx1            ) + c9o2 * (-vx1            ) * (-vx1            ) - cu_sq);
+		(distAD.f[d0P0])[kn   ] = c2o27  * conc * (c1o1 + c3o1 * (       vx2      ) + c9o2 * (       vx2      ) * (       vx2      ) - cu_sq);
+		(distAD.f[d0M0])[ks   ] = c2o27  * conc * (c1o1 + c3o1 * (     - vx2      ) + c9o2 * (     - vx2      ) * (     - vx2      ) - cu_sq);
+		(distAD.f[d00P])[kt   ] = c2o27  * conc * (c1o1 + c3o1 * (             vx3) + c9o2 * (             vx3) * (             vx3) - cu_sq);
+		(distAD.f[d00M])[kb   ] = c2o27  * conc * (c1o1 + c3o1 * (           - vx3) + c9o2 * (           - vx3) * (           - vx3) - cu_sq);
+		(distAD.f[dPP0])[kne  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 + vx2      ) + c9o2 * ( vx1 + vx2      ) * ( vx1 + vx2      ) - cu_sq);
+		(distAD.f[dMM0])[ksw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 - vx2      ) + c9o2 * (-vx1 - vx2      ) * (-vx1 - vx2      ) - cu_sq);
+		(distAD.f[dPM0])[kse  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 - vx2      ) + c9o2 * ( vx1 - vx2      ) * ( vx1 - vx2      ) - cu_sq);
+		(distAD.f[dMP0])[knw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 + vx2      ) + c9o2 * (-vx1 + vx2      ) * (-vx1 + vx2      ) - cu_sq);
+		(distAD.f[dP0P])[kte  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       + vx3) + c9o2 * ( vx1       + vx3) * ( vx1       + vx3) - cu_sq);
+		(distAD.f[dM0M])[kbw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       - vx3) + c9o2 * (-vx1       - vx3) * (-vx1       - vx3) - cu_sq);
+		(distAD.f[dP0M])[kbe  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       - vx3) + c9o2 * ( vx1       - vx3) * ( vx1       - vx3) - cu_sq);
+		(distAD.f[dM0P])[ktw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       + vx3) + c9o2 * (-vx1       + vx3) * (-vx1       + vx3) - cu_sq);
+		(distAD.f[d0PP])[ktn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 + vx3) + c9o2 * (       vx2 + vx3) * (       vx2 + vx3) - cu_sq);
+		(distAD.f[d0MM])[kbs  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 - vx3) + c9o2 * (     - vx2 - vx3) * (     - vx2 - vx3) - cu_sq);
+		(distAD.f[d0PM])[kbn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 - vx3) + c9o2 * (       vx2 - vx3) * (       vx2 - vx3) - cu_sq);
+		(distAD.f[d0MP])[kts  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 + vx3) + c9o2 * (     - vx2 + vx3) * (     - vx2 + vx3) - cu_sq);
+		(distAD.f[dPPP])[ktne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 + vx3) + c9o2 * ( vx1 + vx2 + vx3) * ( vx1 + vx2 + vx3) - cu_sq);
+		(distAD.f[dMMM])[kbsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
+		(distAD.f[dPPM])[kbne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 - vx3) + c9o2 * ( vx1 + vx2 - vx3) * ( vx1 + vx2 - vx3) - cu_sq);
+		(distAD.f[dMMP])[ktsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
+		(distAD.f[dPMP])[ktse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 + vx3) + c9o2 * ( vx1 - vx2 + vx3) * ( vx1 - vx2 + vx3) - cu_sq);
+		(distAD.f[dMPM])[kbnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
+		(distAD.f[dPMM])[kbse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 - vx3) + c9o2 * ( vx1 - vx2 - vx3) * ( vx1 - vx2 - vx3) - cu_sq);
+		(distAD.f[dMPP])[ktnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
 	}
 }
 
@@ -263,63 +263,63 @@ __global__ void InitAD27(
 //          Distributions27 D27;
 //          if (EvenOrOdd==true)
 //          {
-//             D27.f[DIR_P00] = &DD27[DIR_P00 * size_Mat];
-//             D27.f[DIR_M00] = &DD27[DIR_M00 * size_Mat];
-//             D27.f[DIR_0P0] = &DD27[DIR_0P0 * size_Mat];
-//             D27.f[DIR_0M0] = &DD27[DIR_0M0 * size_Mat];
-//             D27.f[DIR_00P] = &DD27[DIR_00P * size_Mat];
-//             D27.f[DIR_00M] = &DD27[DIR_00M * size_Mat];
-//             D27.f[DIR_PP0] = &DD27[DIR_PP0 * size_Mat];
-//             D27.f[DIR_MM0] = &DD27[DIR_MM0 * size_Mat];
-//             D27.f[DIR_PM0] = &DD27[DIR_PM0 * size_Mat];
-//             D27.f[DIR_MP0] = &DD27[DIR_MP0 * size_Mat];
-//             D27.f[DIR_P0P] = &DD27[DIR_P0P * size_Mat];
-//             D27.f[DIR_M0M] = &DD27[DIR_M0M * size_Mat];
-//             D27.f[DIR_P0M] = &DD27[DIR_P0M * size_Mat];
-//             D27.f[DIR_M0P] = &DD27[DIR_M0P * size_Mat];
-//             D27.f[DIR_0PP] = &DD27[DIR_0PP * size_Mat];
-//             D27.f[DIR_0MM] = &DD27[DIR_0MM * size_Mat];
-//             D27.f[DIR_0PM] = &DD27[DIR_0PM * size_Mat];
-//             D27.f[DIR_0MP] = &DD27[DIR_0MP * size_Mat];
-//             D27.f[DIR_000] = &DD27[DIR_000 * size_Mat];
-//             D27.f[DIR_PPP] = &DD27[DIR_PPP * size_Mat];
-//             D27.f[DIR_MMP] = &DD27[DIR_MMP * size_Mat];
-//             D27.f[DIR_PMP] = &DD27[DIR_PMP * size_Mat];
-//             D27.f[DIR_MPP] = &DD27[DIR_MPP * size_Mat];
-//             D27.f[DIR_PPM] = &DD27[DIR_PPM * size_Mat];
-//             D27.f[DIR_MMM] = &DD27[DIR_MMM * size_Mat];
-//             D27.f[DIR_PMM] = &DD27[DIR_PMM * size_Mat];
-//             D27.f[DIR_MPM] = &DD27[DIR_MPM * size_Mat];
+//             D27.f[dP00] = &DD27[dP00 * size_Mat];
+//             D27.f[dM00] = &DD27[dM00 * size_Mat];
+//             D27.f[d0P0] = &DD27[d0P0 * size_Mat];
+//             D27.f[d0M0] = &DD27[d0M0 * size_Mat];
+//             D27.f[d00P] = &DD27[d00P * size_Mat];
+//             D27.f[d00M] = &DD27[d00M * size_Mat];
+//             D27.f[dPP0] = &DD27[dPP0 * size_Mat];
+//             D27.f[dMM0] = &DD27[dMM0 * size_Mat];
+//             D27.f[dPM0] = &DD27[dPM0 * size_Mat];
+//             D27.f[dMP0] = &DD27[dMP0 * size_Mat];
+//             D27.f[dP0P] = &DD27[dP0P * size_Mat];
+//             D27.f[dM0M] = &DD27[dM0M * size_Mat];
+//             D27.f[dP0M] = &DD27[dP0M * size_Mat];
+//             D27.f[dM0P] = &DD27[dM0P * size_Mat];
+//             D27.f[d0PP] = &DD27[d0PP * size_Mat];
+//             D27.f[d0MM] = &DD27[d0MM * size_Mat];
+//             D27.f[d0PM] = &DD27[d0PM * size_Mat];
+//             D27.f[d0MP] = &DD27[d0MP * size_Mat];
+//             D27.f[d000] = &DD27[d000 * size_Mat];
+//             D27.f[dPPP] = &DD27[dPPP * size_Mat];
+//             D27.f[dMMP] = &DD27[dMMP * size_Mat];
+//             D27.f[dPMP] = &DD27[dPMP * size_Mat];
+//             D27.f[dMPP] = &DD27[dMPP * size_Mat];
+//             D27.f[dPPM] = &DD27[dPPM * size_Mat];
+//             D27.f[dMMM] = &DD27[dMMM * size_Mat];
+//             D27.f[dPMM] = &DD27[dPMM * size_Mat];
+//             D27.f[dMPM] = &DD27[dMPM * size_Mat];
 //          }
 //          else
 //          {
-//             D27.f[DIR_M00] = &DD27[DIR_P00 * size_Mat];
-//             D27.f[DIR_P00] = &DD27[DIR_M00 * size_Mat];
-//             D27.f[DIR_0M0] = &DD27[DIR_0P0 * size_Mat];
-//             D27.f[DIR_0P0] = &DD27[DIR_0M0 * size_Mat];
-//             D27.f[DIR_00M] = &DD27[DIR_00P * size_Mat];
-//             D27.f[DIR_00P] = &DD27[DIR_00M * size_Mat];
-//             D27.f[DIR_MM0] = &DD27[DIR_PP0 * size_Mat];
-//             D27.f[DIR_PP0] = &DD27[DIR_MM0 * size_Mat];
-//             D27.f[DIR_MP0] = &DD27[DIR_PM0 * size_Mat];
-//             D27.f[DIR_PM0] = &DD27[DIR_MP0 * size_Mat];
-//             D27.f[DIR_M0M] = &DD27[DIR_P0P * size_Mat];
-//             D27.f[DIR_P0P] = &DD27[DIR_M0M * size_Mat];
-//             D27.f[DIR_M0P] = &DD27[DIR_P0M * size_Mat];
-//             D27.f[DIR_P0M] = &DD27[DIR_M0P * size_Mat];
-//             D27.f[DIR_0MM] = &DD27[DIR_0PP * size_Mat];
-//             D27.f[DIR_0PP] = &DD27[DIR_0MM * size_Mat];
-//             D27.f[DIR_0MP] = &DD27[DIR_0PM * size_Mat];
-//             D27.f[DIR_0PM] = &DD27[DIR_0MP * size_Mat];
-//             D27.f[DIR_000] = &DD27[DIR_000 * size_Mat];
-//             D27.f[DIR_MMM] = &DD27[DIR_PPP * size_Mat];
-//             D27.f[DIR_PPM] = &DD27[DIR_MMP * size_Mat];
-//             D27.f[DIR_MPM] = &DD27[DIR_PMP * size_Mat];
-//             D27.f[DIR_PMM] = &DD27[DIR_MPP * size_Mat];
-//             D27.f[DIR_MMP] = &DD27[DIR_PPM * size_Mat];
-//             D27.f[DIR_PPP] = &DD27[DIR_MMM * size_Mat];
-//             D27.f[DIR_MPP] = &DD27[DIR_PMM * size_Mat];
-//             D27.f[DIR_PMP] = &DD27[DIR_MPM * size_Mat];
+//             D27.f[dM00] = &DD27[dP00 * size_Mat];
+//             D27.f[dP00] = &DD27[dM00 * size_Mat];
+//             D27.f[d0M0] = &DD27[d0P0 * size_Mat];
+//             D27.f[d0P0] = &DD27[d0M0 * size_Mat];
+//             D27.f[d00M] = &DD27[d00P * size_Mat];
+//             D27.f[d00P] = &DD27[d00M * size_Mat];
+//             D27.f[dMM0] = &DD27[dPP0 * size_Mat];
+//             D27.f[dPP0] = &DD27[dMM0 * size_Mat];
+//             D27.f[dMP0] = &DD27[dPM0 * size_Mat];
+//             D27.f[dPM0] = &DD27[dMP0 * size_Mat];
+//             D27.f[dM0M] = &DD27[dP0P * size_Mat];
+//             D27.f[dP0P] = &DD27[dM0M * size_Mat];
+//             D27.f[dM0P] = &DD27[dP0M * size_Mat];
+//             D27.f[dP0M] = &DD27[dM0P * size_Mat];
+//             D27.f[d0MM] = &DD27[d0PP * size_Mat];
+//             D27.f[d0PP] = &DD27[d0MM * size_Mat];
+//             D27.f[d0MP] = &DD27[d0PM * size_Mat];
+//             D27.f[d0PM] = &DD27[d0MP * size_Mat];
+//             D27.f[d000] = &DD27[d000 * size_Mat];
+//             D27.f[dMMM] = &DD27[dPPP * size_Mat];
+//             D27.f[dPPM] = &DD27[dMMP * size_Mat];
+//             D27.f[dMPM] = &DD27[dPMP * size_Mat];
+//             D27.f[dPMM] = &DD27[dMPP * size_Mat];
+//             D27.f[dMMP] = &DD27[dPPM * size_Mat];
+//             D27.f[dPPP] = &DD27[dMMM * size_Mat];
+//             D27.f[dMPP] = &DD27[dPMM * size_Mat];
+//             D27.f[dPMP] = &DD27[dMPM * size_Mat];
 //          }
 //          //////////////////////////////////////////////////////////////////////////
 //          real ConcD = Conc[k];
@@ -390,33 +390,33 @@ __global__ void InitAD27(
 //          ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //          real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-//          (D27.f[DIR_000])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
-//          (D27.f[DIR_P00])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-//          (D27.f[DIR_M00])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-//          (D27.f[DIR_0P0])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-//          (D27.f[DIR_0M0])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-//          (D27.f[DIR_00P])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-//          (D27.f[DIR_00M])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-//          (D27.f[DIR_PP0])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-//          (D27.f[DIR_MM0])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-//          (D27.f[DIR_PM0])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-//          (D27.f[DIR_MP0])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-//          (D27.f[DIR_P0P])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-//          (D27.f[DIR_M0M])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-//          (D27.f[DIR_P0M])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-//          (D27.f[DIR_M0P])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-//          (D27.f[DIR_0PP])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-//          (D27.f[DIR_0MM])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-//          (D27.f[DIR_0PM])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-//          (D27.f[DIR_0MP])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-//          (D27.f[DIR_PPP])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-//          (D27.f[DIR_MMM])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-//          (D27.f[DIR_PPM])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-//          (D27.f[DIR_MMP])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-//          (D27.f[DIR_PMP])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-//          (D27.f[DIR_MPM])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-//          (D27.f[DIR_PMM])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-//          (D27.f[DIR_MPP])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+//          (D27.f[d000])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
+//          (D27.f[dP00])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+//          (D27.f[dM00])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+//          (D27.f[d0P0])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+//          (D27.f[d0M0])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+//          (D27.f[d00P])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+//          (D27.f[d00M])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+//          (D27.f[dPP0])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+//          (D27.f[dMM0])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+//          (D27.f[dPM0])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+//          (D27.f[dMP0])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+//          (D27.f[dP0P])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+//          (D27.f[dM0M])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+//          (D27.f[dP0M])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+//          (D27.f[dM0P])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+//          (D27.f[d0PP])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+//          (D27.f[d0MM])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+//          (D27.f[d0PM])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+//          (D27.f[d0MP])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+//          (D27.f[dPPP])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+//          (D27.f[dMMM])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+//          (D27.f[dPPM])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+//          (D27.f[dMMP])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+//          (D27.f[dPMP])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+//          (D27.f[dMPM])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+//          (D27.f[dPMM])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+//          (D27.f[dMPP])[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/KineticEnergyAnalyzer.cu b/src/gpu/core/GPU/KineticEnergyAnalyzer.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu
rename to src/gpu/core/GPU/KineticEnergyAnalyzer.cu
diff --git a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h b/src/gpu/core/GPU/KineticEnergyAnalyzer.h
similarity index 73%
rename from src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h
rename to src/gpu/core/GPU/KineticEnergyAnalyzer.h
index 11759c24460a1541d9aa66e325e6b04c15c1d488..0ca95bc1bfd51cce48b9aa8ce248e99b49419523 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h
+++ b/src/gpu/core/GPU/KineticEnergyAnalyzer.h
@@ -6,13 +6,13 @@
 
 
 
-#include "PointerDefinitions.h"
-#include "DataTypes.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/PointerDefinitions.h>
+#include <basics/DataTypes.h>
+
 
 class Parameter;
 
-class VIRTUALFLUIDS_GPU_EXPORT KineticEnergyAnalyzer
+class KineticEnergyAnalyzer
 {
 private:
 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu b/src/gpu/core/GPU/LBMKernel.cu
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
rename to src/gpu/core/GPU/LBMKernel.cu
index 3dfb649efe35ea46562ee4216091e6e3970212a0..5bb4ada3ab3da9929931e4a6fe4cae1300a1e701 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
+++ b/src/gpu/core/GPU/LBMKernel.cu
@@ -434,7 +434,7 @@ void KernelPMCumOneCompSP27(
 {
     vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes);
 
-    LB_Kernel_PM_Cum_One_Comp_SP_27 <<< grid.grid, grid.threads >>>(
+    K15CompressibleNavierStokesPorousMedia_Device <<< grid.grid, grid.threads >>>(
         omega,
         neighborX,
         neighborY,
@@ -506,7 +506,7 @@ void KernelADincomp7(
 {
     vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes);
 
-    LB_Kernel_AD_Incomp_7<<< grid.grid, grid.threads >>>(
+    B12IncompressibleAdvectionDiffusionD3Q7_Device<<< grid.grid, grid.threads >>>(
         diffusivity,
         bcMatD,
         neighborX,
@@ -533,7 +533,7 @@ void KernelADincomp27(
 {
     vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes);
 
-    LB_Kernel_AD_Incomp_27<<< grid.grid, grid.threads >>>(
+    F16IncompressibleAdvectionDiffusion_Device<<< grid.grid, grid.threads >>>(
         diffusivity,
         bcMatD,
         neighborX,
@@ -3000,7 +3000,7 @@ void QPressNoRhoDev27(LBMSimulationParameter* parameterDevice, QforBoundaryCondi
         parameterDevice->neighborZ,
         parameterDevice->numberOfNodes,
         parameterDevice->isEvenTimestep,
-        vf::lbm::dir::DIR_P00);
+        vf::lbm::dir::dP00);
     getLastCudaError("QPressNoRhoDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
@@ -3021,7 +3021,7 @@ void QPressZeroRhoOutflowDev27(LBMSimulationParameter* parameterDevice, QforBoun
         parameterDevice->neighborZ,
         parameterDevice->numberOfNodes,
         parameterDevice->isEvenTimestep,
-        vf::lbm::dir::DIR_P00,
+        vf::lbm::dir::dP00,
         parameterDevice->outflowPressureCorrectionFactor);
     getLastCudaError("QPressZeroRhoOutflowDevice27 execution failed");
 }
diff --git a/src/gpu/core/GPU/NoSlipBCs27.cu b/src/gpu/core/GPU/NoSlipBCs27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..ff98f16ef79fd86c15f57a6a90e32daaa3e07440
--- /dev/null
+++ b/src/gpu/core/GPU/NoSlipBCs27.cu
@@ -0,0 +1,2548 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 NoSlipBCs27.cu
+//! \ingroup GPU
+//! \author Martin Schoenherr, Anna Wellmann
+//======================================================================================
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+#include "LBM/GPUHelperFunctions/KernelUtilities.h"
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+using namespace vf::gpu;
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QDevice3rdMomentsComp27(
+    real* distributions, 
+    int* subgridDistanceIndices, 
+    real* subgridDistances,
+    unsigned int numberOfBCnodes, 
+    real omega, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &distributions[dP00 * numberOfLBnodes];
+      D.f[dM00] = &distributions[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &distributions[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &distributions[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &distributions[d00P * numberOfLBnodes];
+      D.f[d00M] = &distributions[d00M * numberOfLBnodes];
+      D.f[dPP0] = &distributions[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &distributions[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &distributions[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &distributions[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &distributions[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &distributions[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &distributions[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &distributions[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &distributions[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &distributions[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &distributions[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &distributions[d0MP * numberOfLBnodes];
+      D.f[d000] = &distributions[d000 * numberOfLBnodes];
+      D.f[dPPP] = &distributions[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &distributions[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &distributions[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &distributions[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &distributions[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &distributions[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &distributions[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &distributions[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &distributions[dP00 * numberOfLBnodes];
+      D.f[dP00] = &distributions[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &distributions[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &distributions[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &distributions[d00P * numberOfLBnodes];
+      D.f[d00P] = &distributions[d00M * numberOfLBnodes];
+      D.f[dMM0] = &distributions[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &distributions[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &distributions[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &distributions[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &distributions[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &distributions[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &distributions[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &distributions[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &distributions[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &distributions[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &distributions[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &distributions[d0MP * numberOfLBnodes];
+      D.f[d000] = &distributions[d000 * numberOfLBnodes];
+      D.f[dPPP] = &distributions[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &distributions[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &distributions[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &distributions[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &distributions[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &distributions[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &distributions[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &distributions[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k < 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   = &subgridDistances[dP00 * numberOfBCnodes];
+      q_dirW   = &subgridDistances[dM00 * numberOfBCnodes];
+      q_dirN   = &subgridDistances[d0P0 * numberOfBCnodes];
+      q_dirS   = &subgridDistances[d0M0 * numberOfBCnodes];
+      q_dirT   = &subgridDistances[d00P * numberOfBCnodes];
+      q_dirB   = &subgridDistances[d00M * numberOfBCnodes];
+      q_dirNE  = &subgridDistances[dPP0 * numberOfBCnodes];
+      q_dirSW  = &subgridDistances[dMM0 * numberOfBCnodes];
+      q_dirSE  = &subgridDistances[dPM0 * numberOfBCnodes];
+      q_dirNW  = &subgridDistances[dMP0 * numberOfBCnodes];
+      q_dirTE  = &subgridDistances[dP0P * numberOfBCnodes];
+      q_dirBW  = &subgridDistances[dM0M * numberOfBCnodes];
+      q_dirBE  = &subgridDistances[dP0M * numberOfBCnodes];
+      q_dirTW  = &subgridDistances[dM0P * numberOfBCnodes];
+      q_dirTN  = &subgridDistances[d0PP * numberOfBCnodes];
+      q_dirBS  = &subgridDistances[d0MM * numberOfBCnodes];
+      q_dirBN  = &subgridDistances[d0PM * numberOfBCnodes];
+      q_dirTS  = &subgridDistances[d0MP * numberOfBCnodes];
+      q_dirTNE = &subgridDistances[dPPP * numberOfBCnodes];
+      q_dirTSW = &subgridDistances[dMMP * numberOfBCnodes];
+      q_dirTSE = &subgridDistances[dPMP * numberOfBCnodes];
+      q_dirTNW = &subgridDistances[dMPP * numberOfBCnodes];
+      q_dirBNE = &subgridDistances[dPPM * numberOfBCnodes];
+      q_dirBSW = &subgridDistances[dMMM * numberOfBCnodes];
+      q_dirBSE = &subgridDistances[dPMM * numberOfBCnodes];
+      q_dirBNW = &subgridDistances[dMPM * numberOfBCnodes];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index
+      unsigned int numberOfNodesK  = subgridDistanceIndices[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];
+      unsigned int ksw  = neighborY[kw];
+      unsigned int kne  = numberOfNodesK;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = numberOfNodesK;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = numberOfNodesK;
+      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 = numberOfNodesK;
+      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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[d000])[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); 
+
+
+      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &distributions[dP00 * numberOfLBnodes];
+         D.f[dM00] = &distributions[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &distributions[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &distributions[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &distributions[d00P * numberOfLBnodes];
+         D.f[d00M] = &distributions[d00M * numberOfLBnodes];
+         D.f[dPP0] = &distributions[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &distributions[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &distributions[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &distributions[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &distributions[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &distributions[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &distributions[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &distributions[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &distributions[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &distributions[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &distributions[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &distributions[d0MP * numberOfLBnodes];
+         D.f[d000] = &distributions[d000 * numberOfLBnodes];
+         D.f[dPPP] = &distributions[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &distributions[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &distributions[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &distributions[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &distributions[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &distributions[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &distributions[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &distributions[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &distributions[dP00 * numberOfLBnodes];
+         D.f[dP00] = &distributions[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &distributions[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &distributions[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &distributions[d00P * numberOfLBnodes];
+         D.f[d00P] = &distributions[d00M * numberOfLBnodes];
+         D.f[dMM0] = &distributions[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &distributions[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &distributions[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &distributions[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &distributions[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &distributions[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &distributions[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &distributions[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &distributions[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &distributions[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &distributions[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &distributions[d0MP * numberOfLBnodes];
+         D.f[d000] = &distributions[d000 * numberOfLBnodes];
+         D.f[dPPP] = &distributions[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &distributions[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &distributions[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &distributions[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &distributions[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &distributions[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &distributions[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &distributions[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+         //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  
+	  
+	  //ToDo anders klammern !!!!!!
+	  
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 m3 = f_E - f_W - c2o1 * drho * c2o27 * (c3o1*( vx1        ));
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
+         (D.f[dM00])[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[dM00])[kw]=zero;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 m3 = f_W - f_E - c2o1 * drho * c2o27 * (c3o1*(-vx1        ));
+         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
+         (D.f[dP00])[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[dP00])[ke]=zero;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 m3 = f_N - f_S - c2o1 * drho * c2o27 * (c3o1*( vx2        ));
+         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
+         (D.f[d0M0])[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[d0M0])[ks]=zero;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 m3 = f_S - f_N - c2o1 * drho * c2o27 * (c3o1*(   -vx2     ));
+         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
+         (D.f[d0P0])[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[d0P0])[kn]=zero;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 m3 = f_T - f_B - c2o1 * drho * c2o27 * (c3o1*(         vx3));
+         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
+         (D.f[d00M])[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[d00M])[kb]=one;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 m3 = f_B - f_T - c2o1 * drho * c2o27 * (c3o1*(        -vx3));
+         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
+         (D.f[d00P])[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[d00P])[kt]=zero;
+      }
+
+      q = q_dirNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dMM0])[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[dMM0])[ksw]=zero;
+      }
+
+      q = q_dirSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dPP0])[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[dPP0])[kne]=zero;
+      }
+
+      q = q_dirSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dMP0])[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[dMP0])[knw]=zero;
+      }
+
+      q = q_dirNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dPM0])[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[dPM0])[kse]=zero;
+      }
+
+      q = q_dirTE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dM0M])[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[dM0M])[kbw]=zero;
+      }
+
+      q = q_dirBW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dP0P])[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[dP0P])[kte]=zero;
+      }
+
+      q = q_dirBE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dM0P])[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[dM0P])[ktw]=zero;
+      }
+
+      q = q_dirTW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dP0M])[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[dP0M])[kbe]=zero;
+      }
+
+      q = q_dirTN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[d0MM])[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[d0MM])[kbs]=zero;
+      }
+
+      q = q_dirBS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[d0PP])[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[d0PP])[ktn]=zero;
+      }
+
+      q = q_dirBN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[d0MP])[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[d0MP])[kts]=zero;
+      }
+
+      q = q_dirTS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[d0PM])[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[d0PM])[kbn]=zero;
+      }
+
+      q = q_dirTNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dMMM])[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[dMMM])[kbsw]=zero;
+      }
+
+      q = q_dirBSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dPPP])[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[dPPP])[ktne]=zero;
+      }
+
+      q = q_dirBNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dMMP])[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[dMMP])[ktsw]=zero;
+      }
+
+      q = q_dirTSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dPPM])[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[dPPM])[kbne]=zero;
+      }
+
+      q = q_dirTSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dMPM])[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[dMPM])[kbnw]=zero;
+      }
+
+      q = q_dirBNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dPMP])[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[dPMP])[ktse]=zero;
+      }
+
+      q = q_dirBSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dMPP])[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[dMPP])[ktnw]=zero;
+      }
+
+      q = q_dirTNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+		 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[dPMM])[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[dPMM])[kbse]=zero;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QDeviceIncompHighNu27(
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes,
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      unsigned int ksw  = neighborY[kw];
+      unsigned int kne  = numberOfNodesK;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = numberOfNodesK;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = numberOfNodesK;
+      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 = numberOfNodesK;
+      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_E   = (D.f[dP00])[ke   ];
+      f_W   = (D.f[dM00])[kw   ];
+      f_N   = (D.f[d0P0])[kn   ];
+      f_S   = (D.f[d0M0])[ks   ];
+      f_T   = (D.f[d00P])[kt   ];
+      f_B   = (D.f[d00M])[kb   ];
+      f_NE  = (D.f[dPP0])[kne  ];
+      f_SW  = (D.f[dMM0])[ksw  ];
+      f_SE  = (D.f[dPM0])[kse  ];
+      f_NW  = (D.f[dMP0])[knw  ];
+      f_TE  = (D.f[dP0P])[kte  ];
+      f_BW  = (D.f[dM0M])[kbw  ];
+      f_BE  = (D.f[dP0M])[kbe  ];
+      f_TW  = (D.f[dM0P])[ktw  ];
+      f_TN  = (D.f[d0PP])[ktn  ];
+      f_BS  = (D.f[d0MM])[kbs  ];
+      f_BN  = (D.f[d0PM])[kbn  ];
+      f_TS  = (D.f[d0MP])[kts  ];
+      f_TNE = (D.f[dPPP])[ktne ];
+      f_TSW = (D.f[dMMP])[ktsw ];
+      f_TSE = (D.f[dPMP])[ktse ];
+      f_TNW = (D.f[dMPP])[ktnw ];
+      f_BNE = (D.f[dPPM])[kbne ];
+      f_BSW = (D.f[dMMM])[kbsw ];
+      f_BSE = (D.f[dPMM])[kbse ];
+      f_BNW = (D.f[dMPM])[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[d000])[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));// / (one + 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));// / (one + 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));// / (one + drho); 
+
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+         //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real VeloX = c0o1;
+      real VeloY = c0o1;
+      real VeloZ = c0o1;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  
+	  
+	  //ToDo anders klammern !!!!!!
+	  
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) /** (one + drho)*/-cu_sq); 
+         (D.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QDeviceCompHighNu27(
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      unsigned int ksw  = neighborY[kw];
+      unsigned int kne  = numberOfNodesK;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = numberOfNodesK;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = numberOfNodesK;
+      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 = numberOfNodesK;
+      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_E   = (D.f[dP00])[ke   ];
+      f_W   = (D.f[dM00])[kw   ];
+      f_N   = (D.f[d0P0])[kn   ];
+      f_S   = (D.f[d0M0])[ks   ];
+      f_T   = (D.f[d00P])[kt   ];
+      f_B   = (D.f[d00M])[kb   ];
+      f_NE  = (D.f[dPP0])[kne  ];
+      f_SW  = (D.f[dMM0])[ksw  ];
+      f_SE  = (D.f[dPM0])[kse  ];
+      f_NW  = (D.f[dMP0])[knw  ];
+      f_TE  = (D.f[dP0P])[kte  ];
+      f_BW  = (D.f[dM0M])[kbw  ];
+      f_BE  = (D.f[dP0M])[kbe  ];
+      f_TW  = (D.f[dM0P])[ktw  ];
+      f_TN  = (D.f[d0PP])[ktn  ];
+      f_BS  = (D.f[d0MM])[kbs  ];
+      f_BN  = (D.f[d0PM])[kbn  ];
+      f_TS  = (D.f[d0MP])[kts  ];
+      f_TNE = (D.f[dPPP])[ktne ];
+      f_TSW = (D.f[dMMP])[ktsw ];
+      f_TSE = (D.f[dPMP])[ktse ];
+      f_TNW = (D.f[dMPP])[ktnw ];
+      f_BNE = (D.f[dPPM])[kbne ];
+      f_BSW = (D.f[dMMM])[kbsw ];
+      f_BSE = (D.f[dPMM])[kbse ];
+      f_BNW = (D.f[dMPM])[kbnw ];
+      //f_W    = (D.f[dP00])[ke   ];
+      //f_E    = (D.f[dM00])[kw   ];
+      //f_S    = (D.f[d0P0])[kn   ];
+      //f_N    = (D.f[d0M0])[ks   ];
+      //f_B    = (D.f[d00P])[kt   ];
+      //f_T    = (D.f[d00M])[kb   ];
+      //f_SW   = (D.f[dPP0])[kne  ];
+      //f_NE   = (D.f[dMM0])[ksw  ];
+      //f_NW   = (D.f[dPM0])[kse  ];
+      //f_SE   = (D.f[dMP0])[knw  ];
+      //f_BW   = (D.f[dP0P])[kte  ];
+      //f_TE   = (D.f[dM0M])[kbw  ];
+      //f_TW   = (D.f[dP0M])[kbe  ];
+      //f_BE   = (D.f[dM0P])[ktw  ];
+      //f_BS   = (D.f[d0PP])[ktn  ];
+      //f_TN   = (D.f[d0MM])[kbs  ];
+      //f_TS   = (D.f[d0PM])[kbn  ];
+      //f_BN   = (D.f[d0MP])[kts  ];
+      //f_BSW  = (D.f[dPPP])[ktne ];
+      //f_BNE  = (D.f[dMMP])[ktsw ];
+      //f_BNW  = (D.f[dPMP])[ktse ];
+      //f_BSE  = (D.f[dMPP])[ktnw ];
+      //f_TSW  = (D.f[dPPM])[kbne ];
+      //f_TNE  = (D.f[dMMM])[kbsw ];
+      //f_TNW  = (D.f[dPMM])[kbse ];
+      //f_TSE  = (D.f[dMPM])[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[d000])[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); 
+
+
+      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+         //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real VeloX = c0o1;
+      real VeloY = c0o1;
+      real VeloZ = c0o1;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  
+	  
+	  //ToDo anders klammern !!!!!!
+	  
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
+         (D.f[dM00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
+         //(D.f[dM00])[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[dM00])[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[dP00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
+         //(D.f[dP00])[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[dP00])[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[d0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
+         //(D.f[d0M0])[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[d0M0])[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[d0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
+         //(D.f[d0P0])[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[d0P0])[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[d00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
+         //(D.f[d00M])[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[d00M])[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[d00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
+         //(D.f[d00P])[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[d00P])[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[dMM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[dMM0])[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[dMM0])[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[dPP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[dPP0])[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[dPP0])[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[dMP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[dMP0])[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[dMP0])[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[dPM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[dPM0])[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[dPM0])[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[dM0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[dM0M])[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[dM0M])[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[dP0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[dP0P])[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[dP0P])[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[dM0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[dM0P])[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[dM0P])[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[dP0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[dP0M])[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[dP0M])[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[d0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[d0MM])[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[d0MM])[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[d0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[d0PP])[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[d0PP])[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[d0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[d0MP])[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[d0MP])[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[d0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[d0PM])[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[d0PM])[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[dMMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dMMM])[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[dMMM])[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[dPPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dPPP])[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[dPPP])[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[dMMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dMMP])[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[dMMP])[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[dPPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dPPM])[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[dPPM])[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[dMPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dMPM])[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[dMPM])[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[dPMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dPMP])[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[dPMP])[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[dMPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dMPP])[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[dMPP])[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[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dPMM])[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[dPMM])[kbse]=zero;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QDeviceComp27(
+    real* distributions, 
+    int* subgridDistanceIndices, 
+    real* subgridDistances,
+    unsigned int numberOfBCnodes, 
+    real omega, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   //////////////////////////////////////////////////////////////////////////
+   //! The no-slip boundary condition is executed in the following steps
+   //!
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+      
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
+      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  = indexOfBCnode;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = indexOfBCnode;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = indexOfBCnode;
+      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 = indexOfBCnode;
+      unsigned int kbsw = neighborZ[ksw];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[d000])[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); 
+
+      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);
+
+       ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      real feq, q, velocityLB;
+      q = (subgridD.q[dP00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
+      {
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega);
+      }
+
+      q = (subgridD.q[dM00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega);
+      }
+
+      q = (subgridD.q[d0P0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega);
+      }
+
+      q = (subgridD.q[d0M0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega);
+      }
+
+      q = (subgridD.q[d00P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega);
+      }
+
+      q = (subgridD.q[d00M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega);
+      }
+
+      q = (subgridD.q[dPP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega);
+      }
+
+      q = (subgridD.q[dMM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega);
+      }
+
+      q = (subgridD.q[dPM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega);
+      }
+
+      q = (subgridD.q[dMP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega);
+      }
+
+      q = (subgridD.q[dP0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega);
+      }
+
+      q = (subgridD.q[dM0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dP0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega);
+      }
+
+      q = (subgridD.q[dP0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega);
+      }
+
+      q = (subgridD.q[dM0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega);
+      }
+
+      q = (subgridD.q[d0PP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega);
+      }
+
+      q = (subgridD.q[d0MM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega);
+      }
+
+      q = (subgridD.q[d0PM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega);
+      }
+
+      q = (subgridD.q[d0MP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega);
+      }
+
+      q = (subgridD.q[dPPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega);
+      }
+
+      q = (subgridD.q[dMMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega);
+      }
+
+      q = (subgridD.q[dPPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega);
+      }
+
+      q = (subgridD.q[dMMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega);
+      }
+
+      q = (subgridD.q[dPMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega);
+      }
+
+      q = (subgridD.q[dMPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega);
+      }
+
+      q = (subgridD.q[dPMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega);
+      }
+
+      q = (subgridD.q[dMPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega);
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QDevice27(
+    real* distributions, 
+    int* subgridDistanceIndices, 
+    real* subgridDistances,
+    unsigned int numberOfBCnodes, 
+    real omega, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   //////////////////////////////////////////////////////////////////////////
+   //! The no-slip boundary condition is executed in the following steps
+   //!
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
+      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  = indexOfBCnode;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = indexOfBCnode;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = indexOfBCnode;
+      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 = indexOfBCnode;
+      unsigned int kbsw = neighborZ[ksw];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[d000])[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));          
+
+      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)); 
+
+      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)); 
+
+      real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[dP00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
+      {
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega);
+      }
+
+      q = (subgridD.q[dM00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega);
+      }
+
+      q = (subgridD.q[d0P0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega);
+      }
+
+      q = (subgridD.q[d0M0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega);
+      }
+
+      q = (subgridD.q[d00P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega);
+      }
+
+      q = (subgridD.q[d00M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega);
+      }
+
+      q = (subgridD.q[dPP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega);
+      }
+
+      q = (subgridD.q[dMM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega);
+      }
+
+      q = (subgridD.q[dPM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega);
+      }
+
+      q = (subgridD.q[dMP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega);
+      }
+
+      q = (subgridD.q[dP0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega);
+      }
+
+      q = (subgridD.q[dM0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dP0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega);
+      }
+
+      q = (subgridD.q[dP0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega);
+      }
+
+      q = (subgridD.q[dM0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega);
+      }
+
+      q = (subgridD.q[d0PP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega);
+      }
+
+      q = (subgridD.q[d0MM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega);
+      }
+
+      q = (subgridD.q[d0PM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega);
+      }
+
+      q = (subgridD.q[d0MP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega);
+      }
+
+      q = (subgridD.q[dPPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega);
+      }
+
+      q = (subgridD.q[dMMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega);
+      }
+
+      q = (subgridD.q[dPPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega);
+      }
+
+      q = (subgridD.q[dMMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega);
+      }
+
+      q = (subgridD.q[dPMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega);
+      }
+
+      q = (subgridD.q[dMPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega);
+      }
+
+      q = (subgridD.q[dPMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega);
+      }
+
+      q = (subgridD.q[dMPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega);
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void BBDevice27(
+    real* distributions, 
+    int* subgridDistanceIndices, 
+    real* subgridDistances,
+    unsigned int numberOfBCnodes, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   //////////////////////////////////////////////////////////////////////////
+   //! The no-slip boundary condition is executed in the following steps
+   //!
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+   // run for all indices in size of boundary condition (numberOfBCnodes)
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
+      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  = indexOfBCnode;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = indexOfBCnode;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = indexOfBCnode;
+      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 = indexOfBCnode;
+      unsigned int kbsw = neighborZ[ksw];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[dP00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dM00])[kw  ]=f_E  ;
+      q = (subgridD.q[dM00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dP00])[ke  ]=f_W  ;
+      q = (subgridD.q[d0P0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0M0])[ks  ]=f_N  ;
+      q = (subgridD.q[d0M0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0P0])[kn  ]=f_S  ;
+      q = (subgridD.q[d00P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d00M])[kb  ]=f_T  ;
+      q = (subgridD.q[d00M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d00P])[kt  ]=f_B  ;
+      q = (subgridD.q[dPP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMM0])[ksw ]=f_NE ;
+      q = (subgridD.q[dMM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPP0])[kne ]=f_SW ;
+      q = (subgridD.q[dPM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMP0])[knw ]=f_SE ;
+      q = (subgridD.q[dMP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPM0])[kse ]=f_NW ;
+      q = (subgridD.q[dP0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dM0M])[kbw ]=f_TE ;
+      q = (subgridD.q[dM0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dP0P])[kte ]=f_BW ;
+      q = (subgridD.q[dP0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dM0P])[ktw ]=f_BE ;
+      q = (subgridD.q[dM0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dP0M])[kbe ]=f_TW ;
+      q = (subgridD.q[d0PP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0MM])[kbs ]=f_TN ;
+      q = (subgridD.q[d0MM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0PP])[ktn ]=f_BS ;
+      q = (subgridD.q[d0PM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0MP])[kts ]=f_BN ;
+      q = (subgridD.q[d0MP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0PM])[kbn ]=f_TS ;
+      q = (subgridD.q[dPPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMMM])[kbsw]=f_TNE;
+      q = (subgridD.q[dMMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPPP])[ktne]=f_BSW;
+      q = (subgridD.q[dPPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMMP])[ktsw]=f_BNE;
+      q = (subgridD.q[dMMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPPM])[kbne]=f_TSW;
+      q = (subgridD.q[dPMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMPM])[kbnw]=f_TSE;
+      q = (subgridD.q[dMPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPMP])[ktse]=f_BNW;
+      q = (subgridD.q[dPMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMPP])[ktnw]=f_BSE;
+      q = (subgridD.q[dMPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPMM])[kbse]=f_TNW;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Particles.cu b/src/gpu/core/GPU/Particles.cu
similarity index 84%
rename from src/gpu/VirtualFluids_GPU/GPU/Particles.cu
rename to src/gpu/core/GPU/Particles.cu
index 7a82c694ef55ff5bc6770b9ae333e2de7ed1938c..6f30a09c1b306f8833649a84f6ee7b702ab83f7e 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Particles.cu
+++ b/src/gpu/core/GPU/Particles.cu
@@ -248,63 +248,63 @@ __global__ void MoveParticles( real* coordX,
 		{
 		   if (isEvenTimestep==true)
 		   {
-			  feC    = &DD[DIR_P00 * numberOfLBnodes];
-			  fwC    = &DD[DIR_M00 * numberOfLBnodes];
-			  fnC    = &DD[DIR_0P0 * numberOfLBnodes];
-			  fsC    = &DD[DIR_0M0 * numberOfLBnodes];
-			  ftC    = &DD[DIR_00P * numberOfLBnodes];
-			  fbC    = &DD[DIR_00M * numberOfLBnodes];
-			  fneC   = &DD[DIR_PP0 * numberOfLBnodes];
-			  fswC   = &DD[DIR_MM0 * numberOfLBnodes];
-			  fseC   = &DD[DIR_PM0 * numberOfLBnodes];
-			  fnwC   = &DD[DIR_MP0 * numberOfLBnodes];
-			  fteC   = &DD[DIR_P0P * numberOfLBnodes];
-			  fbwC   = &DD[DIR_M0M * numberOfLBnodes];
-			  fbeC   = &DD[DIR_P0M * numberOfLBnodes];
-			  ftwC   = &DD[DIR_M0P * numberOfLBnodes];
-			  ftnC   = &DD[DIR_0PP * numberOfLBnodes];
-			  fbsC   = &DD[DIR_0MM * numberOfLBnodes];
-			  fbnC   = &DD[DIR_0PM * numberOfLBnodes];
-			  ftsC   = &DD[DIR_0MP * numberOfLBnodes];
-			  fzeroC = &DD[DIR_000 * numberOfLBnodes];
-			  ftneC  = &DD[DIR_PPP * numberOfLBnodes];
-			  ftswC  = &DD[DIR_MMP * numberOfLBnodes];
-			  ftseC  = &DD[DIR_PMP * numberOfLBnodes];
-			  ftnwC  = &DD[DIR_MPP * numberOfLBnodes];
-			  fbneC  = &DD[DIR_PPM * numberOfLBnodes];
-			  fbswC  = &DD[DIR_MMM * numberOfLBnodes];
-			  fbseC  = &DD[DIR_PMM * numberOfLBnodes];
-			  fbnwC  = &DD[DIR_MPM * numberOfLBnodes];
+			  feC    = &DD[dP00 * numberOfLBnodes];
+			  fwC    = &DD[dM00 * numberOfLBnodes];
+			  fnC    = &DD[d0P0 * numberOfLBnodes];
+			  fsC    = &DD[d0M0 * numberOfLBnodes];
+			  ftC    = &DD[d00P * numberOfLBnodes];
+			  fbC    = &DD[d00M * numberOfLBnodes];
+			  fneC   = &DD[dPP0 * numberOfLBnodes];
+			  fswC   = &DD[dMM0 * numberOfLBnodes];
+			  fseC   = &DD[dPM0 * numberOfLBnodes];
+			  fnwC   = &DD[dMP0 * numberOfLBnodes];
+			  fteC   = &DD[dP0P * numberOfLBnodes];
+			  fbwC   = &DD[dM0M * numberOfLBnodes];
+			  fbeC   = &DD[dP0M * numberOfLBnodes];
+			  ftwC   = &DD[dM0P * numberOfLBnodes];
+			  ftnC   = &DD[d0PP * numberOfLBnodes];
+			  fbsC   = &DD[d0MM * numberOfLBnodes];
+			  fbnC   = &DD[d0PM * numberOfLBnodes];
+			  ftsC   = &DD[d0MP * numberOfLBnodes];
+			  fzeroC = &DD[d000 * numberOfLBnodes];
+			  ftneC  = &DD[dPPP * numberOfLBnodes];
+			  ftswC  = &DD[dMMP * numberOfLBnodes];
+			  ftseC  = &DD[dPMP * numberOfLBnodes];
+			  ftnwC  = &DD[dMPP * numberOfLBnodes];
+			  fbneC  = &DD[dPPM * numberOfLBnodes];
+			  fbswC  = &DD[dMMM * numberOfLBnodes];
+			  fbseC  = &DD[dPMM * numberOfLBnodes];
+			  fbnwC  = &DD[dMPM * numberOfLBnodes];
 		   } 			 
 		   else			 
 		   {			 
-			  fwC    = &DD[DIR_P00 * numberOfLBnodes];
-			  feC    = &DD[DIR_M00 * numberOfLBnodes];
-			  fsC    = &DD[DIR_0P0 * numberOfLBnodes];
-			  fnC    = &DD[DIR_0M0 * numberOfLBnodes];
-			  fbC    = &DD[DIR_00P * numberOfLBnodes];
-			  ftC    = &DD[DIR_00M * numberOfLBnodes];
-			  fswC   = &DD[DIR_PP0 * numberOfLBnodes];
-			  fneC   = &DD[DIR_MM0 * numberOfLBnodes];
-			  fnwC   = &DD[DIR_PM0 * numberOfLBnodes];
-			  fseC   = &DD[DIR_MP0 * numberOfLBnodes];
-			  fbwC   = &DD[DIR_P0P * numberOfLBnodes];
-			  fteC   = &DD[DIR_M0M * numberOfLBnodes];
-			  ftwC   = &DD[DIR_P0M * numberOfLBnodes];
-			  fbeC   = &DD[DIR_M0P * numberOfLBnodes];
-			  fbsC   = &DD[DIR_0PP * numberOfLBnodes];
-			  ftnC   = &DD[DIR_0MM * numberOfLBnodes];
-			  ftsC   = &DD[DIR_0PM * numberOfLBnodes];
-			  fbnC   = &DD[DIR_0MP * numberOfLBnodes];
-			  fzeroC = &DD[DIR_000 * numberOfLBnodes];
-			  fbswC  = &DD[DIR_PPP * numberOfLBnodes];
-			  fbneC  = &DD[DIR_MMP * numberOfLBnodes];
-			  fbnwC  = &DD[DIR_PMP * numberOfLBnodes];
-			  fbseC  = &DD[DIR_MPP * numberOfLBnodes];
-			  ftswC  = &DD[DIR_PPM * numberOfLBnodes];
-			  ftneC  = &DD[DIR_MMM * numberOfLBnodes];
-			  ftnwC  = &DD[DIR_PMM * numberOfLBnodes];
-			  ftseC  = &DD[DIR_MPM * numberOfLBnodes];
+			  fwC    = &DD[dP00 * numberOfLBnodes];
+			  feC    = &DD[dM00 * numberOfLBnodes];
+			  fsC    = &DD[d0P0 * numberOfLBnodes];
+			  fnC    = &DD[d0M0 * numberOfLBnodes];
+			  fbC    = &DD[d00P * numberOfLBnodes];
+			  ftC    = &DD[d00M * numberOfLBnodes];
+			  fswC   = &DD[dPP0 * numberOfLBnodes];
+			  fneC   = &DD[dMM0 * numberOfLBnodes];
+			  fnwC   = &DD[dPM0 * numberOfLBnodes];
+			  fseC   = &DD[dMP0 * numberOfLBnodes];
+			  fbwC   = &DD[dP0P * numberOfLBnodes];
+			  fteC   = &DD[dM0M * numberOfLBnodes];
+			  ftwC   = &DD[dP0M * numberOfLBnodes];
+			  fbeC   = &DD[dM0P * numberOfLBnodes];
+			  fbsC   = &DD[d0PP * numberOfLBnodes];
+			  ftnC   = &DD[d0MM * numberOfLBnodes];
+			  ftsC   = &DD[d0PM * numberOfLBnodes];
+			  fbnC   = &DD[d0MP * numberOfLBnodes];
+			  fzeroC = &DD[d000 * numberOfLBnodes];
+			  fbswC  = &DD[dPPP * numberOfLBnodes];
+			  fbneC  = &DD[dMMP * numberOfLBnodes];
+			  fbnwC  = &DD[dPMP * numberOfLBnodes];
+			  fbseC  = &DD[dMPP * numberOfLBnodes];
+			  ftswC  = &DD[dPPM * numberOfLBnodes];
+			  ftneC  = &DD[dMMM * numberOfLBnodes];
+			  ftnwC  = &DD[dPMM * numberOfLBnodes];
+			  ftseC  = &DD[dMPM * numberOfLBnodes];
 		   }
 
 			  //////////////////////////////////////////////////////////////////////////
@@ -1114,63 +1114,63 @@ __global__ void MoveParticlesWithoutBCs(   real* coordX,
 		{
 		   if (isEvenTimestep==true)
 		   {
-			  feC    = &DD[DIR_P00 * numberOfLBnodes];
-			  fwC    = &DD[DIR_M00 * numberOfLBnodes];
-			  fnC    = &DD[DIR_0P0 * numberOfLBnodes];
-			  fsC    = &DD[DIR_0M0 * numberOfLBnodes];
-			  ftC    = &DD[DIR_00P * numberOfLBnodes];
-			  fbC    = &DD[DIR_00M * numberOfLBnodes];
-			  fneC   = &DD[DIR_PP0 * numberOfLBnodes];
-			  fswC   = &DD[DIR_MM0 * numberOfLBnodes];
-			  fseC   = &DD[DIR_PM0 * numberOfLBnodes];
-			  fnwC   = &DD[DIR_MP0 * numberOfLBnodes];
-			  fteC   = &DD[DIR_P0P * numberOfLBnodes];
-			  fbwC   = &DD[DIR_M0M * numberOfLBnodes];
-			  fbeC   = &DD[DIR_P0M * numberOfLBnodes];
-			  ftwC   = &DD[DIR_M0P * numberOfLBnodes];
-			  ftnC   = &DD[DIR_0PP * numberOfLBnodes];
-			  fbsC   = &DD[DIR_0MM * numberOfLBnodes];
-			  fbnC   = &DD[DIR_0PM * numberOfLBnodes];
-			  ftsC   = &DD[DIR_0MP * numberOfLBnodes];
-			  fzeroC = &DD[DIR_000 * numberOfLBnodes];
-			  ftneC  = &DD[DIR_PPP * numberOfLBnodes];
-			  ftswC  = &DD[DIR_MMP * numberOfLBnodes];
-			  ftseC  = &DD[DIR_PMP * numberOfLBnodes];
-			  ftnwC  = &DD[DIR_MPP * numberOfLBnodes];
-			  fbneC  = &DD[DIR_PPM * numberOfLBnodes];
-			  fbswC  = &DD[DIR_MMM * numberOfLBnodes];
-			  fbseC  = &DD[DIR_PMM * numberOfLBnodes];
-			  fbnwC  = &DD[DIR_MPM * numberOfLBnodes];
+			  feC    = &DD[dP00 * numberOfLBnodes];
+			  fwC    = &DD[dM00 * numberOfLBnodes];
+			  fnC    = &DD[d0P0 * numberOfLBnodes];
+			  fsC    = &DD[d0M0 * numberOfLBnodes];
+			  ftC    = &DD[d00P * numberOfLBnodes];
+			  fbC    = &DD[d00M * numberOfLBnodes];
+			  fneC   = &DD[dPP0 * numberOfLBnodes];
+			  fswC   = &DD[dMM0 * numberOfLBnodes];
+			  fseC   = &DD[dPM0 * numberOfLBnodes];
+			  fnwC   = &DD[dMP0 * numberOfLBnodes];
+			  fteC   = &DD[dP0P * numberOfLBnodes];
+			  fbwC   = &DD[dM0M * numberOfLBnodes];
+			  fbeC   = &DD[dP0M * numberOfLBnodes];
+			  ftwC   = &DD[dM0P * numberOfLBnodes];
+			  ftnC   = &DD[d0PP * numberOfLBnodes];
+			  fbsC   = &DD[d0MM * numberOfLBnodes];
+			  fbnC   = &DD[d0PM * numberOfLBnodes];
+			  ftsC   = &DD[d0MP * numberOfLBnodes];
+			  fzeroC = &DD[d000 * numberOfLBnodes];
+			  ftneC  = &DD[dPPP * numberOfLBnodes];
+			  ftswC  = &DD[dMMP * numberOfLBnodes];
+			  ftseC  = &DD[dPMP * numberOfLBnodes];
+			  ftnwC  = &DD[dMPP * numberOfLBnodes];
+			  fbneC  = &DD[dPPM * numberOfLBnodes];
+			  fbswC  = &DD[dMMM * numberOfLBnodes];
+			  fbseC  = &DD[dPMM * numberOfLBnodes];
+			  fbnwC  = &DD[dMPM * numberOfLBnodes];
 		   } 			 
 		   else			 
 		   {			 
-			  fwC    = &DD[DIR_P00 * numberOfLBnodes];
-			  feC    = &DD[DIR_M00 * numberOfLBnodes];
-			  fsC    = &DD[DIR_0P0 * numberOfLBnodes];
-			  fnC    = &DD[DIR_0M0 * numberOfLBnodes];
-			  fbC    = &DD[DIR_00P * numberOfLBnodes];
-			  ftC    = &DD[DIR_00M * numberOfLBnodes];
-			  fswC   = &DD[DIR_PP0 * numberOfLBnodes];
-			  fneC   = &DD[DIR_MM0 * numberOfLBnodes];
-			  fnwC   = &DD[DIR_PM0 * numberOfLBnodes];
-			  fseC   = &DD[DIR_MP0 * numberOfLBnodes];
-			  fbwC   = &DD[DIR_P0P * numberOfLBnodes];
-			  fteC   = &DD[DIR_M0M * numberOfLBnodes];
-			  ftwC   = &DD[DIR_P0M * numberOfLBnodes];
-			  fbeC   = &DD[DIR_M0P * numberOfLBnodes];
-			  fbsC   = &DD[DIR_0PP * numberOfLBnodes];
-			  ftnC   = &DD[DIR_0MM * numberOfLBnodes];
-			  ftsC   = &DD[DIR_0PM * numberOfLBnodes];
-			  fbnC   = &DD[DIR_0MP * numberOfLBnodes];
-			  fzeroC = &DD[DIR_000 * numberOfLBnodes];
-			  fbswC  = &DD[DIR_PPP * numberOfLBnodes];
-			  fbneC  = &DD[DIR_MMP * numberOfLBnodes];
-			  fbnwC  = &DD[DIR_PMP * numberOfLBnodes];
-			  fbseC  = &DD[DIR_MPP * numberOfLBnodes];
-			  ftswC  = &DD[DIR_PPM * numberOfLBnodes];
-			  ftneC  = &DD[DIR_MMM * numberOfLBnodes];
-			  ftnwC  = &DD[DIR_PMM * numberOfLBnodes];
-			  ftseC  = &DD[DIR_MPM * numberOfLBnodes];
+			  fwC    = &DD[dP00 * numberOfLBnodes];
+			  feC    = &DD[dM00 * numberOfLBnodes];
+			  fsC    = &DD[d0P0 * numberOfLBnodes];
+			  fnC    = &DD[d0M0 * numberOfLBnodes];
+			  fbC    = &DD[d00P * numberOfLBnodes];
+			  ftC    = &DD[d00M * numberOfLBnodes];
+			  fswC   = &DD[dPP0 * numberOfLBnodes];
+			  fneC   = &DD[dMM0 * numberOfLBnodes];
+			  fnwC   = &DD[dPM0 * numberOfLBnodes];
+			  fseC   = &DD[dMP0 * numberOfLBnodes];
+			  fbwC   = &DD[dP0P * numberOfLBnodes];
+			  fteC   = &DD[dM0M * numberOfLBnodes];
+			  ftwC   = &DD[dP0M * numberOfLBnodes];
+			  fbeC   = &DD[dM0P * numberOfLBnodes];
+			  fbsC   = &DD[d0PP * numberOfLBnodes];
+			  ftnC   = &DD[d0MM * numberOfLBnodes];
+			  ftsC   = &DD[d0PM * numberOfLBnodes];
+			  fbnC   = &DD[d0MP * numberOfLBnodes];
+			  fzeroC = &DD[d000 * numberOfLBnodes];
+			  fbswC  = &DD[dPPP * numberOfLBnodes];
+			  fbneC  = &DD[dMMP * numberOfLBnodes];
+			  fbnwC  = &DD[dPMP * numberOfLBnodes];
+			  fbseC  = &DD[dMPP * numberOfLBnodes];
+			  ftswC  = &DD[dPPM * numberOfLBnodes];
+			  ftneC  = &DD[dMMM * numberOfLBnodes];
+			  ftnwC  = &DD[dPMM * numberOfLBnodes];
+			  ftseC  = &DD[dMPM * numberOfLBnodes];
 		   }
 
 			  //////////////////////////////////////////////////////////////////////////
@@ -1937,63 +1937,63 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //Distributions27 D;
    //if (isEvenTimestep==true)
    //{
-   //   D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
+   //   D.f[dP00] = &DD[dP00 * size_Mat];
+   //   D.f[dM00] = &DD[dM00 * size_Mat];
+   //   D.f[d0P0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0M0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00P] = &DD[d00P * size_Mat];
+   //   D.f[d00M] = &DD[d00M * size_Mat];
+   //   D.f[dPP0] = &DD[dPP0 * size_Mat];
+   //   D.f[dMM0] = &DD[dMM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dPM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dMP0 * size_Mat];
+   //   D.f[dP0P] = &DD[dP0P * size_Mat];
+   //   D.f[dM0M] = &DD[dM0M * size_Mat];
+   //   D.f[dP0M] = &DD[dP0M * size_Mat];
+   //   D.f[dM0P] = &DD[dM0P * size_Mat];
+   //   D.f[d0PP] = &DD[d0PP * size_Mat];
+   //   D.f[d0MM] = &DD[d0MM * size_Mat];
+   //   D.f[d0PM] = &DD[d0PM * size_Mat];
+   //   D.f[d0MP] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dPPP * size_Mat];
+   //   D.f[dMMP] = &DD[dMMP * size_Mat];
+   //   D.f[dPMP] = &DD[dPMP * size_Mat];
+   //   D.f[dMPP] = &DD[dMPP * size_Mat];
+   //   D.f[dPPM] = &DD[dPPM * size_Mat];
+   //   D.f[dMMM] = &DD[dMMM * size_Mat];
+   //   D.f[dPMM] = &DD[dPMM * size_Mat];
+   //   D.f[dMPM] = &DD[dMPM * size_Mat];
    //} 
    //else
    //{
-   //   D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-   //   D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-   //   D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-   //   D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-   //   D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-   //   D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-   //   D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-   //   D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-   //   D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-   //   D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-   //   D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-   //   D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-   //   D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-   //   D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-   //   D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-   //   D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-   //   D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-   //   D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-   //   D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //   D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-   //   D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-   //   D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-   //   D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-   //   D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-   //   D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-   //   D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-   //   D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
+   //   D.f[dM00] = &DD[dP00 * size_Mat];
+   //   D.f[dP00] = &DD[dM00 * size_Mat];
+   //   D.f[d0M0] = &DD[d0P0 * size_Mat];
+   //   D.f[d0P0] = &DD[d0M0 * size_Mat];
+   //   D.f[d00M] = &DD[d00P * size_Mat];
+   //   D.f[d00P] = &DD[d00M * size_Mat];
+   //   D.f[dMM0] = &DD[dPP0 * size_Mat];
+   //   D.f[dPP0] = &DD[dMM0 * size_Mat];
+   //   D.f[dMP0] = &DD[dPM0 * size_Mat];
+   //   D.f[dPM0] = &DD[dMP0 * size_Mat];
+   //   D.f[dM0M] = &DD[dP0P * size_Mat];
+   //   D.f[dP0P] = &DD[dM0M * size_Mat];
+   //   D.f[dM0P] = &DD[dP0M * size_Mat];
+   //   D.f[dP0M] = &DD[dM0P * size_Mat];
+   //   D.f[d0MM] = &DD[d0PP * size_Mat];
+   //   D.f[d0PP] = &DD[d0MM * size_Mat];
+   //   D.f[d0MP] = &DD[d0PM * size_Mat];
+   //   D.f[d0PM] = &DD[d0MP * size_Mat];
+   //   D.f[d000] = &DD[d000 * size_Mat];
+   //   D.f[dPPP] = &DD[dMMM * size_Mat];
+   //   D.f[dMMP] = &DD[dPPM * size_Mat];
+   //   D.f[dPMP] = &DD[dMPM * size_Mat];
+   //   D.f[dMPP] = &DD[dPMM * size_Mat];
+   //   D.f[dPPM] = &DD[dMMP * size_Mat];
+   //   D.f[dMMM] = &DD[dPPP * size_Mat];
+   //   D.f[dPMM] = &DD[dMPP * size_Mat];
+   //   D.f[dMPM] = &DD[dPMP * size_Mat];
    //}
    //////////////////////////////////////////////////////////////////////////////////
    //const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2015,128 +2015,128 @@ __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[DIR_P00 * numberOfBCnodes];
-   //    q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-   // //   q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-   //    q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-   // //   q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-   //    q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-   // //   q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-   // //   q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-   // //   q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-   // //   q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-   // //   q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-   // //   q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-   // //   q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-   // //   q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-   // //   q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-   // //   q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-   // //   q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-   // //   q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-   // //   q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-   // //   q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-   // //   q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-   // //   q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-   // //   q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-   // //   q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-   // //   q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-   // //   q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+   // //   q_dirE   = &QQ[dP00 * numberOfBCnodes];
+   //    q_dirW   = &QQ[dM00 * numberOfBCnodes];
+   // //   q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+   //    q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+   // //   q_dirT   = &QQ[d00P * numberOfBCnodes];
+   //    q_dirB   = &QQ[d00M * numberOfBCnodes];
+   // //   q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+   // //   q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+   // //   q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+   // //   q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+   // //   q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+   // //   q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+   // //   q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+   // //   q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+   // //   q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+   // //   q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+   // //   q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+   // //   q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+   // //   q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+   // //   q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+   // //   q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+   // //   q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+   // //   q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+   // //   q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+   // //   q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+   // //   q_dirBNW = &QQ[dMPM * 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[DIR_P00 * numberOfBCnodes];
-   // //   nx_dirW   = &NormalX[DIR_M00 * numberOfBCnodes];
-   // //   nx_dirN   = &NormalX[DIR_0P0 * numberOfBCnodes];
-   // //   nx_dirS   = &NormalX[DIR_0M0 * numberOfBCnodes];
-   // //   nx_dirT   = &NormalX[DIR_00P * numberOfBCnodes];
-   // //   nx_dirB   = &NormalX[DIR_00M * numberOfBCnodes];
-   // //   nx_dirNE  = &NormalX[DIR_PP0 * numberOfBCnodes];
-   // //   nx_dirSW  = &NormalX[DIR_MM0 * numberOfBCnodes];
-   // //   nx_dirSE  = &NormalX[DIR_PM0 * numberOfBCnodes];
-   // //   nx_dirNW  = &NormalX[DIR_MP0 * numberOfBCnodes];
-   // //   nx_dirTE  = &NormalX[DIR_P0P * numberOfBCnodes];
-   // //   nx_dirBW  = &NormalX[DIR_M0M * numberOfBCnodes];
-   // //   nx_dirBE  = &NormalX[DIR_P0M * numberOfBCnodes];
-   // //   nx_dirTW  = &NormalX[DIR_M0P * numberOfBCnodes];
-   // //   nx_dirTN  = &NormalX[DIR_0PP * numberOfBCnodes];
-   // //   nx_dirBS  = &NormalX[DIR_0MM * numberOfBCnodes];
-   // //   nx_dirBN  = &NormalX[DIR_0PM * numberOfBCnodes];
-   // //   nx_dirTS  = &NormalX[DIR_0MP * numberOfBCnodes];
-   // //   nx_dirTNE = &NormalX[DIR_PPP * numberOfBCnodes];
-   // //   nx_dirTSW = &NormalX[DIR_MMP * numberOfBCnodes];
-   // //   nx_dirTSE = &NormalX[DIR_PMP * numberOfBCnodes];
-   // //   nx_dirTNW = &NormalX[DIR_MPP * numberOfBCnodes];
-   // //   nx_dirBNE = &NormalX[DIR_PPM * numberOfBCnodes];
-   // //   nx_dirBSW = &NormalX[DIR_MMM * numberOfBCnodes];
-   // //   nx_dirBSE = &NormalX[DIR_PMM * numberOfBCnodes];
-   // //   nx_dirBNW = &NormalX[DIR_MPM * numberOfBCnodes];
+   // //   nx_dirE   = &NormalX[dP00 * numberOfBCnodes];
+   // //   nx_dirW   = &NormalX[dM00 * numberOfBCnodes];
+   // //   nx_dirN   = &NormalX[d0P0 * numberOfBCnodes];
+   // //   nx_dirS   = &NormalX[d0M0 * numberOfBCnodes];
+   // //   nx_dirT   = &NormalX[d00P * numberOfBCnodes];
+   // //   nx_dirB   = &NormalX[d00M * numberOfBCnodes];
+   // //   nx_dirNE  = &NormalX[dPP0 * numberOfBCnodes];
+   // //   nx_dirSW  = &NormalX[dMM0 * numberOfBCnodes];
+   // //   nx_dirSE  = &NormalX[dPM0 * numberOfBCnodes];
+   // //   nx_dirNW  = &NormalX[dMP0 * numberOfBCnodes];
+   // //   nx_dirTE  = &NormalX[dP0P * numberOfBCnodes];
+   // //   nx_dirBW  = &NormalX[dM0M * numberOfBCnodes];
+   // //   nx_dirBE  = &NormalX[dP0M * numberOfBCnodes];
+   // //   nx_dirTW  = &NormalX[dM0P * numberOfBCnodes];
+   // //   nx_dirTN  = &NormalX[d0PP * numberOfBCnodes];
+   // //   nx_dirBS  = &NormalX[d0MM * numberOfBCnodes];
+   // //   nx_dirBN  = &NormalX[d0PM * numberOfBCnodes];
+   // //   nx_dirTS  = &NormalX[d0MP * numberOfBCnodes];
+   // //   nx_dirTNE = &NormalX[dPPP * numberOfBCnodes];
+   // //   nx_dirTSW = &NormalX[dMMP * numberOfBCnodes];
+   // //   nx_dirTSE = &NormalX[dPMP * numberOfBCnodes];
+   // //   nx_dirTNW = &NormalX[dMPP * numberOfBCnodes];
+   // //   nx_dirBNE = &NormalX[dPPM * numberOfBCnodes];
+   // //   nx_dirBSW = &NormalX[dMMM * numberOfBCnodes];
+   // //   nx_dirBSE = &NormalX[dPMM * numberOfBCnodes];
+   // //   nx_dirBNW = &NormalX[dMPM * 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[DIR_P00 * numberOfBCnodes];
-   // //   ny_dirW   = &NormalY[DIR_M00 * numberOfBCnodes];
-   // //   ny_dirN   = &NormalY[DIR_0P0 * numberOfBCnodes];
-   // //   ny_dirS   = &NormalY[DIR_0M0 * numberOfBCnodes];
-   // //   ny_dirT   = &NormalY[DIR_00P * numberOfBCnodes];
-   // //   ny_dirB   = &NormalY[DIR_00M * numberOfBCnodes];
-   // //   ny_dirNE  = &NormalY[DIR_PP0 * numberOfBCnodes];
-   // //   ny_dirSW  = &NormalY[DIR_MM0 * numberOfBCnodes];
-   // //   ny_dirSE  = &NormalY[DIR_PM0 * numberOfBCnodes];
-   // //   ny_dirNW  = &NormalY[DIR_MP0 * numberOfBCnodes];
-   // //   ny_dirTE  = &NormalY[DIR_P0P * numberOfBCnodes];
-   // //   ny_dirBW  = &NormalY[DIR_M0M * numberOfBCnodes];
-   // //   ny_dirBE  = &NormalY[DIR_P0M * numberOfBCnodes];
-   // //   ny_dirTW  = &NormalY[DIR_M0P * numberOfBCnodes];
-   // //   ny_dirTN  = &NormalY[DIR_0PP * numberOfBCnodes];
-   // //   ny_dirBS  = &NormalY[DIR_0MM * numberOfBCnodes];
-   // //   ny_dirBN  = &NormalY[DIR_0PM * numberOfBCnodes];
-   // //   ny_dirTS  = &NormalY[DIR_0MP * numberOfBCnodes];
-   // //   ny_dirTNE = &NormalY[DIR_PPP * numberOfBCnodes];
-   // //   ny_dirTSW = &NormalY[DIR_MMP * numberOfBCnodes];
-   // //   ny_dirTSE = &NormalY[DIR_PMP * numberOfBCnodes];
-   // //   ny_dirTNW = &NormalY[DIR_MPP * numberOfBCnodes];
-   // //   ny_dirBNE = &NormalY[DIR_PPM * numberOfBCnodes];
-   // //   ny_dirBSW = &NormalY[DIR_MMM * numberOfBCnodes];
-   // //   ny_dirBSE = &NormalY[DIR_PMM * numberOfBCnodes];
-   // //   ny_dirBNW = &NormalY[DIR_MPM * numberOfBCnodes];
+   // //   ny_dirE   = &NormalY[dP00 * numberOfBCnodes];
+   // //   ny_dirW   = &NormalY[dM00 * numberOfBCnodes];
+   // //   ny_dirN   = &NormalY[d0P0 * numberOfBCnodes];
+   // //   ny_dirS   = &NormalY[d0M0 * numberOfBCnodes];
+   // //   ny_dirT   = &NormalY[d00P * numberOfBCnodes];
+   // //   ny_dirB   = &NormalY[d00M * numberOfBCnodes];
+   // //   ny_dirNE  = &NormalY[dPP0 * numberOfBCnodes];
+   // //   ny_dirSW  = &NormalY[dMM0 * numberOfBCnodes];
+   // //   ny_dirSE  = &NormalY[dPM0 * numberOfBCnodes];
+   // //   ny_dirNW  = &NormalY[dMP0 * numberOfBCnodes];
+   // //   ny_dirTE  = &NormalY[dP0P * numberOfBCnodes];
+   // //   ny_dirBW  = &NormalY[dM0M * numberOfBCnodes];
+   // //   ny_dirBE  = &NormalY[dP0M * numberOfBCnodes];
+   // //   ny_dirTW  = &NormalY[dM0P * numberOfBCnodes];
+   // //   ny_dirTN  = &NormalY[d0PP * numberOfBCnodes];
+   // //   ny_dirBS  = &NormalY[d0MM * numberOfBCnodes];
+   // //   ny_dirBN  = &NormalY[d0PM * numberOfBCnodes];
+   // //   ny_dirTS  = &NormalY[d0MP * numberOfBCnodes];
+   // //   ny_dirTNE = &NormalY[dPPP * numberOfBCnodes];
+   // //   ny_dirTSW = &NormalY[dMMP * numberOfBCnodes];
+   // //   ny_dirTSE = &NormalY[dPMP * numberOfBCnodes];
+   // //   ny_dirTNW = &NormalY[dMPP * numberOfBCnodes];
+   // //   ny_dirBNE = &NormalY[dPPM * numberOfBCnodes];
+   // //   ny_dirBSW = &NormalY[dMMM * numberOfBCnodes];
+   // //   ny_dirBSE = &NormalY[dPMM * numberOfBCnodes];
+   // //   ny_dirBNW = &NormalY[dMPM * 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[DIR_P00 * numberOfBCnodes];
-   // //   nz_dirW   = &NormalZ[DIR_M00 * numberOfBCnodes];
-   // //   nz_dirN   = &NormalZ[DIR_0P0 * numberOfBCnodes];
-   // //   nz_dirS   = &NormalZ[DIR_0M0 * numberOfBCnodes];
-   // //   nz_dirT   = &NormalZ[DIR_00P * numberOfBCnodes];
-   // //   nz_dirB   = &NormalZ[DIR_00M * numberOfBCnodes];
-   // //   nz_dirNE  = &NormalZ[DIR_PP0 * numberOfBCnodes];
-   // //   nz_dirSW  = &NormalZ[DIR_MM0 * numberOfBCnodes];
-   // //   nz_dirSE  = &NormalZ[DIR_PM0 * numberOfBCnodes];
-   // //   nz_dirNW  = &NormalZ[DIR_MP0 * numberOfBCnodes];
-   // //   nz_dirTE  = &NormalZ[DIR_P0P * numberOfBCnodes];
-   // //   nz_dirBW  = &NormalZ[DIR_M0M * numberOfBCnodes];
-   // //   nz_dirBE  = &NormalZ[DIR_P0M * numberOfBCnodes];
-   // //   nz_dirTW  = &NormalZ[DIR_M0P * numberOfBCnodes];
-   // //   nz_dirTN  = &NormalZ[DIR_0PP * numberOfBCnodes];
-   // //   nz_dirBS  = &NormalZ[DIR_0MM * numberOfBCnodes];
-   // //   nz_dirBN  = &NormalZ[DIR_0PM * numberOfBCnodes];
-   // //   nz_dirTS  = &NormalZ[DIR_0MP * numberOfBCnodes];
-   // //   nz_dirTNE = &NormalZ[DIR_PPP * numberOfBCnodes];
-   // //   nz_dirTSW = &NormalZ[DIR_MMP * numberOfBCnodes];
-   // //   nz_dirTSE = &NormalZ[DIR_PMP * numberOfBCnodes];
-   // //   nz_dirTNW = &NormalZ[DIR_MPP * numberOfBCnodes];
-   // //   nz_dirBNE = &NormalZ[DIR_PPM * numberOfBCnodes];
-   // //   nz_dirBSW = &NormalZ[DIR_MMM * numberOfBCnodes];
-   // //   nz_dirBSE = &NormalZ[DIR_PMM * numberOfBCnodes];
-   // //   nz_dirBNW = &NormalZ[DIR_MPM * numberOfBCnodes];
+   // //   nz_dirE   = &NormalZ[dP00 * numberOfBCnodes];
+   // //   nz_dirW   = &NormalZ[dM00 * numberOfBCnodes];
+   // //   nz_dirN   = &NormalZ[d0P0 * numberOfBCnodes];
+   // //   nz_dirS   = &NormalZ[d0M0 * numberOfBCnodes];
+   // //   nz_dirT   = &NormalZ[d00P * numberOfBCnodes];
+   // //   nz_dirB   = &NormalZ[d00M * numberOfBCnodes];
+   // //   nz_dirNE  = &NormalZ[dPP0 * numberOfBCnodes];
+   // //   nz_dirSW  = &NormalZ[dMM0 * numberOfBCnodes];
+   // //   nz_dirSE  = &NormalZ[dPM0 * numberOfBCnodes];
+   // //   nz_dirNW  = &NormalZ[dMP0 * numberOfBCnodes];
+   // //   nz_dirTE  = &NormalZ[dP0P * numberOfBCnodes];
+   // //   nz_dirBW  = &NormalZ[dM0M * numberOfBCnodes];
+   // //   nz_dirBE  = &NormalZ[dP0M * numberOfBCnodes];
+   // //   nz_dirTW  = &NormalZ[dM0P * numberOfBCnodes];
+   // //   nz_dirTN  = &NormalZ[d0PP * numberOfBCnodes];
+   // //   nz_dirBS  = &NormalZ[d0MM * numberOfBCnodes];
+   // //   nz_dirBN  = &NormalZ[d0PM * numberOfBCnodes];
+   // //   nz_dirTS  = &NormalZ[d0MP * numberOfBCnodes];
+   // //   nz_dirTNE = &NormalZ[dPPP * numberOfBCnodes];
+   // //   nz_dirTSW = &NormalZ[dMMP * numberOfBCnodes];
+   // //   nz_dirTSE = &NormalZ[dPMP * numberOfBCnodes];
+   // //   nz_dirTNW = &NormalZ[dMPP * numberOfBCnodes];
+   // //   nz_dirBNE = &NormalZ[dPPM * numberOfBCnodes];
+   // //   nz_dirBSW = &NormalZ[dMMM * numberOfBCnodes];
+   // //   nz_dirBSE = &NormalZ[dPMM * numberOfBCnodes];
+   // //   nz_dirBNW = &NormalZ[dMPM * numberOfBCnodes];
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //bool changeCell = false;
    //   unsigned int KQK  = k_Q[k];
@@ -2190,38 +2190,38 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //   unsigned int ktne = KQK;
    //   unsigned int kbsw = neighborZ[ksw];
    //   ////////////////////////////////////////////////////////////////////////////////
-   //   real f_W    = (D.f[DIR_P00])[ke   ];
-   //   real f_E    = (D.f[DIR_M00])[kw   ];
-   //   real f_S    = (D.f[DIR_0P0])[kn   ];
-   //   real f_N    = (D.f[DIR_0M0])[ks   ];
-   //   real f_B    = (D.f[DIR_00P])[kt   ];
-   //   real f_T    = (D.f[DIR_00M])[kb   ];
-   //   real f_SW   = (D.f[DIR_PP0])[kne  ];
-   //   real f_NE   = (D.f[DIR_MM0])[ksw  ];
-   //   real f_NW   = (D.f[DIR_PM0])[kse  ];
-   //   real f_SE   = (D.f[DIR_MP0])[knw  ];
-   //   real f_BW   = (D.f[DIR_P0P])[kte  ];
-   //   real f_TE   = (D.f[DIR_M0M])[kbw  ];
-   //   real f_TW   = (D.f[DIR_P0M])[kbe  ];
-   //   real f_BE   = (D.f[DIR_M0P])[ktw  ];
-   //   real f_BS   = (D.f[DIR_0PP])[ktn  ];
-   //   real f_TN   = (D.f[DIR_0MM])[kbs  ];
-   //   real f_TS   = (D.f[DIR_0PM])[kbn  ];
-   //   real f_BN   = (D.f[DIR_0MP])[kts  ];
-   //   real f_BSW  = (D.f[DIR_PPP])[ktne ];
-   //   real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-   //   real f_BNW  = (D.f[DIR_PMP])[ktse ];
-   //   real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-   //   real f_TSW  = (D.f[DIR_PPM])[kbne ];
-   //   real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-   //   real f_TNW  = (D.f[DIR_PMM])[kbse ];
-   //   real f_TSE  = (D.f[DIR_MPM])[kbnw ];
+   //   real f_W    = (D.f[dP00])[ke   ];
+   //   real f_E    = (D.f[dM00])[kw   ];
+   //   real f_S    = (D.f[d0P0])[kn   ];
+   //   real f_N    = (D.f[d0M0])[ks   ];
+   //   real f_B    = (D.f[d00P])[kt   ];
+   //   real f_T    = (D.f[d00M])[kb   ];
+   //   real f_SW   = (D.f[dPP0])[kne  ];
+   //   real f_NE   = (D.f[dMM0])[ksw  ];
+   //   real f_NW   = (D.f[dPM0])[kse  ];
+   //   real f_SE   = (D.f[dMP0])[knw  ];
+   //   real f_BW   = (D.f[dP0P])[kte  ];
+   //   real f_TE   = (D.f[dM0M])[kbw  ];
+   //   real f_TW   = (D.f[dP0M])[kbe  ];
+   //   real f_BE   = (D.f[dM0P])[ktw  ];
+   //   real f_BS   = (D.f[d0PP])[ktn  ];
+   //   real f_TN   = (D.f[d0MM])[kbs  ];
+   //   real f_TS   = (D.f[d0PM])[kbn  ];
+   //   real f_BN   = (D.f[d0MP])[kts  ];
+   //   real f_BSW  = (D.f[dPPP])[ktne ];
+   //   real f_BNE  = (D.f[dMMP])[ktsw ];
+   //   real f_BNW  = (D.f[dPMP])[ktse ];
+   //   real f_BSE  = (D.f[dMPP])[ktnw ];
+   //   real f_TSW  = (D.f[dPPM])[kbne ];
+   //   real f_TNE  = (D.f[dMMM])[kbsw ];
+   //   real f_TNW  = (D.f[dPMM])[kbse ];
+   //   real f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]); 
+   //             f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //   //////////////////////////////////////////////////////////////////////////
    //   if (isEvenTimestep==false)
    //   {
-   //      D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-   //      D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-   //      D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-   //      D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-   //      D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-   //      D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-   //      D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-   //      D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-   //      D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-   //      D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-   //      D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-   //      D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-   //      D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-   //      D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-   //      D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-   //      D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-   //      D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-   //      D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-   //      D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //      D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-   //      D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-   //      D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-   //      D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-   //      D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-   //      D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-   //      D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-   //      D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
+   //      D.f[dP00] = &DD[dP00 * size_Mat];
+   //      D.f[dM00] = &DD[dM00 * size_Mat];
+   //      D.f[d0P0] = &DD[d0P0 * size_Mat];
+   //      D.f[d0M0] = &DD[d0M0 * size_Mat];
+   //      D.f[d00P] = &DD[d00P * size_Mat];
+   //      D.f[d00M] = &DD[d00M * size_Mat];
+   //      D.f[dPP0] = &DD[dPP0 * size_Mat];
+   //      D.f[dMM0] = &DD[dMM0 * size_Mat];
+   //      D.f[dPM0] = &DD[dPM0 * size_Mat];
+   //      D.f[dMP0] = &DD[dMP0 * size_Mat];
+   //      D.f[dP0P] = &DD[dP0P * size_Mat];
+   //      D.f[dM0M] = &DD[dM0M * size_Mat];
+   //      D.f[dP0M] = &DD[dP0M * size_Mat];
+   //      D.f[dM0P] = &DD[dM0P * size_Mat];
+   //      D.f[d0PP] = &DD[d0PP * size_Mat];
+   //      D.f[d0MM] = &DD[d0MM * size_Mat];
+   //      D.f[d0PM] = &DD[d0PM * size_Mat];
+   //      D.f[d0MP] = &DD[d0MP * size_Mat];
+   //      D.f[d000] = &DD[d000 * size_Mat];
+   //      D.f[dPPP] = &DD[dPPP * size_Mat];
+   //      D.f[dMMP] = &DD[dMMP * size_Mat];
+   //      D.f[dPMP] = &DD[dPMP * size_Mat];
+   //      D.f[dMPP] = &DD[dMPP * size_Mat];
+   //      D.f[dPPM] = &DD[dPPM * size_Mat];
+   //      D.f[dMMM] = &DD[dMMM * size_Mat];
+   //      D.f[dPMM] = &DD[dPMM * size_Mat];
+   //      D.f[dMPM] = &DD[dMPM * size_Mat];
    //   } 
    //   else
    //   {
-   //      D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-   //      D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-   //      D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-   //      D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-   //      D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-   //      D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-   //      D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-   //      D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-   //      D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-   //      D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-   //      D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-   //      D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-   //      D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-   //      D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-   //      D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-   //      D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-   //      D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-   //      D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-   //      D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-   //      D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-   //      D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-   //      D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-   //      D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-   //      D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-   //      D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-   //      D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-   //      D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
+   //      D.f[dM00] = &DD[dP00 * size_Mat];
+   //      D.f[dP00] = &DD[dM00 * size_Mat];
+   //      D.f[d0M0] = &DD[d0P0 * size_Mat];
+   //      D.f[d0P0] = &DD[d0M0 * size_Mat];
+   //      D.f[d00M] = &DD[d00P * size_Mat];
+   //      D.f[d00P] = &DD[d00M * size_Mat];
+   //      D.f[dMM0] = &DD[dPP0 * size_Mat];
+   //      D.f[dPP0] = &DD[dMM0 * size_Mat];
+   //      D.f[dMP0] = &DD[dPM0 * size_Mat];
+   //      D.f[dPM0] = &DD[dMP0 * size_Mat];
+   //      D.f[dM0M] = &DD[dP0P * size_Mat];
+   //      D.f[dP0P] = &DD[dM0M * size_Mat];
+   //      D.f[dM0P] = &DD[dP0M * size_Mat];
+   //      D.f[dP0M] = &DD[dM0P * size_Mat];
+   //      D.f[d0MM] = &DD[d0PP * size_Mat];
+   //      D.f[d0PP] = &DD[d0MM * size_Mat];
+   //      D.f[d0MP] = &DD[d0PM * size_Mat];
+   //      D.f[d0PM] = &DD[d0MP * size_Mat];
+   //      D.f[d000] = &DD[d000 * size_Mat];
+   //      D.f[dPPP] = &DD[dMMM * size_Mat];
+   //      D.f[dMMP] = &DD[dPPM * size_Mat];
+   //      D.f[dPMP] = &DD[dMPM * size_Mat];
+   //      D.f[dMPP] = &DD[dPMM * size_Mat];
+   //      D.f[dPPM] = &DD[dMMP * size_Mat];
+   //      D.f[dMMM] = &DD[dPPP * size_Mat];
+   //      D.f[dPMM] = &DD[dMPP * size_Mat];
+   //      D.f[dMPM] = &DD[dPMP * size_Mat];
    //   }
    //}
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/PrecursorBCs27.cu b/src/gpu/core/GPU/PrecursorBCs27.cu
similarity index 79%
rename from src/gpu/VirtualFluids_GPU/GPU/PrecursorBCs27.cu
rename to src/gpu/core/GPU/PrecursorBCs27.cu
index 64c6b6085c353e16c08f9057f603a7799ce14289..b60559a89691312155cad38617576b2782f555af 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/PrecursorBCs27.cu
+++ b/src/gpu/core/GPU/PrecursorBCs27.cu
@@ -171,32 +171,32 @@ __global__ void QPrecursorDeviceCompZeroPress(
     ////////////////////////////////////////////////////////////////////////////////
     //! - Set local distributions
     //!
-    real f_M00 = (dist.f[DIR_P00])[kP00];
-    real f_P00 = (dist.f[DIR_M00])[kM00];
-    real f_0M0 = (dist.f[DIR_0P0])[k0P0];
-    real f_0P0 = (dist.f[DIR_0M0])[k0M0];
-    real f_00M = (dist.f[DIR_00P])[k00P];
-    real f_00P = (dist.f[DIR_00M])[k00M];
-    real f_MM0 = (dist.f[DIR_PP0])[kPP0];
-    real f_PP0 = (dist.f[DIR_MM0])[kMM0];
-    real f_MP0 = (dist.f[DIR_PM0])[kPM0];
-    real f_PM0 = (dist.f[DIR_MP0])[kMP0];
-    real f_M0M = (dist.f[DIR_P0P])[kP0P];
-    real f_P0P = (dist.f[DIR_M0M])[kM0M];
-    real f_M0P = (dist.f[DIR_P0M])[kP0M];
-    real f_P0M = (dist.f[DIR_M0P])[kM0P];
-    real f_0MM = (dist.f[DIR_0PP])[k0PP];
-    real f_0PP = (dist.f[DIR_0MM])[k0MM];
-    real f_0MP = (dist.f[DIR_0PM])[k0PM];
-    real f_0PM = (dist.f[DIR_0MP])[k0MP];
-    real f_MMM = (dist.f[DIR_PPP])[kPPP];
-    real f_PPM = (dist.f[DIR_MMP])[kMMP];
-    real f_MPM = (dist.f[DIR_PMP])[kPMP];
-    real f_PMM = (dist.f[DIR_MPP])[kMPP];
-    real f_MMP = (dist.f[DIR_PPM])[kPPM];
-    real f_PPP = (dist.f[DIR_MMM])[kMMM];
-    real f_MPP = (dist.f[DIR_PMM])[kPMM];
-    real f_PMP = (dist.f[DIR_MPM])[kMPM];
+    real f_M00 = (dist.f[dP00])[kP00];
+    real f_P00 = (dist.f[dM00])[kM00];
+    real f_0M0 = (dist.f[d0P0])[k0P0];
+    real f_0P0 = (dist.f[d0M0])[k0M0];
+    real f_00M = (dist.f[d00P])[k00P];
+    real f_00P = (dist.f[d00M])[k00M];
+    real f_MM0 = (dist.f[dPP0])[kPP0];
+    real f_PP0 = (dist.f[dMM0])[kMM0];
+    real f_MP0 = (dist.f[dPM0])[kPM0];
+    real f_PM0 = (dist.f[dMP0])[kMP0];
+    real f_M0M = (dist.f[dP0P])[kP0P];
+    real f_P0P = (dist.f[dM0M])[kM0M];
+    real f_M0P = (dist.f[dP0M])[kP0M];
+    real f_P0M = (dist.f[dM0P])[kM0P];
+    real f_0MM = (dist.f[vf::lbm::dir::d0PP])[k0PP];
+    real f_0PP = (dist.f[d0MM])[k0MM];
+    real f_0MP = (dist.f[d0PM])[k0PM];
+    real f_0PM = (dist.f[d0MP])[k0MP];
+    real f_MMM = (dist.f[dPPP])[kPPP];
+    real f_PPM = (dist.f[dMMP])[kMMP];
+    real f_MPM = (dist.f[dPMP])[kPMP];
+    real f_PMM = (dist.f[dMPP])[kMPP];
+    real f_MMP = (dist.f[dPPM])[kPPM];
+    real f_PPP = (dist.f[dMMM])[kMMM];
+    real f_MPP = (dist.f[dPMM])[kPMM];
+    real f_PMP = (dist.f[dMPM])[kMPM];
 
     SubgridDistances27 subgridD;
     getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
@@ -204,7 +204,7 @@ __global__ void QPrecursorDeviceCompZeroPress(
     ////////////////////////////////////////////////////////////////////////////////
       real drho   =  f_PMP + f_MPP + f_PPP + f_MMP + f_PMM + f_MPM + f_PPM + f_MMM +
                      f_0PM + f_0PP + f_0MP + f_0MM + f_P0M + f_M0P + f_P0P + f_M0M + f_PM0 + f_MP0 + f_PP0 + f_MM0 +
-                     f_00P + f_00M + f_0P0 + f_0M0 + f_P00 + f_M00 + ((dist.f[DIR_000])[k000]);
+                     f_00P + f_00M + f_0P0 + f_0M0 + f_P00 + f_M00 + ((dist.f[d000])[k000]);
 
       real vx1 =  (((f_PMP - f_MPM) - (f_MPP - f_PMM)) + ((f_PPP - f_MMM) - (f_MMP - f_PPM)) +
                       ((f_P0M - f_M0P)   + (f_P0P - f_M0M))   + ((f_PM0 - f_MP0)   + (f_PP0 - f_MM0)) +
@@ -228,238 +228,238 @@ __global__ void QPrecursorDeviceCompZeroPress(
     ////////////////////////////////////////////////////////////////////////////////
     //! - Update distributions with subgrid distance (q) between zero and one
     real feq, q, velocityLB, velocityBC;
-    q = (subgridD.q[DIR_P00])[nodeIndex];
+    q = (subgridD.q[dP00])[nodeIndex];
     if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
     {
         velocityLB = vx1;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
         velocityBC = VeloX;
-        (dist.f[DIR_M00])[kM00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P00, f_M00, feq, omega, drho, velocityBC, c2o27);
+        (dist.f[dM00])[kM00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P00, f_M00, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = (subgridD.q[DIR_M00])[nodeIndex];
+    q = (subgridD.q[dM00])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
         velocityBC = -VeloX;
-        (dist.f[DIR_P00])[kP00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M00, f_P00, feq, omega, drho, velocityBC, c2o27);
+        (dist.f[dP00])[kP00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M00, f_P00, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = (subgridD.q[DIR_0P0])[nodeIndex];
+    q = (subgridD.q[d0P0])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx2;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
         velocityBC = VeloY;
-        (dist.f[DIR_0M0])[DIR_0M0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0P0, f_0M0, feq, omega, drho, velocityBC, c2o27);
+        (dist.f[d0M0])[d0M0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0P0, f_0M0, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = (subgridD.q[DIR_0M0])[nodeIndex];
+    q = (subgridD.q[d0M0])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx2;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
         velocityBC = -VeloY;
-        (dist.f[DIR_0P0])[k0P0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0M0, f_0P0, feq, omega, drho, velocityBC, c2o27);
+        (dist.f[d0P0])[k0P0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0M0, f_0P0, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = (subgridD.q[DIR_00P])[nodeIndex];
+    q = (subgridD.q[d00P])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
         velocityBC = VeloZ;
-        (dist.f[DIR_00M])[k00M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00P, f_00M, feq, omega, drho, velocityBC, c2o27);
+        (dist.f[d00M])[k00M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00P, f_00M, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = (subgridD.q[DIR_00M])[nodeIndex];
+    q = (subgridD.q[d00M])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
         velocityBC = -VeloZ;
-        (dist.f[DIR_00P])[k00P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00M, f_00P, feq, omega, drho, velocityBC, c2o27);
+        (dist.f[d00P])[k00P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00M, f_00P, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = (subgridD.q[DIR_PP0])[nodeIndex];
+    q = (subgridD.q[dPP0])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 + vx2;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = VeloX + VeloY;
-        (dist.f[DIR_MM0])[kMM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PP0, f_MM0, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dMM0])[kMM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PP0, f_MM0, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_MM0])[nodeIndex];
+    q = (subgridD.q[dMM0])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 - vx2;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloX - VeloY;
-        (dist.f[DIR_PP0])[kPP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MM0, f_PP0, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dPP0])[kPP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MM0, f_PP0, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_PM0])[nodeIndex];
+    q = (subgridD.q[dPM0])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 - vx2;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = VeloX - VeloY;
-        (dist.f[DIR_MP0])[kMP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PM0, f_MP0, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dMP0])[kMP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PM0, f_MP0, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_MP0])[nodeIndex];
+    q = (subgridD.q[dMP0])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 + vx2;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloX + VeloY;
-        (dist.f[DIR_PM0])[kPM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MP0, f_PM0, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dPM0])[kPM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MP0, f_PM0, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_P0P])[nodeIndex];
+    q = (subgridD.q[dP0P])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = VeloX + VeloZ;
-        (dist.f[DIR_M0M])[kM0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0P, f_M0M, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dM0M])[kM0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0P, f_M0M, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_M0M])[nodeIndex];
+    q = (subgridD.q[dM0M])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloX - VeloZ;
-        (dist.f[DIR_P0P])[kP0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0M, f_P0P, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dP0P])[kP0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0M, f_P0P, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_P0M])[nodeIndex];
+    q = (subgridD.q[dP0M])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = VeloX - VeloZ;
-        (dist.f[DIR_M0P])[kM0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0M, f_M0P, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dM0P])[kM0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0M, f_M0P, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_M0P])[nodeIndex];
+    q = (subgridD.q[dM0P])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloX + VeloZ;
-        (dist.f[DIR_P0M])[kP0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0P, f_P0M, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[dP0M])[kP0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0P, f_P0M, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_0PP])[nodeIndex];
+    q = (subgridD.q[vf::lbm::dir::d0PP])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx2 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = VeloY + VeloZ;
-        (dist.f[DIR_0MM])[k0MM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0MM, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[d0MM])[k0MM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0MM, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_0MM])[nodeIndex];
+    q = (subgridD.q[d0MM])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx2 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloY - VeloZ;
-        (dist.f[DIR_0PP])[k0PP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0MM, f_0PP, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[vf::lbm::dir::d0PP])[k0PP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0MM, f_0PP, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_0PM])[nodeIndex];
+    q = (subgridD.q[d0PM])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx2 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = VeloY - VeloZ;
-        (dist.f[DIR_0MP])[k0MP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PM, f_0PP, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[d0MP])[k0MP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PM, f_0PP, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_0MP])[nodeIndex];
+    q = (subgridD.q[d0MP])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx2 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloY + VeloZ;
-        (dist.f[DIR_0PM])[k0PM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0PM, feq, omega, drho, velocityBC, c1o54);
+        (dist.f[d0PM])[k0PM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0PM, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = (subgridD.q[DIR_PPP])[nodeIndex];
+    q = (subgridD.q[dPPP])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 + vx2 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = VeloX + VeloY + VeloZ;
-        (dist.f[DIR_MMM])[kMMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPP, f_MMM, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dMMM])[kMMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPP, f_MMM, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_MMM])[nodeIndex];
+    q = (subgridD.q[dMMM])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 - vx2 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = -VeloX - VeloY - VeloZ;
-        (dist.f[DIR_PPP])[kPPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMM, f_PPP, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dPPP])[kPPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMM, f_PPP, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_PPM])[nodeIndex];
+    q = (subgridD.q[dPPM])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 + vx2 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = VeloX + VeloY - VeloZ;
-        (dist.f[DIR_MMP])[kMMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPM, f_MMP, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dMMP])[kMMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPM, f_MMP, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_MMP])[nodeIndex];
+    q = (subgridD.q[dMMP])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 - vx2 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = -VeloX - VeloY + VeloZ;
-        (dist.f[DIR_PPM])[kPPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMP, f_PPM, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dPPM])[kPPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMP, f_PPM, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_PMP])[nodeIndex];
+    q = (subgridD.q[dPMP])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 - vx2 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = VeloX - VeloY + VeloZ;
-        (dist.f[DIR_MPM])[kMPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMP, f_MPM, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dMPM])[kMPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMP, f_MPM, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_MPM])[nodeIndex];
+    q = (subgridD.q[dMPM])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 + vx2 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = -VeloX + VeloY - VeloZ;
-        (dist.f[DIR_PMP])[kPMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPM, f_PMP, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dPMP])[kPMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPM, f_PMP, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_PMM])[nodeIndex];
+    q = (subgridD.q[dPMM])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = vx1 - vx2 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = VeloX - VeloY - VeloZ;
-        (dist.f[DIR_MPP])[kMPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMM, f_MPP, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dMPP])[kMPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMM, f_MPP, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = (subgridD.q[DIR_MPP])[nodeIndex];
+    q = (subgridD.q[dMPP])[nodeIndex];
     if (q>=c0o1 && q<=c1o1)
     {
         velocityLB = -vx1 + vx2 + vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
         velocityBC = -VeloX + VeloY + VeloZ;
-        (dist.f[DIR_PMM])[kPMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPP, f_PMM, feq, omega, drho, velocityBC, c1o216);
+        (dist.f[dPMM])[kPMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPP, f_PMM, feq, omega, drho, velocityBC, c1o216);
     }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -635,33 +635,33 @@ __global__ void PrecursorDeviceEQ27(
     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // based on BGK Plus Comp
     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    real f_M00 = (dist.f[DIR_P00])[kP00];
-    real f_P00 = (dist.f[DIR_M00])[kM00];
-    real f_0M0 = (dist.f[DIR_0P0])[k0P0];
-    real f_0P0 = (dist.f[DIR_0M0])[k0M0];
-    real f_00M = (dist.f[DIR_00P])[k00P];
-    real f_00P = (dist.f[DIR_00M])[k00M];
-    real f_MM0 = (dist.f[DIR_PP0])[kPP0];
-    real f_PP0 = (dist.f[DIR_MM0])[kMM0];
-    real f_MP0 = (dist.f[DIR_PM0])[kPM0];
-    real f_PM0 = (dist.f[DIR_MP0])[kMP0];
-    real f_M0M = (dist.f[DIR_P0P])[kP0P];
-    real f_P0P = (dist.f[DIR_M0M])[kM0M];
-    real f_M0P = (dist.f[DIR_P0M])[kP0M];
-    real f_P0M = (dist.f[DIR_M0P])[kM0P];
-    real f_0MM = (dist.f[DIR_0PP])[k0PP];
-    real f_0PP = (dist.f[DIR_0MM])[k0MM];
-    real f_0PM = (dist.f[DIR_0MP])[k0MP];
-    real f_0MP = (dist.f[DIR_0PM])[k0PM];
-    real f_000 = (dist.f[DIR_000])[k000];
-    real f_MMM = (dist.f[DIR_PPP])[kPPP];
-    real f_PPM = (dist.f[DIR_MMP])[kMMP];
-    real f_MPM = (dist.f[DIR_PMP])[kPMP];
-    real f_PMM = (dist.f[DIR_MPP])[kMPP];
-    real f_MMP = (dist.f[DIR_PPM])[kPPM];
-    real f_PPP = (dist.f[DIR_MMM])[kMMM];
-    real f_MPP = (dist.f[DIR_PMM])[kPMM];
-    real f_PMP = (dist.f[DIR_MPM])[kMPM];
+    real f_M00 = (dist.f[dP00])[kP00];
+    real f_P00 = (dist.f[dM00])[kM00];
+    real f_0M0 = (dist.f[d0P0])[k0P0];
+    real f_0P0 = (dist.f[d0M0])[k0M0];
+    real f_00M = (dist.f[d00P])[k00P];
+    real f_00P = (dist.f[d00M])[k00M];
+    real f_MM0 = (dist.f[dPP0])[kPP0];
+    real f_PP0 = (dist.f[dMM0])[kMM0];
+    real f_MP0 = (dist.f[dPM0])[kPM0];
+    real f_PM0 = (dist.f[dMP0])[kMP0];
+    real f_M0M = (dist.f[dP0P])[kP0P];
+    real f_P0P = (dist.f[dM0M])[kM0M];
+    real f_M0P = (dist.f[dP0M])[kP0M];
+    real f_P0M = (dist.f[dM0P])[kM0P];
+    real f_0MM = (dist.f[vf::lbm::dir::d0PP])[k0PP];
+    real f_0PP = (dist.f[d0MM])[k0MM];
+    real f_0PM = (dist.f[d0MP])[k0MP];
+    real f_0MP = (dist.f[d0PM])[k0PM];
+    real f_000 = (dist.f[d000])[k000];
+    real f_MMM = (dist.f[dPPP])[kPPP];
+    real f_PPM = (dist.f[dMMP])[kMMP];
+    real f_MPM = (dist.f[dPMP])[kPMP];
+    real f_PMM = (dist.f[dMPP])[kMPP];
+    real f_MMP = (dist.f[dPPM])[kPPM];
+    real f_PPP = (dist.f[dMMM])[kMMM];
+    real f_MPP = (dist.f[dPMM])[kPMM];
+    real f_PMP = (dist.f[dMPM])[kMPM];
 
       ////////////////////////////////////////////////////////////////////////////////
       //! - Set macroscopic quantities
@@ -708,35 +708,35 @@ __global__ void PrecursorDeviceEQ27(
       ////////////////////////////////////////////////////////////////////////////////
       //! write the new distributions to the bc nodes
       //!
-      (dist.f[DIR_P00])[kP00] = f_M00;
-      (dist.f[DIR_PP0])[kPP0] = f_MM0;
-      (dist.f[DIR_P0M])[kP0M] = f_M0P;
-      (dist.f[DIR_PM0])[kPM0] = f_MP0;
-      (dist.f[DIR_PMP])[kPMP] = f_MPM;
-      (dist.f[DIR_P0P])[kP0P] = f_M0M;
-      (dist.f[DIR_PPM])[kPPM] = f_MMP;
-      (dist.f[DIR_PPP])[kPPP] = f_MMM;
-      (dist.f[DIR_PMM])[kPMM] = f_MPP;
-
-      (dist.f[DIR_M00])[kM00] = f_P00;
-      (dist.f[DIR_MM0])[kMM0] = f_PP0;
-      (dist.f[DIR_M0M])[kM0M] = f_P0P;
-      (dist.f[DIR_MP0])[kMP0] = f_PM0;
-      (dist.f[DIR_M0P])[kM0P] = f_P0M;
-      (dist.f[DIR_MMM])[kMMM] = f_PPP;
-      (dist.f[DIR_MMP])[kMMP] = f_PPM;
-      (dist.f[DIR_MPP])[kMPP] = f_PMM;
-      (dist.f[DIR_MPM])[kMPM] = f_PMP;
-
-      (dist.f[DIR_0P0])[k0P0] = f_0M0;
-      (dist.f[DIR_0M0])[k0M0] = f_0P0;
-      (dist.f[DIR_00P])[k00P] = f_00M;
-      (dist.f[DIR_00M])[k00M] = f_00P;
-      (dist.f[DIR_0PP])[k0PP] = f_0MM;
-      (dist.f[DIR_0MM])[k0MM] = f_0PP;
-      (dist.f[DIR_0PM])[k0PM] = f_0MP;
-      (dist.f[DIR_0MP])[k0MP] = f_0PM;
-      (dist.f[DIR_000])[k000] = f_000;
+      (dist.f[dP00])[kP00] = f_M00;
+      (dist.f[dPP0])[kPP0] = f_MM0;
+      (dist.f[dP0M])[kP0M] = f_M0P;
+      (dist.f[dPM0])[kPM0] = f_MP0;
+      (dist.f[dPMP])[kPMP] = f_MPM;
+      (dist.f[dP0P])[kP0P] = f_M0M;
+      (dist.f[dPPM])[kPPM] = f_MMP;
+      (dist.f[dPPP])[kPPP] = f_MMM;
+      (dist.f[dPMM])[kPMM] = f_MPP;
+
+      (dist.f[dM00])[kM00] = f_P00;
+      (dist.f[dMM0])[kMM0] = f_PP0;
+      (dist.f[dM0M])[kM0M] = f_P0P;
+      (dist.f[dMP0])[kMP0] = f_PM0;
+      (dist.f[dM0P])[kM0P] = f_P0M;
+      (dist.f[dMMM])[kMMM] = f_PPP;
+      (dist.f[dMMP])[kMMP] = f_PPM;
+      (dist.f[dMPP])[kMPP] = f_PMM;
+      (dist.f[dMPM])[kMPM] = f_PMP;
+
+      (dist.f[d0P0])[k0P0] = f_0M0;
+      (dist.f[d0M0])[k0M0] = f_0P0;
+      (dist.f[d00P])[k00P] = f_00M;
+      (dist.f[d00M])[k00M] = f_00P;
+      (dist.f[vf::lbm::dir::d0PP])[k0PP] = f_0MM;
+      (dist.f[d0MM])[k0MM] = f_0PP;
+      (dist.f[d0PM])[k0PM] = f_0MP;
+      (dist.f[d0MP])[k0MP] = f_0PM;
+      (dist.f[d000])[k000] = f_000;
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -929,15 +929,15 @@ __global__ void PrecursorDeviceDistributions(
     unsigned int kPPP = KQK;
     // unsigned int kMMM = neighborZ[kMM0];
 
-    dist.f[DIR_P00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio;
-    dist.f[DIR_PP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio;
-    dist.f[DIR_PM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio;
-    dist.f[DIR_P0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio;
-    dist.f[DIR_P0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio;
-    dist.f[DIR_PPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio;
-    dist.f[DIR_PMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio;
-    dist.f[DIR_PPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio;
-    dist.f[DIR_PMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio;
+    dist.f[dP00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio;
+    dist.f[dPP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio;
+    dist.f[dPM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio;
+    dist.f[dP0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio;
+    dist.f[dP0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio;
+    dist.f[dPPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio;
+    dist.f[dPMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio;
+    dist.f[dPPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio;
+    dist.f[dPMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio;
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -1143,15 +1143,15 @@ __global__ void QPrecursorDeviceDistributions(
     getPointersToSubgridDistances(qs, subgridDistances, sizeQ);
 
     real q;
-    q = qs.q[DIR_P00][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_P00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio;
-    q = qs.q[DIR_PP0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio;
-    q = qs.q[DIR_PM0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio;
-    q = qs.q[DIR_P0P][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_P0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio;
-    q = qs.q[DIR_P0M][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_P0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio;
-    q = qs.q[DIR_PPP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio;
-    q = qs.q[DIR_PMP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio;
-    q = qs.q[DIR_PPM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio;
-    q = qs.q[DIR_PMM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio;
+    q = qs.q[dP00][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dP00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio;
+    q = qs.q[dPP0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio;
+    q = qs.q[dPM0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio;
+    q = qs.q[dP0P][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dP0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio;
+    q = qs.q[dP0M][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dP0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio;
+    q = qs.q[dPPP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio;
+    q = qs.q[dPMP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio;
+    q = qs.q[dPPM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio;
+    q = qs.q[dPMM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio;
 
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/core/GPU/PressBCs27.cu b/src/gpu/core/GPU/PressBCs27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..9ccd5a496b7bb233a2c322e8f2564079d610f7b6
--- /dev/null
+++ b/src/gpu/core/GPU/PressBCs27.cu
@@ -0,0 +1,5294 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 PressBCs27.cu
+//! \ingroup GPU
+//! \author Martin Schoenherr, Anna Wellmann
+//======================================================================================
+#include "LBM/LB.h"
+#include "lbm/constants/D3Q27.h"
+#include "basics/constants/NumericConstants.h"
+#include "lbm/MacroscopicQuantities.h"
+#include "LBM/GPUHelperFunctions/KernelUtilities.h"
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+using namespace vf::gpu;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QInflowScaleByPressDevice27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int* k_N,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int K1QK  = k_N[k];
+      unsigned int k1zero= K1QK;
+      unsigned int k1e   = K1QK;
+      unsigned int k1w   = neighborX[K1QK];
+      unsigned int k1n   = K1QK;
+      unsigned int k1s   = neighborY[K1QK];
+      unsigned int k1t   = K1QK;
+      unsigned int k1b   = neighborZ[K1QK];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = K1QK;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = K1QK;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = K1QK;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = K1QK;
+      unsigned int k1bsw = neighborZ[k1sw];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real f1_E    = (D.f[dP00])[k1e   ];
+      real f1_W    = (D.f[dM00])[k1w   ];
+      real f1_N    = (D.f[d0P0])[k1n   ];
+      real f1_S    = (D.f[d0M0])[k1s   ];
+      real f1_T    = (D.f[d00P])[k1t   ];
+      real f1_B    = (D.f[d00M])[k1b   ];
+      real f1_NE   = (D.f[dPP0])[k1ne  ];
+      real f1_SW   = (D.f[dMM0])[k1sw  ];
+      real f1_SE   = (D.f[dPM0])[k1se  ];
+      real f1_NW   = (D.f[dMP0])[k1nw  ];
+      real f1_TE   = (D.f[dP0P])[k1te  ];
+      real f1_BW   = (D.f[dM0M])[k1bw  ];
+      real f1_BE   = (D.f[dP0M])[k1be  ];
+      real f1_TW   = (D.f[dM0P])[k1tw  ];
+      real f1_TN   = (D.f[d0PP])[k1tn  ];
+      real f1_BS   = (D.f[d0MM])[k1bs  ];
+      real f1_BN   = (D.f[d0PM])[k1bn  ];
+      real f1_TS   = (D.f[d0MP])[k1ts  ];
+      //real f1_ZERO = (D.f[d000])[k1zero];
+      real f1_TNE  = (D.f[dPPP])[k1tne ];
+      real f1_TSW  = (D.f[dMMP])[k1tsw ];
+      real f1_TSE  = (D.f[dPMP])[k1tse ];
+      real f1_TNW  = (D.f[dMPP])[k1tnw ];
+      real f1_BNE  = (D.f[dPPM])[k1bne ];
+      real f1_BSW  = (D.f[dMMM])[k1bsw ];
+      real f1_BSE  = (D.f[dPMM])[k1bse ];
+      real f1_BNW  = (D.f[dMPM])[k1bnw ];
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real f_E    = (D.f[dP00])[ke   ];
+      real f_W    = (D.f[dM00])[kw   ];
+      real f_N    = (D.f[d0P0])[kn   ];
+      real f_S    = (D.f[d0M0])[ks   ];
+      real f_T    = (D.f[d00P])[kt   ];
+      real f_B    = (D.f[d00M])[kb   ];
+      real f_NE   = (D.f[dPP0])[kne  ];
+      real f_SW   = (D.f[dMM0])[ksw  ];
+      real f_SE   = (D.f[dPM0])[kse  ];
+      real f_NW   = (D.f[dMP0])[knw  ];
+      real f_TE   = (D.f[dP0P])[kte  ];
+      real f_BW   = (D.f[dM0M])[kbw  ];
+      real f_BE   = (D.f[dP0M])[kbe  ];
+      real f_TW   = (D.f[dM0P])[ktw  ];
+      real f_TN   = (D.f[d0PP])[ktn  ];
+      real f_BS   = (D.f[d0MM])[kbs  ];
+      real f_BN   = (D.f[d0PM])[kbn  ];
+      real f_TS   = (D.f[d0MP])[kts  ];
+      //real f_ZERO = (D.f[d000])[kzero];
+      real f_TNE  = (D.f[dPPP])[ktne ];
+      real f_TSW  = (D.f[dMMP])[ktsw ];
+      real f_TSE  = (D.f[dPMP])[ktse ];
+      real f_TNW  = (D.f[dMPP])[ktnw ];
+      real f_BNE  = (D.f[dPPM])[kbne ];
+      real f_BSW  = (D.f[dMMM])[kbsw ];
+      real f_BSE  = (D.f[dPMM])[kbse ];
+      real f_BNW  = (D.f[dMPM])[kbnw ];
+      //////////////////////////////////////////////////////////////////////////
+      // real vx1, vx2, vx3;
+      real drho, drho1;
+      //////////////////////////////////////////////////////////////////////////
+     //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[d000])[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[d000])[kzero]);
+      //////////////////////////////////////////////////////////////////////////
+     //Schallgeschwindigkeit
+     real cs = c1o1 / sqrtf(c3o1);
+      //////////////////////////////////////////////////////////////////////////
+     real rhoInterpol = drho1 * cs + (c1o1 - cs) * drho;
+     //real diffRho = (rhoBC[k] + one) / (rhoInterpol + one);
+     real diffRhoToAdd = rhoBC[k] - rhoInterpol;
+     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+     //no velocity
+     //////////////////////////////////////////
+      f_E    = f1_E   * cs + (c1o1 - cs) * f_E   ;
+      f_W    = f1_W   * cs + (c1o1 - cs) * f_W   ;
+      f_N    = f1_N   * cs + (c1o1 - cs) * f_N   ;
+      f_S    = f1_S   * cs + (c1o1 - cs) * f_S   ;
+      f_T    = f1_T   * cs + (c1o1 - cs) * f_T   ;
+      f_B    = f1_B   * cs + (c1o1 - cs) * f_B   ;
+      f_NE   = f1_NE  * cs + (c1o1 - cs) * f_NE  ;
+      f_SW   = f1_SW  * cs + (c1o1 - cs) * f_SW  ;
+      f_SE   = f1_SE  * cs + (c1o1 - cs) * f_SE  ;
+      f_NW   = f1_NW  * cs + (c1o1 - cs) * f_NW  ;
+      f_TE   = f1_TE  * cs + (c1o1 - cs) * f_TE  ;
+      f_BW   = f1_BW  * cs + (c1o1 - cs) * f_BW  ;
+      f_BE   = f1_BE  * cs + (c1o1 - cs) * f_BE  ;
+      f_TW   = f1_TW  * cs + (c1o1 - cs) * f_TW  ;
+      f_TN   = f1_TN  * cs + (c1o1 - cs) * f_TN  ;
+      f_BS   = f1_BS  * cs + (c1o1 - cs) * f_BS  ;
+      f_BN   = f1_BN  * cs + (c1o1 - cs) * f_BN  ;
+      f_TS   = f1_TS  * cs + (c1o1 - cs) * f_TS  ;
+      f_TNE  = f1_TNE * cs + (c1o1 - cs) * f_TNE ;
+      f_TSW  = f1_TSW * cs + (c1o1 - cs) * f_TSW ;
+      f_TSE  = f1_TSE * cs + (c1o1 - cs) * f_TSE ;
+      f_TNW  = f1_TNW * cs + (c1o1 - cs) * f_TNW ;
+      f_BNE  = f1_BNE * cs + (c1o1 - cs) * f_BNE ;
+      f_BSW  = f1_BSW * cs + (c1o1 - cs) * f_BSW ;
+      f_BSE  = f1_BSE * cs + (c1o1 - cs) * f_BSE ;
+      f_BNW  = f1_BNW * cs + (c1o1 - cs) * f_BNW ;
+     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+     //scale by press
+     //////////////////////////////////////////
+     //f_E    = (f_E   + c2over27 ) * diffRho - c2over27 ;
+   //   f_W    = (f_W   + c2over27 ) * diffRho - c2over27 ;
+   //   f_N    = (f_N   + c2over27 ) * diffRho - c2over27 ;
+   //   f_S    = (f_S   + c2over27 ) * diffRho - c2over27 ;
+   //   f_T    = (f_T   + c2over27 ) * diffRho - c2over27 ;
+   //   f_B    = (f_B   + c2over27 ) * diffRho - c2over27 ;
+     //f_NE   = (f_NE  + c1over54 ) * diffRho - c1over54 ;
+   //   f_SW   = (f_SW  + c1over54 ) * diffRho - c1over54 ;
+   //   f_SE   = (f_SE  + c1over54 ) * diffRho - c1over54 ;
+   //   f_NW   = (f_NW  + c1over54 ) * diffRho - c1over54 ;
+   //   f_TE   = (f_TE  + c1over54 ) * diffRho - c1over54 ;
+   //   f_BW   = (f_BW  + c1over54 ) * diffRho - c1over54 ;
+   //   f_BE   = (f_BE  + c1over54 ) * diffRho - c1over54 ;
+   //   f_TW   = (f_TW  + c1over54 ) * diffRho - c1over54 ;
+   //   f_TN   = (f_TN  + c1over54 ) * diffRho - c1over54 ;
+   //   f_BS   = (f_BS  + c1over54 ) * diffRho - c1over54 ;
+   //   f_BN   = (f_BN  + c1over54 ) * diffRho - c1over54 ;
+   //   f_TS   = (f_TS  + c1over54 ) * diffRho - c1over54 ;
+   //   f_TNE  = (f_TNE + c1over216) * diffRho - c1over216;
+   //   f_TSW  = (f_TSW + c1over216) * diffRho - c1over216;
+   //   f_TSE  = (f_TSE + c1over216) * diffRho - c1over216;
+   //   f_TNW  = (f_TNW + c1over216) * diffRho - c1over216;
+   //   f_BNE  = (f_BNE + c1over216) * diffRho - c1over216;
+   //   f_BSW  = (f_BSW + c1over216) * diffRho - c1over216;
+   //   f_BSE  = (f_BSE + c1over216) * diffRho - c1over216;
+   //   f_BNW  = (f_BNW + c1over216) * diffRho - c1over216;
+     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+     // add press
+     //////////////////////////////////////////
+     f_E    = (f_E   + c2o27  * diffRhoToAdd);
+      f_W    = (f_W   + c2o27  * diffRhoToAdd);
+      f_N    = (f_N   + c2o27  * diffRhoToAdd);
+      f_S    = (f_S   + c2o27  * diffRhoToAdd);
+      f_T    = (f_T   + c2o27  * diffRhoToAdd);
+      f_B    = (f_B   + c2o27  * diffRhoToAdd);
+     f_NE   = (f_NE  + c1o54  * diffRhoToAdd);
+      f_SW   = (f_SW  + c1o54  * diffRhoToAdd);
+      f_SE   = (f_SE  + c1o54  * diffRhoToAdd);
+      f_NW   = (f_NW  + c1o54  * diffRhoToAdd);
+      f_TE   = (f_TE  + c1o54  * diffRhoToAdd);
+      f_BW   = (f_BW  + c1o54  * diffRhoToAdd);
+      f_BE   = (f_BE  + c1o54  * diffRhoToAdd);
+      f_TW   = (f_TW  + c1o54  * diffRhoToAdd);
+      f_TN   = (f_TN  + c1o54  * diffRhoToAdd);
+      f_BS   = (f_BS  + c1o54  * diffRhoToAdd);
+      f_BN   = (f_BN  + c1o54  * diffRhoToAdd);
+      f_TS   = (f_TS  + c1o54  * diffRhoToAdd);
+      f_TNE  = (f_TNE + c1o216 * diffRhoToAdd);
+      f_TSW  = (f_TSW + c1o216 * diffRhoToAdd);
+      f_TSE  = (f_TSE + c1o216 * diffRhoToAdd);
+      f_TNW  = (f_TNW + c1o216 * diffRhoToAdd);
+      f_BNE  = (f_BNE + c1o216 * diffRhoToAdd);
+      f_BSW  = (f_BSW + c1o216 * diffRhoToAdd);
+      f_BSE  = (f_BSE + c1o216 * diffRhoToAdd);
+      f_BNW  = (f_BNW + c1o216 * diffRhoToAdd);
+     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+     //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////
+      //__syncthreads();
+     // -X
+     //(D.f[dP00])[ke   ] = f_E   ;
+     //(D.f[dPM0])[kse  ] = f_SE  ;
+     //(D.f[dPP0])[kne  ] = f_NE  ;
+     //(D.f[dP0M])[kbe  ] = f_BE  ;
+     //(D.f[dP0P])[kte  ] = f_TE  ;
+     //(D.f[dPMP])[ktse ] = f_TSE ;
+     //(D.f[dPPP])[ktne ] = f_TNE ;
+     //(D.f[dPMM])[kbse ] = f_BSE ;
+     //(D.f[dPPM])[kbne ] = f_BNE ;
+     // X
+     (D.f[dM00])[kw   ] = f_W   ;
+     (D.f[dMM0])[ksw  ] = f_SW  ;
+     (D.f[dMP0])[knw  ] = f_NW  ;
+     (D.f[dM0M])[kbw  ] = f_BW  ;
+     (D.f[dM0P])[ktw  ] = f_TW  ;
+     (D.f[dMMP])[ktsw ] = f_TSW ;
+     (D.f[dMPP])[ktnw ] = f_TNW ;
+     (D.f[dMMM])[kbsw ] = f_BSW ;
+     (D.f[dMPM])[kbnw ] = f_BNW ;
+     // Y
+     //(D.f[d0M0])[ks   ] = f_S   ;
+     //(D.f[dPM0])[kse  ] = f_SE  ;
+     //(D.f[dMM0])[ksw  ] = f_SW  ;
+     //(D.f[d0MP])[kts  ] = f_TS  ;
+     //(D.f[d0MM])[kbs  ] = f_BS  ;
+     //(D.f[dPMP])[ktse ] = f_TSE ;
+     //(D.f[dMMP])[ktsw ] = f_TSW ;
+     //(D.f[dPMM])[kbse ] = f_BSE ;
+     //(D.f[dMMM])[kbsw ] = f_BSW ;
+     // Z
+     //(D.f[d00M])[kb   ] = f_B   ;
+     //(D.f[dP0M])[kbe  ] = f_BE  ;
+     //(D.f[dM0M])[kbw  ] = f_BW  ;
+     //(D.f[d0PM])[kbn  ] = f_BN  ;
+     //(D.f[d0MM])[kbs  ] = f_BS  ;
+     //(D.f[dPPM])[kbne ] = f_BNE ;
+     //(D.f[dMPM])[kbnw ] = f_BNW ;
+     //(D.f[dPMM])[kbse ] = f_BSE ;
+     //(D.f[dMMM])[kbsw ] = f_BSW ;
+      //////////////////////////////////////////////////////////////////////////
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceIncompNEQ27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int* k_N,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int K1QK  = k_N[k];
+      unsigned int k1zero= K1QK;
+      unsigned int k1e   = K1QK;
+      unsigned int k1w   = neighborX[K1QK];
+      unsigned int k1n   = K1QK;
+      unsigned int k1s   = neighborY[K1QK];
+      unsigned int k1t   = K1QK;
+      unsigned int k1b   = neighborZ[K1QK];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = K1QK;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = K1QK;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = K1QK;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = K1QK;
+      unsigned int k1bsw = neighborZ[k1sw];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==true) //// ACHTUNG PREColl !!!!!!!!!!!!!!
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[k1e   ];
+      f1_E    = (D.f[dM00])[k1w   ];
+      f1_S    = (D.f[d0P0])[k1n   ];
+      f1_N    = (D.f[d0M0])[k1s   ];
+      f1_B    = (D.f[d00P])[k1t   ];
+      f1_T    = (D.f[d00M])[k1b   ];
+      f1_SW   = (D.f[dPP0])[k1ne  ];
+      f1_NE   = (D.f[dMM0])[k1sw  ];
+      f1_NW   = (D.f[dPM0])[k1se  ];
+      f1_SE   = (D.f[dMP0])[k1nw  ];
+      f1_BW   = (D.f[dP0P])[k1te  ];
+      f1_TE   = (D.f[dM0M])[k1bw  ];
+      f1_TW   = (D.f[dP0M])[k1be  ];
+      f1_BE   = (D.f[dM0P])[k1tw  ];
+      f1_BS   = (D.f[d0PP])[k1tn  ];
+      f1_TN   = (D.f[d0MM])[k1bs  ];
+      f1_TS   = (D.f[d0PM])[k1bn  ];
+      f1_BN   = (D.f[d0MP])[k1ts  ];
+      f1_ZERO = (D.f[d000])[k1zero];
+      f1_BSW  = (D.f[dPPP])[k1tne ];
+      f1_BNE  = (D.f[dMMP])[k1tsw ];
+      f1_BNW  = (D.f[dPMP])[k1tse ];
+      f1_BSE  = (D.f[dMPP])[k1tnw ];
+      f1_TSW  = (D.f[dPPM])[k1bne ];
+      f1_TNE  = (D.f[dMMM])[k1bsw ];
+      f1_TNW  = (D.f[dPMM])[k1bse ];
+      f1_TSE  = (D.f[dMPM])[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);
+
+
+      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 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 cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+      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));
+      f1_N     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
+      f1_S     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
+      f1_T     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
+      f1_B     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
+      f1_NE    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+      f1_SW    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+      f1_SE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+      f1_NW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+      f1_TE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+      f1_BW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+      f1_BE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+      f1_TW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+      f1_TN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+      f1_BS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+      f1_BN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+      f1_TS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+      f1_TNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+      f1_BSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+      f1_BNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+      f1_TSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+      f1_TSE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+      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];
+
+     //if(vx1 < zero){
+       // vx1 *= 0.9;
+     //}
+     //if(vx2 < zero){
+       // vx2 *= c1o10;//0.9;
+     //}
+
+      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));
+      f1_N     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
+      f1_S     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
+      f1_T     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
+      f1_B     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
+      f1_NE    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+      f1_SW    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+      f1_SE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+      f1_NW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+      f1_TE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+      f1_BW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+      f1_BE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+      f1_TW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+      f1_TN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+      f1_BS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+      f1_BN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+      f1_TS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+      f1_TNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+      f1_BSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+      f1_BNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+      f1_TSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+      f1_TSE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+      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 = (drho1 + rhoBC[k])/2.f;
+     //drho1 = drho1 - rhoBC[k];
+      //////////////////////////////////////////////////////////////////////////
+
+      __syncthreads();
+
+      (D.f[dP00])[ke   ] = f1_W   ;
+      (D.f[dM00])[kw   ] = f1_E   ;
+      (D.f[d0P0])[kn   ] = f1_S   ;
+      (D.f[d0M0])[ks   ] = f1_N   ;
+      (D.f[d00P])[kt   ] = f1_B   ;
+      (D.f[d00M])[kb   ] = f1_T   ;
+      (D.f[dPP0])[kne  ] = f1_SW  ;
+      (D.f[dMM0])[ksw  ] = f1_NE  ;
+      (D.f[dPM0])[kse  ] = f1_NW  ;
+      (D.f[dMP0])[knw  ] = f1_SE  ;
+      (D.f[dP0P])[kte  ] = f1_BW  ;
+      (D.f[dM0M])[kbw  ] = f1_TE  ;
+      (D.f[dP0M])[kbe  ] = f1_TW  ;
+      (D.f[dM0P])[ktw  ] = f1_BE  ;
+      (D.f[d0PP])[ktn  ] = f1_BS  ;
+      (D.f[d0MM])[kbs  ] = f1_TN  ;
+      (D.f[d0PM])[kbn  ] = f1_TS  ;
+      (D.f[d0MP])[kts  ] = f1_BN  ;
+      (D.f[d000])[kzero] = f1_ZERO;
+      (D.f[dPPP])[ktne ] = f1_BSW ;
+      (D.f[dMMP])[ktsw ] = f1_BNE ;
+      (D.f[dPMP])[ktse ] = f1_BNW ;
+      (D.f[dMPP])[ktnw ] = f1_BSE ;
+      (D.f[dPPM])[kbne ] = f1_TSW ;
+      (D.f[dMMM])[kbsw ] = f1_TNE ;
+      (D.f[dPMM])[kbse ] = f1_TNW ;
+      (D.f[dMPM])[kbnw ] = f1_TSE ;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceNEQ27(
+    real* rhoBC,
+    real* distributions,
+    int* bcNodeIndices,
+    int* bcNeighborIndices,
+    int numberOfBCnodes,
+    real omega1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   //! The pressure boundary condition is executed in the following steps
+   //!
+
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local pressure
+      //!
+      real rhoBClocal = rhoBC[nodeIndex];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int KQK  = bcNodeIndices[nodeIndex];
+      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 neighbor indices (necessary for indirect addressing) for neighboring node
+      //!
+      unsigned int K1QK  = bcNeighborIndices[nodeIndex];
+      unsigned int k1zero= K1QK;
+      unsigned int k1e   = K1QK;
+      unsigned int k1w   = neighborX[K1QK];
+      unsigned int k1n   = K1QK;
+      unsigned int k1s   = neighborY[K1QK];
+      unsigned int k1t   = K1QK;
+      unsigned int k1b   = neighborZ[K1QK];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = K1QK;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = K1QK;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = K1QK;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = K1QK;
+      unsigned int k1bsw = neighborZ[k1sw];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions for neighboring node
+      //!
+      real f1_W    = (dist.f[dP00])[k1e   ];
+      real f1_E    = (dist.f[dM00])[k1w   ];
+      real f1_S    = (dist.f[d0P0])[k1n   ];
+      real f1_N    = (dist.f[d0M0])[k1s   ];
+      real f1_B    = (dist.f[d00P])[k1t   ];
+      real f1_T    = (dist.f[d00M])[k1b   ];
+      real f1_SW   = (dist.f[dPP0])[k1ne  ];
+      real f1_NE   = (dist.f[dMM0])[k1sw  ];
+      real f1_NW   = (dist.f[dPM0])[k1se  ];
+      real f1_SE   = (dist.f[dMP0])[k1nw  ];
+      real f1_BW   = (dist.f[dP0P])[k1te  ];
+      real f1_TE   = (dist.f[dM0M])[k1bw  ];
+      real f1_TW   = (dist.f[dP0M])[k1be  ];
+      real f1_BE   = (dist.f[dM0P])[k1tw  ];
+      real f1_BS   = (dist.f[d0PP])[k1tn  ];
+      real f1_TN   = (dist.f[d0MM])[k1bs  ];
+      real f1_TS   = (dist.f[d0PM])[k1bn  ];
+      real f1_BN   = (dist.f[d0MP])[k1ts  ];
+      real f1_ZERO = (dist.f[d000])[k1zero];
+      real f1_BSW  = (dist.f[dPPP])[k1tne ];
+      real f1_BNE  = (dist.f[dMMP])[k1tsw ];
+      real f1_BNW  = (dist.f[dPMP])[k1tse ];
+      real f1_BSE  = (dist.f[dMPP])[k1tnw ];
+      real f1_TSW  = (dist.f[dPPM])[k1bne ];
+      real f1_TNE  = (dist.f[dMMM])[k1bsw ];
+      real f1_TNW  = (dist.f[dPMM])[k1bse ];
+      real f1_TSE  = (dist.f[dMPM])[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[d000])[kzero]);
+
+      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 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);
+
+      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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! 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));
+      f1_N     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
+      f1_S     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
+      f1_T     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
+      f1_B     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
+      f1_NE    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+      f1_SW    -= c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+      f1_SE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+      f1_NW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+      f1_TE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+      f1_BW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+      f1_BE    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+      f1_TW    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+      f1_TN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+      f1_BS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+      f1_BN    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+      f1_TS    -=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+      f1_TNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+      f1_BSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+      f1_BNE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+      f1_TSW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+      f1_TSE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+      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));
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! 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));
+      f1_N     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq));
+      f1_S     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq));
+      f1_T     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq));
+      f1_B     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq));
+      f1_NE    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+      f1_SW    += c1o54*  (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+      f1_SE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+      f1_NW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+      f1_TE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+      f1_BW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+      f1_BE    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+      f1_TW    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+      f1_TN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+      f1_BS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+      f1_BN    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+      f1_TS    +=  c1o54* (drho1+(drho1+c1o1)*(c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+      f1_TNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+      f1_BSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+      f1_BNE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+      f1_TSW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+      f1_TSE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+      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));
+
+      //////////////////////////////////////////////////////////////////////////
+
+      __syncthreads();
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! write the new distributions to the bc nodes
+      //!
+      (dist.f[dP00])[ke   ] = f1_W   ;
+      (dist.f[dM00])[kw   ] = f1_E   ;
+      (dist.f[d0P0])[kn   ] = f1_S   ;
+      (dist.f[d0M0])[ks   ] = f1_N   ;
+      (dist.f[d00P])[kt   ] = f1_B   ;
+      (dist.f[d00M])[kb   ] = f1_T   ;
+      (dist.f[dPP0])[kne  ] = f1_SW  ;
+      (dist.f[dMM0])[ksw  ] = f1_NE  ;
+      (dist.f[dPM0])[kse  ] = f1_NW  ;
+      (dist.f[dMP0])[knw  ] = f1_SE  ;
+      (dist.f[dP0P])[kte  ] = f1_BW  ;
+      (dist.f[dM0M])[kbw  ] = f1_TE  ;
+      (dist.f[dP0M])[kbe  ] = f1_TW  ;
+      (dist.f[dM0P])[ktw  ] = f1_BE  ;
+      (dist.f[d0PP])[ktn  ] = f1_BS  ;
+      (dist.f[d0MM])[kbs  ] = f1_TN  ;
+      (dist.f[d0PM])[kbn  ] = f1_TS  ;
+      (dist.f[d0MP])[kts  ] = f1_BN  ;
+      (dist.f[d000])[kzero] = f1_ZERO;
+      (dist.f[dPPP])[ktne ] = f1_BSW ;
+      (dist.f[dMMP])[ktsw ] = f1_BNE ;
+      (dist.f[dPMP])[ktse ] = f1_BNW ;
+      (dist.f[dMPP])[ktnw ] = f1_BSE ;
+      (dist.f[dPPM])[kbne ] = f1_TSW ;
+      (dist.f[dMMM])[kbsw ] = f1_TNE ;
+      (dist.f[dPMM])[kbse ] = f1_TNW ;
+      (dist.f[dMPM])[kbnw ] = f1_TSE ;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+__global__ void LB_BC_Press_East27(
+    int nx,
+    int ny,
+    int tz,
+    unsigned int* bcMatD,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    real* DD,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   //thread-index
+   int ty = blockIdx.x;
+   int tx = threadIdx.x;
+
+   int  k, k1, nxny;                   // Zugriff auf arrays im device
+
+   int  x = tx + STARTOFFX;  // Globaler x-Index
+   int  y = ty + STARTOFFY;  // Globaler y-Index
+   int  z = tz + STARTOFFZ;  // Globaler z-Index
+
+   k = nx*(ny*z + y) + x;
+   nxny = nx*ny;
+   k1 = k-nxny;
+
+   if( bcMatD[k] == GEO_PRESS && bcMatD[k1] == GEO_FLUID)
+   {
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////
+      ////////////////////////////////////////////////////////////////////////////////
+      //index
+      unsigned int kzero= k;
+      unsigned int ke   = k;
+      unsigned int kw   = neighborX[k];
+      unsigned int kn   = k;
+      unsigned int ks   = neighborY[k];
+      unsigned int kt   = k;
+      unsigned int kb   = neighborZ[k];
+      unsigned int ksw  = neighborY[kw];
+      unsigned int kne  = k;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = k;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = k;
+      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 = k;
+      unsigned int kbsw = neighborZ[ksw];
+      //unsigned int kzero= k;
+      //unsigned int ke   = k;
+      //unsigned int kw   = k + 1;
+      //unsigned int kn   = k;
+      //unsigned int ks   = k + nx;
+      //unsigned int kt   = k;
+      //unsigned int kb   = k + nxny;
+      //unsigned int ksw  = k + nx + 1;
+      //unsigned int kne  = k;
+      //unsigned int kse  = k + nx;
+      //unsigned int knw  = k + 1;
+      //unsigned int kbw  = k + nxny + 1;
+      //unsigned int kte  = k;
+      //unsigned int kbe  = k + nxny;
+      //unsigned int ktw  = k + 1;
+      //unsigned int kbs  = k + nxny + nx;
+      //unsigned int ktn  = k;
+      //unsigned int kbn  = k + nxny;
+      //unsigned int kts  = k + nx;
+      //unsigned int ktse = k + nx;
+      //unsigned int kbnw = k + nxny + 1;
+      //unsigned int ktnw = k + 1;
+      //unsigned int kbse = k + nxny + nx;
+      //unsigned int ktsw = k + nx + 1;
+      //unsigned int kbne = k + nxny;
+      //unsigned int ktne = k;
+      //unsigned int kbsw = k + nxny + nx + 1;
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int k1zero= k1;
+      unsigned int k1e   = k1;
+      unsigned int k1w   = neighborX[k1];
+      unsigned int k1n   = k1;
+      unsigned int k1s   = neighborY[k1];
+      unsigned int k1t   = k1;
+      unsigned int k1b   = neighborZ[k1];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = k1;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = k1;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = k1;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = k1;
+      unsigned int k1bsw = neighborZ[k1sw];
+      //unsigned int k1zero= k1;
+      //unsigned int k1e   = k1;
+      //unsigned int k1w   = k1 + 1;
+      //unsigned int k1n   = k1;
+      //unsigned int k1s   = k1 + nx;
+      //unsigned int k1t   = k1;
+      //unsigned int k1b   = k1 + nxny;
+      //unsigned int k1sw  = k1 + nx + 1;
+      //unsigned int k1ne  = k1;
+      //unsigned int k1se  = k1 + nx;
+      //unsigned int k1nw  = k1 + 1;
+      //unsigned int k1bw  = k1 + nxny + 1;
+      //unsigned int k1te  = k1;
+      //unsigned int k1be  = k1 + nxny;
+      //unsigned int k1tw  = k1 + 1;
+      //unsigned int k1bs  = k1 + nxny + nx;
+      //unsigned int k1tn  = k1;
+      //unsigned int k1bn  = k1 + nxny;
+      //unsigned int k1ts  = k1 + nx;
+      //unsigned int k1tse = k1 + nx;
+      //unsigned int k1bnw = k1 + nxny + 1;
+      //unsigned int k1tnw = k1 + 1;
+      //unsigned int k1bse = k1 + nxny + nx;
+      //unsigned int k1tsw = k1 + nx + 1;
+      //unsigned int k1bne = k1 + nxny;
+      //unsigned int k1tne = k1;
+      //unsigned int k1bsw = k1 + nxny + nx + 1;
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[k1e   ];
+      f1_E    = (D.f[dM00])[k1w   ];
+      f1_S    = (D.f[d0P0])[k1n   ];
+      f1_N    = (D.f[d0M0])[k1s   ];
+      f1_B    = (D.f[d00P])[k1t   ];
+      f1_T    = (D.f[d00M])[k1b   ];
+      f1_SW   = (D.f[dPP0])[k1ne  ];
+      f1_NE   = (D.f[dMM0])[k1sw  ];
+      f1_NW   = (D.f[dPM0])[k1se  ];
+      f1_SE   = (D.f[dMP0])[k1nw  ];
+      f1_BW   = (D.f[dP0P])[k1te  ];
+      f1_TE   = (D.f[dM0M])[k1bw  ];
+      f1_TW   = (D.f[dP0M])[k1be  ];
+      f1_BE   = (D.f[dM0P])[k1tw  ];
+      f1_BS   = (D.f[d0PP])[k1tn  ];
+      f1_TN   = (D.f[d0MM])[k1bs  ];
+      f1_TS   = (D.f[d0PM])[k1bn  ];
+      f1_BN   = (D.f[d0MP])[k1ts  ];
+      f1_ZERO = (D.f[d000])[k1zero];
+      f1_BSW  = (D.f[dPPP])[k1tne ];
+      f1_BNE  = (D.f[dMMP])[k1tsw ];
+      f1_BNW  = (D.f[dPMP])[k1tse ];
+      f1_BSE  = (D.f[dMPP])[k1tnw ];
+      f1_TSW  = (D.f[dPPM])[k1bne ];
+      f1_TNE  = (D.f[dMMM])[k1bsw ];
+      f1_TNW  = (D.f[dPMM])[k1bse ];
+      f1_TSE  = (D.f[dMPM])[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[dP00])[ke   ] = f1_W   -c2o27*drho1;
+      (D.f[dM00])[kw   ] = f1_E   -c2o27*drho1;
+      (D.f[d0P0])[kn   ] = f1_S   -c2o27*drho1;
+      (D.f[d0M0])[ks   ] = f1_N   -c2o27*drho1;
+      (D.f[d00P])[kt   ] = f1_B   -c2o27*drho1;
+      (D.f[d00M])[kb   ] = f1_T   -c2o27*drho1;
+      (D.f[dPP0])[kne  ] = f1_SW  -c1o54*drho1;
+      (D.f[dMM0])[ksw  ] = f1_NE  -c1o54*drho1;
+      (D.f[dPM0])[kse  ] = f1_NW  -c1o54*drho1;
+      (D.f[dMP0])[knw  ] = f1_SE  -c1o54*drho1;
+      (D.f[dP0P])[kte  ] = f1_BW  -c1o54*drho1;
+      (D.f[dM0M])[kbw  ] = f1_TE  -c1o54*drho1;
+      (D.f[dP0M])[kbe  ] = f1_TW  -c1o54*drho1;
+      (D.f[dM0P])[ktw  ] = f1_BE  -c1o54*drho1;
+      (D.f[d0PP])[ktn  ] = f1_BS  -c1o54*drho1;
+      (D.f[d0MM])[kbs  ] = f1_TN  -c1o54*drho1;
+      (D.f[d0PM])[kbn  ] = f1_TS  -c1o54*drho1;
+      (D.f[d0MP])[kts  ] = f1_BN  -c1o54*drho1;
+      (D.f[d000])[kzero] = f1_ZERO-c8o27*drho1;
+      (D.f[dPPP])[ktne ] = f1_BSW -c1o216*drho1;
+      (D.f[dMMP])[ktsw ] = f1_BNE -c1o216*drho1;
+      (D.f[dPMP])[ktse ] = f1_BNW -c1o216*drho1;
+      (D.f[dMPP])[ktnw ] = f1_BSE -c1o216*drho1;
+      (D.f[dPPM])[kbne ] = f1_TSW -c1o216*drho1;
+      (D.f[dMMM])[kbsw ] = f1_TNE -c1o216*drho1;
+      (D.f[dPMM])[kbse ] = f1_TNW -c1o216*drho1;
+      (D.f[dMPM])[kbnw ] = f1_TSE -c1o216*drho1;
+   }
+   __syncthreads();
+}
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDevice27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    real* QQ,
+    unsigned int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   }
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index
+   const unsigned  y = blockIdx.x;   // Globaler y-Index
+   const unsigned  z = blockIdx.y;   // Globaler z-Index
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[kbnw ];
+      ////////////////////////////////////////////////////////////////////////////////
+      real q, vx1, vx2, vx3, drho;
+      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);
+
+
+      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);
+
+      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);
+      //////////////////////////////////////////////////////////////////////////
+      ////////////////////////////////////////////////////////////////////////////////
+      drho = rhoBC[k];
+      //deltaRho = (rhoBC[k] + one) / (deltaRho + one);
+      ////////////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dM00])[kw]=c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+         //(D.f[dP00])[ke]=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dP00])[ke]=c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+         //(D.f[dM00])[kw]=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0M0])[ks]=c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+         //(D.f[d0P0])[kn]=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0P0])[kn]=c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+         //(D.f[d0M0])[ks]=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d00M])[kb]=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+         //(D.f[d00P])[kt]=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d00P])[kt]=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+         //(D.f[d00M])[kb]=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
+      }
+
+      q = q_dirNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMM0])[ksw]=c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+         //(D.f[dPP0])[kne]=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      }
+
+      q = q_dirSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPP0])[kne]=c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+         //(D.f[dMM0])[ksw]=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      }
+
+      q = q_dirSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMP0])[knw]=c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+         //(D.f[dPM0])[kse]=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      }
+
+      q = q_dirNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPM0])[kse]=c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+         //(D.f[dMP0])[knw]=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      }
+
+      q = q_dirTE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dM0M])[kbw]=c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+         //(D.f[dP0P])[kte]=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      }
+
+      q = q_dirBW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dP0P])[kte]=c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+         //(D.f[dM0M])[kbw]=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      }
+
+      q = q_dirBE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dM0P])[ktw]=c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+         //(D.f[dP0M])[kbe]=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      }
+
+      q = q_dirTW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dP0M])[kbe]=c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+         //(D.f[dM0P])[ktw]=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      }
+
+      q = q_dirTN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0MM])[kbs]=c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+         //(D.f[d0PP])[ktn]=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      }
+
+      q = q_dirBS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0PP])[ktn]=c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+         //(D.f[d0MM])[kbs]=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      }
+
+      q = q_dirBN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0MP])[kts]=c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+         //(D.f[d0PM])[kbn]=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      }
+
+      q = q_dirTS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0PM])[kbn]=c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+         //(D.f[d0MP])[kts]=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      }
+
+      q = q_dirTNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMMM])[kbsw]=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+         //(D.f[dPPP])[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[dPPP])[ktne]=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+         //(D.f[dMMM])[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[dMMP])[ktsw]=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+         //(D.f[dPPM])[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[dPPM])[kbne]=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+         //(D.f[dMMP])[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[dMPM])[kbnw]=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+         //(D.f[dPMP])[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[dPMP])[ktse]=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+         //(D.f[dMPM])[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[dMPP])[ktnw]=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+         //(D.f[dPMM])[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[dPMM])[kbse]=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+         //(D.f[dMPP])[ktnw]=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceAntiBB27(
+    real* rhoBC,
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD,
+    int* k_Q,
+    real* QQ,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   }
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index
+   const unsigned  y = blockIdx.x;   // Globaler y-Index
+   const unsigned  z = blockIdx.y;   // Globaler z-Index
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[kbnw ];
+      f_ZERO = (D.f[d000])[kzero];
+      ////////////////////////////////////////////////////////////////////////////////
+      //real vx1, vx2, vx3, drho;
+      //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);
+
+
+      //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);
+
+      //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);
+      //////////////////////////////////////////////////////////////////////////
+      real drho    = f_ZERO+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;
+      drho = drho - rhoBC[k];
+     drho *= 0.01f;
+      ////////////////////////////////////////////////////////////////////////////////
+     real q;
+      //deltaRho = (rhoBC[k] + one) / (deltaRho + one);
+      ////////////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dM00])[kw]=f_W-c2o27*drho;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dP00])[ke]=f_E-c2o27*drho;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0M0])[ks]=f_S-c2o27*drho;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0P0])[kn]=f_N-c2o27*drho;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d00M])[kb]=f_B-c2o27*drho;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d00P])[kt]=f_T-c2o27*drho;
+      }
+
+      q = q_dirNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMM0])[ksw]=f_SW-c1o54*drho;
+      }
+
+      q = q_dirSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPP0])[kne]=f_NE-c1o54*drho;
+      }
+
+      q = q_dirSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMP0])[knw]=f_NW-c1o54*drho;
+      }
+
+      q = q_dirNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPM0])[kse]=f_SE-c1o54*drho;
+      }
+
+      q = q_dirTE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dM0M])[kbw]=f_BW-c1o54*drho;
+      }
+
+      q = q_dirBW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dP0P])[kte]=f_TE-c1o54*drho;
+      }
+
+      q = q_dirBE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dM0P])[ktw]=f_TW-c1o54*drho;
+      }
+
+      q = q_dirTW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dP0M])[kbe]=f_BE-c1o54*drho;
+      }
+
+      q = q_dirTN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0MM])[kbs]=f_BS-c1o54*drho;
+      }
+
+      q = q_dirBS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0PP])[ktn]=f_TN-c1o54*drho;
+      }
+
+      q = q_dirBN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0MP])[kts]=f_TS-c1o54*drho;
+      }
+
+      q = q_dirTS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[d0PM])[kbn]=f_BN-c1o54*drho;
+      }
+
+      q = q_dirTNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMMM])[kbsw]=f_BSW-c1o216*drho;
+      }
+
+      q = q_dirBSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPPP])[ktne]=f_TNE-c1o216*drho;
+      }
+
+      q = q_dirBNE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMMP])[ktsw]=f_TSW-c1o216*drho;
+      }
+
+      q = q_dirTSW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPPM])[kbne]=f_BNE-c1o216*drho;
+      }
+
+      q = q_dirTSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMPM])[kbnw]=f_BNW-c1o216*drho;
+      }
+
+      q = q_dirBNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPMP])[ktse]=f_TSE-c1o216*drho;
+      }
+
+      q = q_dirBSE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dMPP])[ktnw]=f_TNW-c1o216*drho;
+      }
+
+      q = q_dirTNW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         (D.f[dPMM])[kbse]=f_BSE-c1o216*drho;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceFixBackflow27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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 deltaRho;
+      ////////////////////////////////////////////////////////////////////////////////
+      deltaRho = rhoBC[k];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+         (D.f[dM00])[kw]       = c2o27  * deltaRho;
+         (D.f[dP00])[ke]       = c2o27  * deltaRho;
+         (D.f[d0M0])[ks]       = c2o27  * deltaRho;
+         (D.f[d0P0])[kn]       = c2o27  * deltaRho;
+         (D.f[d00M])[kb]       = c2o27  * deltaRho;
+         (D.f[d00P])[kt]       = c2o27  * deltaRho;
+         (D.f[dMM0])[ksw]     = c1o54  * deltaRho;
+         (D.f[dPP0])[kne]     = c1o54  * deltaRho;
+         (D.f[dMP0])[knw]     = c1o54  * deltaRho;
+         (D.f[dPM0])[kse]     = c1o54  * deltaRho;
+         (D.f[dM0M])[kbw]     = c1o54  * deltaRho;
+         (D.f[dP0P])[kte]     = c1o54  * deltaRho;
+         (D.f[dM0P])[ktw]     = c1o54  * deltaRho;
+         (D.f[dP0M])[kbe]     = c1o54  * deltaRho;
+         (D.f[d0MM])[kbs]     = c1o54  * deltaRho;
+         (D.f[d0PP])[ktn]     = c1o54  * deltaRho;
+         (D.f[d0MP])[kts]     = c1o54  * deltaRho;
+         (D.f[d0PM])[kbn]     = c1o54  * deltaRho;
+         (D.f[dMMM])[kbsw]   = c1o216 * deltaRho;
+         (D.f[dPPP])[ktne]   = c1o216 * deltaRho;
+         (D.f[dMMP])[ktsw]   = c1o216 * deltaRho;
+         (D.f[dPPM])[kbne]   = c1o216 * deltaRho;
+         (D.f[dMPM])[kbnw]   = c1o216 * deltaRho;
+         (D.f[dPMP])[ktse]   = c1o216 * deltaRho;
+         (D.f[dMPP])[ktnw]   = c1o216 * deltaRho;
+         (D.f[dPMM])[kbse]   = c1o216 * deltaRho;
+         (D.f[d000])[kzero] = c8o27  * deltaRho;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceDirDepBot27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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 rho;
+      ////////////////////////////////////////////////////////////////////////////////
+      rho = rhoBC[k];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[ke   ];
+      f_W    = (D.f[dM00])[kw   ];
+      f_N    = (D.f[d0P0])[kn   ];
+      f_S    = (D.f[d0M0])[ks   ];
+      f_T    = (D.f[d00P])[kt   ];
+      f_NE   = (D.f[dPP0])[kne  ];
+      f_SW   = (D.f[dMM0])[ksw  ];
+      f_SE   = (D.f[dPM0])[kse  ];
+      f_NW   = (D.f[dMP0])[knw  ];
+      f_TE   = (D.f[dP0P])[kte  ];
+      f_TW   = (D.f[dM0P])[ktw  ];
+      f_TN   = (D.f[d0PP])[ktn  ];
+      f_TS   = (D.f[d0MP])[kts  ];
+      f_ZERO = (D.f[d000])[kzero];
+      f_TNE  = (D.f[dPPP])[ktne ];
+      f_TSW  = (D.f[dMMP])[ktsw ];
+      f_TSE  = (D.f[dPMP])[ktse ];
+      f_TNW  = (D.f[dMPP])[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;
+      //f_BW  = ( two*rho+      f_SW-      four*f_TSW+     f_W-    four*f_TW+      f_NW-      four*f_TNW- two*f_S-    four*f_TS- two*f_ZERO-four*f_T- two*f_N-    four*f_TN- five*f_SE-      four*f_TSE-five*f_E+fourteen*f_TE- five*f_NE-      four*f_TNE)/eighteen;
+      //f_BE  = ( two*rho- five*f_SW-      four*f_TSW-five*f_W+fourteen*f_TW- five*f_NW-      four*f_TNW- two*f_S-    four*f_TS- two*f_ZERO-four*f_T- two*f_N-    four*f_TN+      f_SE-      four*f_TSE+     f_E-    four*f_TE+      f_NE-      four*f_TNE)/eighteen;
+      //f_BS  = ( two*rho+      f_SW-      four*f_TSW- two*f_W-    four*f_TW- five*f_NW-      four*f_TNW+     f_S-    four*f_TS- two*f_ZERO-four*f_T-five*f_N+fourteen*f_TN+      f_SE-      four*f_TSE- two*f_E-    four*f_TE- five*f_NE-      four*f_TNE)/eighteen;
+      //f_BN  = ( two*rho- five*f_SW-      four*f_TSW- two*f_W-    four*f_TW+      f_NW-      four*f_TNW-five*f_S+fourteen*f_TS- two*f_ZERO-four*f_T+     f_N-    four*f_TN- five*f_SE-      four*f_TSE- two*f_E-    four*f_TE+      f_NE-      four*f_TNE)/eighteen;
+      //f_BSW = ( two*rho+ four*f_SW-      four*f_TSW+     f_W-    four*f_TW-  two*f_NW-      four*f_TNW+     f_S-    four*f_TS- two*f_ZERO-four*f_T-five*f_N-    four*f_TN-  two*f_SE-      four*f_TSE-five*f_E-    four*f_TE-eight*f_NE+sixtyeight*f_TNE)/seventytwo;
+      //f_BNE = ( two*rho-eight*f_SW+sixtyeight*f_TSW-five*f_W-    four*f_TW-  two*f_NW-      four*f_TNW-five*f_S-    four*f_TS- two*f_ZERO-four*f_T+     f_N-    four*f_TN-  two*f_SE-      four*f_TSE+     f_E-    four*f_TE+ four*f_NE-      four*f_TNE)/seventytwo;
+      //f_BNW = ( two*rho-  two*f_SW-      four*f_TSW+     f_W-    four*f_TW+ four*f_NW-      four*f_TNW-five*f_S-    four*f_TS- two*f_ZERO-four*f_T+     f_N-    four*f_TN-eight*f_SE+sixtyeight*f_TSE-five*f_E-    four*f_TE-  two*f_NE-      four*f_TNE)/seventytwo;
+      //f_BSE = ( two*rho-  two*f_SW-      four*f_TSW-five*f_W-    four*f_TW-eight*f_NW+sixtyeight*f_TNW+     f_S-    four*f_TS- two*f_ZERO-four*f_T-five*f_N-    four*f_TN+ four*f_SE-      four*f_TSE+     f_E-    four*f_TE-  two*f_NE-      four*f_TNE)/seventytwo;
+
+      //real drho   =    f_ZERO+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;
+      //real vx1     =  (f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW);
+      //real vx2     =  (f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW);
+      //real vx3     =  (f_T -f_B +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);
+
+      //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+      //(D.f[d000])[kzero] = c8over27*  (drho-cusq);
+      //(D.f[dP00])[ke]    = c2over27*  (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);
+      //(D.f[dM00])[kw]    = c2over27*  (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);
+      //(D.f[d0P0])[kn]     = c2over27*  (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
+      //(D.f[d0M0])[ks]    = c2over27*  (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
+      //(D.f[d00P])[kt]    = c2over27*  (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
+      //(D.f[d00M])[kb]    = c2over27*  (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
+      //(D.f[dPP0])[kne]   = c1over54*  (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
+      //(D.f[dMM0])[ksw]   = c1over54*  (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
+      //(D.f[dPM0])[kse]   =  c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
+      //(D.f[dMP0])[knw]   =  c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
+      //(D.f[dP0P])[kte]   =  c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
+      //(D.f[dM0M])[kbw]   =  c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
+      //(D.f[dP0M])[kbe]   =  c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
+      //(D.f[dM0P])[ktw]   =  c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
+      //(D.f[d0PP])[ktn]   =  c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
+      //(D.f[d0MM])[kbs]   =  c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
+      //(D.f[d0PM])[kbn]   =  c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
+      //(D.f[d0MP])[kts]   =  c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
+      //(D.f[dPPP])[ktne]  =  c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
+      //(D.f[dMMM])[kbsw]  =  c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
+      //(D.f[dPPM])[kbne]  =  c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
+      //(D.f[dMMP])[ktsw]  =  c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
+      //(D.f[dPMP])[ktse]  =  c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
+      //(D.f[dMPM])[kbnw]  =  c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
+      //(D.f[dPMM])[kbse]  =  c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
+      //(D.f[dMPP])[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[d00M])[kb]     = (f_T+c2o27)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c2o27;
+      (D.f[dM0M])[kbw]   = (f_TW+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[dP0M])[kbe]   = (f_TE+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[d0MM])[kbs]   = (f_TS+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[d0PM])[kbn]   = (f_TN+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[dMMM])[kbsw] = (f_TSW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[dPPM])[kbne] = (f_TNE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[dMPM])[kbnw] = (f_TNW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[dPMM])[kbse] = (f_TSE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real cs)
+{
+   return f1[dir] * cs + (c1o1 - cs) * f[dir];
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressNoRhoDevice27(
+    real* rhoBC,
+    real* distributions,
+    int* k_Q,
+    int* k_N,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep,
+    int direction)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+
+   if(nodeIndex >= numberOfBCnodes) return;
+
+   ////////////////////////////////////////////////////////////////////////////////
+   //index
+   unsigned int KQK  = k_Q[nodeIndex];
+   // 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];
+   ////////////////////////////////////////////////////////////////////////////////
+   //index1
+   unsigned int K1QK  = k_N[nodeIndex];
+   //unsigned int k1zero= K1QK;
+   unsigned int k1e   = K1QK;
+   unsigned int k1w   = neighborX[K1QK];
+   unsigned int k1n   = K1QK;
+   unsigned int k1s   = neighborY[K1QK];
+   unsigned int k1t   = K1QK;
+   unsigned int k1b   = neighborZ[K1QK];
+   unsigned int k1sw  = neighborY[k1w];
+   unsigned int k1ne  = K1QK;
+   unsigned int k1se  = k1s;
+   unsigned int k1nw  = k1w;
+   unsigned int k1bw  = neighborZ[k1w];
+   unsigned int k1te  = K1QK;
+   unsigned int k1be  = k1b;
+   unsigned int k1tw  = k1w;
+   unsigned int k1bs  = neighborZ[k1s];
+   unsigned int k1tn  = K1QK;
+   unsigned int k1bn  = k1b;
+   unsigned int k1ts  = k1s;
+   unsigned int k1tse = k1s;
+   unsigned int k1bnw = k1bw;
+   unsigned int k1tnw = k1w;
+   unsigned int k1bse = k1bs;
+   unsigned int k1tsw = k1sw;
+   unsigned int k1bne = k1b;
+   unsigned int k1tne = K1QK;
+   unsigned int k1bsw = neighborZ[k1sw];
+   ////////////////////////////////////////////////////////////////////////////////
+   Distributions27 dist;
+   getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+   real f[27], f1[27];
+   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   f1[dP00] = (dist.f[dP00])[k1e   ];
+   f1[dM00] = (dist.f[dM00])[k1w   ];
+   f1[d0P0] = (dist.f[d0P0])[k1n   ];
+   f1[d0M0] = (dist.f[d0M0])[k1s   ];
+   f1[d00P] = (dist.f[d00P])[k1t   ];
+   f1[d00M] = (dist.f[d00M])[k1b   ];
+   f1[dPP0] = (dist.f[dPP0])[k1ne  ];
+   f1[dMM0] = (dist.f[dMM0])[k1sw  ];
+   f1[dPM0] = (dist.f[dPM0])[k1se  ];
+   f1[dMP0] = (dist.f[dMP0])[k1nw  ];
+   f1[dP0P] = (dist.f[dP0P])[k1te  ];
+   f1[dM0M] = (dist.f[dM0M])[k1bw  ];
+   f1[dP0M] = (dist.f[dP0M])[k1be  ];
+   f1[dM0P] = (dist.f[dM0P])[k1tw  ];
+   f1[d0PP] = (dist.f[d0PP])[k1tn  ];
+   f1[d0MM] = (dist.f[d0MM])[k1bs  ];
+   f1[d0PM] = (dist.f[d0PM])[k1bn  ];
+   f1[d0MP] = (dist.f[d0MP])[k1ts  ];
+   // f1[d000] = (dist.f[d000])[k1zero];
+   f1[dPPP] = (dist.f[dPPP])[k1tne ];
+   f1[dMMP] = (dist.f[dMMP])[k1tsw ];
+   f1[dPMP] = (dist.f[dPMP])[k1tse ];
+   f1[dMPP] = (dist.f[dMPP])[k1tnw ];
+   f1[dPPM] = (dist.f[dPPM])[k1bne ];
+   f1[dMMM] = (dist.f[dMMM])[k1bsw ];
+   f1[dPMM] = (dist.f[dPMM])[k1bse ];
+   f1[dMPM] = (dist.f[dMPM])[k1bnw ];
+   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   f[dP00] = (dist.f[dP00])[ke   ];
+   f[dM00] = (dist.f[dM00])[kw   ];
+   f[d0P0] = (dist.f[d0P0])[kn   ];
+   f[d0M0] = (dist.f[d0M0])[ks   ];
+   f[d00P] = (dist.f[d00P])[kt   ];
+   f[d00M] = (dist.f[d00M])[kb   ];
+   f[dPP0] = (dist.f[dPP0])[kne  ];
+   f[dMM0] = (dist.f[dMM0])[ksw  ];
+   f[dPM0] = (dist.f[dPM0])[kse  ];
+   f[dMP0] = (dist.f[dMP0])[knw  ];
+   f[dP0P] = (dist.f[dP0P])[kte  ];
+   f[dM0M] = (dist.f[dM0M])[kbw  ];
+   f[dP0M] = (dist.f[dP0M])[kbe  ];
+   f[dM0P] = (dist.f[dM0P])[ktw  ];
+   f[d0PP] = (dist.f[d0PP])[ktn  ];
+   f[d0MM] = (dist.f[d0MM])[kbs  ];
+   f[d0PM] = (dist.f[d0PM])[kbn  ];
+   f[d0MP] = (dist.f[d0MP])[kts  ];
+   // f[d000] = (dist.f[d000])[kzero];
+   f[dPPP] = (dist.f[dPPP])[ktne ];
+   f[dMMP] = (dist.f[dMMP])[ktsw ];
+   f[dPMP] = (dist.f[dPMP])[ktse ];
+   f[dMPP] = (dist.f[dMPP])[ktnw ];
+   f[dPPM] = (dist.f[dPPM])[kbne ];
+   f[dMMM] = (dist.f[dMMM])[kbsw ];
+   f[dPMM] = (dist.f[dPMM])[kbse ];
+   f[dMPM] = (dist.f[dMPM])[kbnw ];
+   //////////////////////////////////////////////////////////////////////////
+
+
+   real cs = c1o1 / sqrtf(c3o1);
+
+   //////////////////////////////////////////////////////////////////////////
+   getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
+   switch(direction)
+   {
+      case dM00:
+         (dist.f[dP00])[ke   ] = computeOutflowDistribution(f, f1, dP00, cs);
+         (dist.f[dPM0])[kse  ] = computeOutflowDistribution(f, f1, dPM0, cs);
+         (dist.f[dPP0])[kne  ] = computeOutflowDistribution(f, f1, dPP0, cs);
+         (dist.f[dP0M])[kbe  ] = computeOutflowDistribution(f, f1, dP0M, cs);
+         (dist.f[dP0P])[kte  ] = computeOutflowDistribution(f, f1, dP0P, cs);
+         (dist.f[dPMP])[ktse ] = computeOutflowDistribution(f, f1, dPMP, cs);
+         (dist.f[dPPP])[ktne ] = computeOutflowDistribution(f, f1, dPPP, cs);
+         (dist.f[dPMM])[kbse ] = computeOutflowDistribution(f, f1, dPMM, cs);
+         (dist.f[dPPM])[kbne ] = computeOutflowDistribution(f, f1, dPPM, cs);
+         break;
+
+      case dP00:
+         (dist.f[dM00])[kw   ] = computeOutflowDistribution(f, f1, dM00, cs);
+         (dist.f[dMM0])[ksw  ] = computeOutflowDistribution(f, f1, dMM0, cs);
+         (dist.f[dMP0])[knw  ] = computeOutflowDistribution(f, f1, dMP0, cs);
+         (dist.f[dM0M])[kbw  ] = computeOutflowDistribution(f, f1, dM0M, cs);
+         (dist.f[dM0P])[ktw  ] = computeOutflowDistribution(f, f1, dM0P, cs);
+         (dist.f[dMMP])[ktsw ] = computeOutflowDistribution(f, f1, dMMP, cs);
+         (dist.f[dMPP])[ktnw ] = computeOutflowDistribution(f, f1, dMPP, cs);
+         (dist.f[dMMM])[kbsw ] = computeOutflowDistribution(f, f1, dMMM, cs);
+         (dist.f[dMPM])[kbnw ] = computeOutflowDistribution(f, f1, dMPM, cs);
+         break;
+
+      case d0M0:
+         (dist.f[d0P0])[kn   ] = computeOutflowDistribution(f, f1, d0P0, cs);
+         (dist.f[dPP0])[kne  ] = computeOutflowDistribution(f, f1, dPP0, cs);
+         (dist.f[dMP0])[knw  ] = computeOutflowDistribution(f, f1, dMP0, cs);
+         (dist.f[d0PP])[ktn  ] = computeOutflowDistribution(f, f1, d0PP, cs);
+         (dist.f[d0PM])[kbn  ] = computeOutflowDistribution(f, f1, d0PM, cs);
+         (dist.f[dPPP])[ktne ] = computeOutflowDistribution(f, f1, dPPP, cs);
+         (dist.f[dMPP])[ktnw ] = computeOutflowDistribution(f, f1, dMPP, cs);
+         (dist.f[dPPM])[kbne ] = computeOutflowDistribution(f, f1, dPPM, cs);
+         (dist.f[dMPM])[kbnw ] = computeOutflowDistribution(f, f1, dMPM, cs);
+         break;
+
+      case d0P0:
+         (dist.f[d0M0])[ks   ] = computeOutflowDistribution(f, f1, d0M0, cs);
+         (dist.f[dPM0])[kse  ] = computeOutflowDistribution(f, f1, dPM0, cs);
+         (dist.f[dMM0])[ksw  ] = computeOutflowDistribution(f, f1, dMM0, cs);
+         (dist.f[d0MP])[kts  ] = computeOutflowDistribution(f, f1, d0MP, cs);
+         (dist.f[d0MM])[kbs  ] = computeOutflowDistribution(f, f1, d0MM, cs);
+         (dist.f[dPMP])[ktse ] = computeOutflowDistribution(f, f1, dPMP, cs);
+         (dist.f[dMMP])[ktsw ] = computeOutflowDistribution(f, f1, dMMP, cs);
+         (dist.f[dPMM])[kbse ] = computeOutflowDistribution(f, f1, dPMM, cs);
+         (dist.f[dMMM])[kbsw ] = computeOutflowDistribution(f, f1, dMMM, cs);
+         break;
+
+      case d00M:
+         (dist.f[d00P])[kt   ] = computeOutflowDistribution(f, f1, d00P, cs);
+         (dist.f[dP0P])[kte  ] = computeOutflowDistribution(f, f1, dP0P, cs);
+         (dist.f[dM0P])[ktw  ] = computeOutflowDistribution(f, f1, dM0P, cs);
+         (dist.f[d0PP])[ktn  ] = computeOutflowDistribution(f, f1, d0PP, cs);
+         (dist.f[d0MP])[kts  ] = computeOutflowDistribution(f, f1, d0MP, cs);
+         (dist.f[dPPP])[ktne ] = computeOutflowDistribution(f, f1, dPPP, cs);
+         (dist.f[dMPP])[ktnw ] = computeOutflowDistribution(f, f1, dMPP, cs);
+         (dist.f[dPMP])[ktse ] = computeOutflowDistribution(f, f1, dPMP, cs);
+         (dist.f[dMMP])[ktsw ] = computeOutflowDistribution(f, f1, dMMP, cs);
+         break;
+
+      case d00P:
+         (dist.f[d00M])[kb   ] = computeOutflowDistribution(f, f1, d00M, cs);
+         (dist.f[dP0M])[kbe  ] = computeOutflowDistribution(f, f1, dP0M, cs);
+         (dist.f[dM0M])[kbw  ] = computeOutflowDistribution(f, f1, dM0M, cs);
+         (dist.f[d0PM])[kbn  ] = computeOutflowDistribution(f, f1, d0PM, cs);
+         (dist.f[d0MM])[kbs  ] = computeOutflowDistribution(f, f1, d0MM, cs);
+         (dist.f[dPPM])[kbne ] = computeOutflowDistribution(f, f1, dPPM, cs);
+         (dist.f[dMPM])[kbnw ] = computeOutflowDistribution(f, f1, dMPM, cs);
+         (dist.f[dPMM])[kbse ] = computeOutflowDistribution(f, f1, dPMM, cs);
+         (dist.f[dMMM])[kbsw ] = computeOutflowDistribution(f, f1, dMMM, cs);
+         break;
+      default:
+         break;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real rhoCorrection, const real cs, const real weight)
+{
+   return f1[dir  ] * cs + (c1o1 - cs) * f[dir  ] - weight *rhoCorrection;
+}
+
+__global__ void QPressZeroRhoOutflowDevice27(
+    real* rhoBC,
+    real* distributions,
+    int* k_Q,
+    int* k_N,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep,
+    int direction,
+    real densityCorrectionFactor)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+
+   if( nodeIndex >= numberOfBCnodes ) return;
+
+   ////////////////////////////////////////////////////////////////////////////////
+   //index
+
+   uint k_000 = k_Q[nodeIndex];
+   uint k_M00 = neighborX[k_000];
+   uint k_0M0 = neighborY[k_000];
+   uint k_00M = neighborZ[k_000];
+   uint k_MM0 = neighborY[k_M00];
+   uint k_M0M = neighborZ[k_M00];
+   uint k_0MM = neighborZ[k_0M0];
+   uint k_MMM = neighborZ[k_MM0];
+
+   ////////////////////////////////////////////////////////////////////////////////
+   //index of neighbor
+   uint kN_000 = k_N[nodeIndex];
+   uint kN_M00 = neighborX[k_000];
+   uint kN_0M0 = neighborY[k_000];
+   uint kN_00M = neighborZ[k_000];
+   uint kN_MM0 = neighborY[k_M00];
+   uint kN_M0M = neighborZ[k_M00];
+   uint kN_0MM = neighborZ[k_0M0];
+   uint kN_MMM = neighborZ[k_MM0];
+   ////////////////////////////////////////////////////////////////////////////////
+   Distributions27 dist;
+   getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+   real f[27], fN[27];
+   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   f[d000] = (dist.f[d000])[k_000];
+   f[dP00] = (dist.f[dP00])[k_000];
+   f[dM00] = (dist.f[dM00])[k_M00];
+   f[d0P0] = (dist.f[d0P0])[k_000];
+   f[d0M0] = (dist.f[d0M0])[k_0M0];
+   f[d00P] = (dist.f[d00P])[k_000];
+   f[d00M] = (dist.f[d00M])[k_00M];
+   f[dPP0] = (dist.f[dPP0])[k_000];
+   f[dMM0] = (dist.f[dMM0])[k_MM0];
+   f[dPM0] = (dist.f[dPM0])[k_0M0];
+   f[dMP0] = (dist.f[dMP0])[k_M00];
+   f[dP0P] = (dist.f[dP0P])[k_000];
+   f[dM0M] = (dist.f[dM0M])[k_M0M];
+   f[dP0M] = (dist.f[dP0M])[k_00M];
+   f[dM0P] = (dist.f[dM0P])[k_M00];
+   f[d0PP] = (dist.f[d0PP])[k_000];
+   f[d0MM] = (dist.f[d0MM])[k_0MM];
+   f[d0PM] = (dist.f[d0PM])[k_00M];
+   f[d0MP] = (dist.f[d0MP])[k_0M0];
+   f[dPPP] = (dist.f[dPPP])[k_000];
+   f[dMPP] = (dist.f[dMPP])[k_M00];
+   f[dPMP] = (dist.f[dPMP])[k_0M0];
+   f[dMMP] = (dist.f[dMMP])[k_MM0];
+   f[dPPM] = (dist.f[dPPM])[k_00M];
+   f[dMPM] = (dist.f[dMPM])[k_M0M];
+   f[dPMM] = (dist.f[dPMM])[k_0MM];
+   f[dMMM] = (dist.f[dMMM])[k_MMM];
+   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   fN[d000] = (dist.f[d000])[kN_000];
+   fN[dP00] = (dist.f[dP00])[kN_000];
+   fN[dM00] = (dist.f[dM00])[kN_M00];
+   fN[d0P0] = (dist.f[d0P0])[kN_000];
+   fN[d0M0] = (dist.f[d0M0])[kN_0M0];
+   fN[d00P] = (dist.f[d00P])[kN_000];
+   fN[d00M] = (dist.f[d00M])[kN_00M];
+   fN[dPP0] = (dist.f[dPP0])[kN_000];
+   fN[dMM0] = (dist.f[dMM0])[kN_MM0];
+   fN[dPM0] = (dist.f[dPM0])[kN_0M0];
+   fN[dMP0] = (dist.f[dMP0])[kN_M00];
+   fN[dP0P] = (dist.f[dP0P])[kN_000];
+   fN[dM0M] = (dist.f[dM0M])[kN_M0M];
+   fN[dP0M] = (dist.f[dP0M])[kN_00M];
+   fN[dM0P] = (dist.f[dM0P])[kN_M00];
+   fN[d0PP] = (dist.f[d0PP])[kN_000];
+   fN[d0MM] = (dist.f[d0MM])[kN_0MM];
+   fN[d0PM] = (dist.f[d0PM])[kN_00M];
+   fN[d0MP] = (dist.f[d0MP])[kN_0M0];
+   fN[dPPP] = (dist.f[dPPP])[kN_000];
+   fN[dMPP] = (dist.f[dMPP])[kN_M00];
+   fN[dPMP] = (dist.f[dPMP])[kN_0M0];
+   fN[dMMP] = (dist.f[dMMP])[kN_MM0];
+   fN[dPPM] = (dist.f[dPPM])[kN_00M];
+   fN[dMPM] = (dist.f[dMPM])[kN_M0M];
+   fN[dPMM] = (dist.f[dPMM])[kN_0MM];
+   fN[dMMM] = (dist.f[dMMM])[kN_MMM];
+   //////////////////////////////////////////////////////////////////////////
+   real drho = vf::lbm::getDensity(f);
+
+   real rhoCorrection = densityCorrectionFactor*drho;
+
+   real cs = c1o1 / sqrtf(c3o1);
+
+   getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
+
+   switch(direction)
+   {
+      case dM00:
+         (dist.f[dP00])[k_000] = computeOutflowDistribution(f, fN, dP00  , rhoCorrection, cs, c2o27);
+         (dist.f[dPM0])[k_0M0] = computeOutflowDistribution(f, fN, dPM0, rhoCorrection, cs, c1o54);
+         (dist.f[dPP0])[k_000] = computeOutflowDistribution(f, fN, dPP0, rhoCorrection, cs, c1o54);
+         (dist.f[dP0M])[k_00M] = computeOutflowDistribution(f, fN, dP0M, rhoCorrection, cs, c1o54);
+         (dist.f[dP0P])[k_000] = computeOutflowDistribution(f, fN, dP0P, rhoCorrection, cs, c1o54);
+         (dist.f[dPMP])[k_0M0] = computeOutflowDistribution(f, fN, dPMP, rhoCorrection, cs, c1o216);
+         (dist.f[dPPP])[k_000] = computeOutflowDistribution(f, fN, dPPP, rhoCorrection, cs, c1o216);
+         (dist.f[dPMM])[k_0MM] = computeOutflowDistribution(f, fN, dPMM, rhoCorrection, cs, c1o216);
+         (dist.f[dPPM])[k_00M] = computeOutflowDistribution(f, fN, dPPM, rhoCorrection, cs, c1o216);
+         break;
+
+      case dP00:
+         (dist.f[dM00])[k_M00] = computeOutflowDistribution(f, fN, dM00, rhoCorrection, cs, c2o27);
+         (dist.f[dMM0])[k_MM0] = computeOutflowDistribution(f, fN, dMM0, rhoCorrection, cs, c1o54);
+         (dist.f[dMP0])[k_M00] = computeOutflowDistribution(f, fN, dMP0, rhoCorrection, cs, c1o54);
+         (dist.f[dM0M])[k_M0M] = computeOutflowDistribution(f, fN, dM0M, rhoCorrection, cs, c1o54);
+         (dist.f[dM0P])[k_M00] = computeOutflowDistribution(f, fN, dM0P, rhoCorrection, cs, c1o54);
+         (dist.f[dMMP])[k_MM0] = computeOutflowDistribution(f, fN, dMMP, rhoCorrection, cs, c1o216);
+         (dist.f[dMPP])[k_M00] = computeOutflowDistribution(f, fN, dMPP, rhoCorrection, cs, c1o216);
+         (dist.f[dMMM])[k_MMM] = computeOutflowDistribution(f, fN, dMMM, rhoCorrection, cs, c1o216);
+         (dist.f[dMPM])[k_M0M] = computeOutflowDistribution(f, fN, dMPM, rhoCorrection, cs, c1o216);
+         break;
+
+      case d0M0:
+         (dist.f[d0P0])[k_000] = computeOutflowDistribution(f, fN, d0P0, rhoCorrection, cs, c2o27);
+         (dist.f[dPP0])[k_000] = computeOutflowDistribution(f, fN, dPP0, rhoCorrection, cs, c1o54);
+         (dist.f[dMP0])[k_M00] = computeOutflowDistribution(f, fN, dMP0, rhoCorrection, cs, c1o54);
+         (dist.f[d0PP])[k_000] = computeOutflowDistribution(f, fN, d0PP, rhoCorrection, cs, c1o54);
+         (dist.f[d0PM])[k_00M] = computeOutflowDistribution(f, fN, d0PM, rhoCorrection, cs, c1o54);
+         (dist.f[dPPP])[k_000] = computeOutflowDistribution(f, fN, dPPP, rhoCorrection, cs, c1o216);
+         (dist.f[dMPP])[k_M00] = computeOutflowDistribution(f, fN, dMPP, rhoCorrection, cs, c1o216);
+         (dist.f[dPPM])[k_00M] = computeOutflowDistribution(f, fN, dPPM, rhoCorrection, cs, c1o216);
+         (dist.f[dMPM])[k_M0M] = computeOutflowDistribution(f, fN, dMPM, rhoCorrection, cs, c1o216);
+         break;
+
+      case d0P0:
+         (dist.f[d0M0])[k_0M0] =computeOutflowDistribution(f, fN, d0M0, rhoCorrection, cs, c2o27);
+         (dist.f[dPM0])[k_0M0] =computeOutflowDistribution(f, fN, dPM0, rhoCorrection, cs, c1o54);
+         (dist.f[dMM0])[k_MM0] =computeOutflowDistribution(f, fN, dMM0, rhoCorrection, cs, c1o54);
+         (dist.f[d0MP])[k_0M0] =computeOutflowDistribution(f, fN, d0MP, rhoCorrection, cs, c1o54);
+         (dist.f[d0MM])[k_0MM] =computeOutflowDistribution(f, fN, d0MM, rhoCorrection, cs, c1o54);
+         (dist.f[dPMP])[k_0M0] =computeOutflowDistribution(f, fN, dPMP, rhoCorrection, cs, c1o216);
+         (dist.f[dMMP])[k_MM0] =computeOutflowDistribution(f, fN, dMMP, rhoCorrection, cs, c1o216);
+         (dist.f[dPMM])[k_0MM] =computeOutflowDistribution(f, fN, dPMM, rhoCorrection, cs, c1o216);
+         (dist.f[dMMM])[k_MMM] =computeOutflowDistribution(f, fN, dMMM, rhoCorrection, cs, c1o216);
+         break;
+
+      case d00M:
+         (dist.f[d00P])[k_000] = computeOutflowDistribution(f, fN, d00P, rhoCorrection, cs, c2o27);
+         (dist.f[dP0P])[k_000] = computeOutflowDistribution(f, fN, dP0P, rhoCorrection, cs, c1o54);
+         (dist.f[dM0P])[k_M00] = computeOutflowDistribution(f, fN, dM0P, rhoCorrection, cs, c1o54);
+         (dist.f[d0PP])[k_000] = computeOutflowDistribution(f, fN, d0PP, rhoCorrection, cs, c1o54);
+         (dist.f[d0MP])[k_0M0] = computeOutflowDistribution(f, fN, d0MP, rhoCorrection, cs, c1o54);
+         (dist.f[dPPP])[k_000] = computeOutflowDistribution(f, fN, dPPP, rhoCorrection, cs, c1o216);
+         (dist.f[dMPP])[k_M00] = computeOutflowDistribution(f, fN, dMPP, rhoCorrection, cs, c1o216);
+         (dist.f[dPMP])[k_0M0] = computeOutflowDistribution(f, fN, dPMP, rhoCorrection, cs, c1o216);
+         (dist.f[dMMP])[k_MM0] = computeOutflowDistribution(f, fN, dMMP, rhoCorrection, cs, c1o216);
+         break;
+
+      case d00P:
+         (dist.f[d00M])[k_00M] = computeOutflowDistribution(f, fN, d00M, rhoCorrection, cs, c2o27);
+         (dist.f[dP0M])[k_00M] = computeOutflowDistribution(f, fN, dP0M, rhoCorrection, cs, c1o54);
+         (dist.f[dM0M])[k_M0M] = computeOutflowDistribution(f, fN, dM0M, rhoCorrection, cs, c1o54);
+         (dist.f[d0PM])[k_00M] = computeOutflowDistribution(f, fN, d0PM, rhoCorrection, cs, c1o54);
+         (dist.f[d0MM])[k_0MM] = computeOutflowDistribution(f, fN, d0MM, rhoCorrection, cs, c1o54);
+         (dist.f[dPPM])[k_00M] = computeOutflowDistribution(f, fN, dPPM, rhoCorrection, cs, c1o216);
+         (dist.f[dMPM])[k_M0M] = computeOutflowDistribution(f, fN, dMPM, rhoCorrection, cs, c1o216);
+         (dist.f[dPMM])[k_0MM] = computeOutflowDistribution(f, fN, dPMM, rhoCorrection, cs, c1o216);
+         (dist.f[dMMM])[k_MMM] = computeOutflowDistribution(f, fN, dMMM, rhoCorrection, cs, c1o216);
+         break;
+      default:
+         break;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceOld27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int* k_N,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int K1QK  = k_N[k];
+      unsigned int k1zero= K1QK;
+      unsigned int k1e   = K1QK;
+      unsigned int k1w   = neighborX[K1QK];
+      unsigned int k1n   = K1QK;
+      unsigned int k1s   = neighborY[K1QK];
+      unsigned int k1t   = K1QK;
+      unsigned int k1b   = neighborZ[K1QK];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = K1QK;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = K1QK;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = K1QK;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = K1QK;
+      unsigned int k1bsw = neighborZ[k1sw];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[k1e   ];
+      f1_E    = (D.f[dM00])[k1w   ];
+      f1_S    = (D.f[d0P0])[k1n   ];
+      f1_N    = (D.f[d0M0])[k1s   ];
+      f1_B    = (D.f[d00P])[k1t   ];
+      f1_T    = (D.f[d00M])[k1b   ];
+      f1_SW   = (D.f[dPP0])[k1ne  ];
+      f1_NE   = (D.f[dMM0])[k1sw  ];
+      f1_NW   = (D.f[dPM0])[k1se  ];
+      f1_SE   = (D.f[dMP0])[k1nw  ];
+      f1_BW   = (D.f[dP0P])[k1te  ];
+      f1_TE   = (D.f[dM0M])[k1bw  ];
+      f1_TW   = (D.f[dP0M])[k1be  ];
+      f1_BE   = (D.f[dM0P])[k1tw  ];
+      f1_BS   = (D.f[d0PP])[k1tn  ];
+      f1_TN   = (D.f[d0MM])[k1bs  ];
+      f1_TS   = (D.f[d0PM])[k1bn  ];
+      f1_BN   = (D.f[d0MP])[k1ts  ];
+      f1_ZERO = (D.f[d000])[k1zero];
+      f1_BSW  = (D.f[dPPP])[k1tne ];
+      f1_BNE  = (D.f[dMMP])[k1tsw ];
+      f1_BNW  = (D.f[dPMP])[k1tse ];
+      f1_BSE  = (D.f[dMPP])[k1tnw ];
+      f1_TSW  = (D.f[dPPM])[k1bne ];
+      f1_TNE  = (D.f[dMMM])[k1bsw ];
+      f1_TNW  = (D.f[dPMM])[k1bse ];
+      f1_TSE  = (D.f[dMPM])[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;
+
+     //drho1 = (drho1 + rhoBC[k])/2.f;
+     drho1 = drho1 - rhoBC[k];
+      //////////////////////////////////////////////////////////////////////////
+
+      __syncthreads();
+
+      (D.f[dP00])[ke   ] = f1_W   -c2o27*drho1;   //  c1o100;  // zero;  //
+      (D.f[dM00])[kw   ] = f1_E   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0P0])[kn   ] = f1_S   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0M0])[ks   ] = f1_N   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[d00P])[kt   ] = f1_B   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[d00M])[kb   ] = f1_T   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPP0])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMM0])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPM0])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMP0])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dP0P])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dM0M])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dP0M])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dM0P])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0PP])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0MM])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0PM])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0MP])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d000])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPPP])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMMP])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPMP])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMPP])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPPM])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMMM])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPMM])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMPM])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceEQZ27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int* k_N,
+    real* kTestRE,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int K1QK  = k_N[k];
+      unsigned int k1zero= K1QK;
+      unsigned int k1e   = K1QK;
+      unsigned int k1w   = neighborX[K1QK];
+      unsigned int k1n   = K1QK;
+      unsigned int k1s   = neighborY[K1QK];
+      unsigned int k1t   = K1QK;
+      unsigned int k1b   = neighborZ[K1QK];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = K1QK;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = K1QK;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = K1QK;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = K1QK;
+      unsigned int k1bsw = neighborZ[k1sw];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////
+    //   Distributions27 kDistTest;
+    //      kDistTest.f[dP00] = &kTestRE[dP00 * numberOfBCnodes];
+    //      kDistTest.f[dM00] = &kTestRE[dM00 * numberOfBCnodes];
+    //      kDistTest.f[d0P0] = &kTestRE[d0P0 * numberOfBCnodes];
+    //      kDistTest.f[d0M0] = &kTestRE[d0M0 * numberOfBCnodes];
+    //      kDistTest.f[d00P] = &kTestRE[d00P * numberOfBCnodes];
+    //      kDistTest.f[d00M] = &kTestRE[d00M * numberOfBCnodes];
+    //      kDistTest.f[dPP0] = &kTestRE[dPP0 * numberOfBCnodes];
+    //      kDistTest.f[dMM0] = &kTestRE[dMM0 * numberOfBCnodes];
+    //      kDistTest.f[dPM0] = &kTestRE[dPM0 * numberOfBCnodes];
+    //      kDistTest.f[dMP0] = &kTestRE[dMP0 * numberOfBCnodes];
+    //      kDistTest.f[dP0P] = &kTestRE[dP0P * numberOfBCnodes];
+    //      kDistTest.f[dM0M] = &kTestRE[dM0M * numberOfBCnodes];
+    //      kDistTest.f[dP0M] = &kTestRE[dP0M * numberOfBCnodes];
+    //      kDistTest.f[dM0P] = &kTestRE[dM0P * numberOfBCnodes];
+    //      kDistTest.f[d0PP] = &kTestRE[d0PP * numberOfBCnodes];
+    //      kDistTest.f[d0MM] = &kTestRE[d0MM * numberOfBCnodes];
+    //      kDistTest.f[d0PM] = &kTestRE[d0PM * numberOfBCnodes];
+    //      kDistTest.f[d0MP] = &kTestRE[d0MP * numberOfBCnodes];
+    //      kDistTest.f[d000] = &kTestRE[d000 * numberOfBCnodes];
+    //      kDistTest.f[dPPP] = &kTestRE[dPPP * numberOfBCnodes];
+    //      kDistTest.f[dMMP] = &kTestRE[dMMP * numberOfBCnodes];
+    //      kDistTest.f[dPMP] = &kTestRE[dPMP * numberOfBCnodes];
+    //      kDistTest.f[dMPP] = &kTestRE[dMPP * numberOfBCnodes];
+    //      kDistTest.f[dPPM] = &kTestRE[dPPM * numberOfBCnodes];
+    //      kDistTest.f[dMMM] = &kTestRE[dMMM * numberOfBCnodes];
+    //      kDistTest.f[dPMM] = &kTestRE[dPMM * numberOfBCnodes];
+    //      kDistTest.f[dMPM] = &kTestRE[dMPM * 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[dP00])[k1e   ];
+   //   //f1_E    = (D.f[dM00])[k1w   ];
+   //   //f1_S    = (D.f[d0P0])[k1n   ];
+   //   //f1_N    = (D.f[d0M0])[k1s   ];
+   //   //f1_B    = (D.f[d00P])[k1t   ];
+   //   //f1_T    = (D.f[d00M])[k1b   ];
+   //   //f1_SW   = (D.f[dPP0])[k1ne  ];
+   //   //f1_NE   = (D.f[dMM0])[k1sw  ];
+   //   //f1_NW   = (D.f[dPM0])[k1se  ];
+   //   //f1_SE   = (D.f[dMP0])[k1nw  ];
+   //   //f1_BW   = (D.f[dP0P])[k1te  ];
+   //   //f1_TE   = (D.f[dM0M])[k1bw  ];
+   //   //f1_TW   = (D.f[dP0M])[k1be  ];
+   //   //f1_BE   = (D.f[dM0P])[k1tw  ];
+   //   //f1_BS   = (D.f[d0PP])[k1tn  ];
+   //   //f1_TN   = (D.f[d0MM])[k1bs  ];
+   //   //f1_TS   = (D.f[d0PM])[k1bn  ];
+   //   //f1_BN   = (D.f[d0MP])[k1ts  ];
+   //   //f1_ZERO = (D.f[d000])[k1zero];
+   //   //f1_BSW  = (D.f[dPPP])[k1tne ];
+   //   //f1_BNE  = (D.f[dMMP])[k1tsw ];
+   //   //f1_BNW  = (D.f[dPMP])[k1tse ];
+   //   //f1_BSE  = (D.f[dMPP])[k1tnw ];
+   //   //f1_TSW  = (D.f[dPPM])[k1bne ];
+   //   //f1_TNE  = (D.f[dMMM])[k1bsw ];
+   //   //f1_TNW  = (D.f[dPMM])[k1bse ];
+   //   //f1_TSE  = (D.f[dMPM])[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[dP00])[k1e   ];
+   //   f1_W    = (D.f[dM00])[k1w   ];
+   //   f1_N    = (D.f[d0P0])[k1n   ];
+   //   f1_S    = (D.f[d0M0])[k1s   ];
+   //   f1_T    = (D.f[d00P])[k1t   ];
+   //   f1_B    = (D.f[d00M])[k1b   ];
+   //   f1_NE   = (D.f[dPP0])[k1ne  ];
+   //   f1_SW   = (D.f[dMM0])[k1sw  ];
+   //   f1_SE   = (D.f[dPM0])[k1se  ];
+   //   f1_NW   = (D.f[dMP0])[k1nw  ];
+   //   f1_TE   = (D.f[dP0P])[k1te  ];
+   //   f1_BW   = (D.f[dM0M])[k1bw  ];
+   //   f1_BE   = (D.f[dP0M])[k1be  ];
+   //   f1_TW   = (D.f[dM0P])[k1tw  ];
+   //   f1_TN   = (D.f[d0PP])[k1tn  ];
+   //   f1_BS   = (D.f[d0MM])[k1bs  ];
+   //   f1_BN   = (D.f[d0PM])[k1bn  ];
+   //   f1_TS   = (D.f[d0MP])[k1ts  ];
+   //   f1_ZERO = (D.f[d000])[k1zero];
+   //   f1_TNE  = (D.f[dPPP])[k1tne ];
+   //   f1_TSW  = (D.f[dMMP])[k1tsw ];
+   //   f1_TSE  = (D.f[dPMP])[k1tse ];
+   //   f1_TNW  = (D.f[dMPP])[k1tnw ];
+   //   f1_BNE  = (D.f[dPPM])[k1bne ];
+   //   f1_BSW  = (D.f[dMMM])[k1bsw ];
+   //   f1_BSE  = (D.f[dPMM])[k1bse ];
+   //   f1_BNW  = (D.f[dMPM])[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_TNE-f1_BSW)+(f1_BSE-f1_TNW)+(f1_BNE-f1_TSW)+(f1_TSE-f1_BNW)) + (((f1_NE-f1_SW)+(f1_TE-f1_BW))+((f1_SE-f1_NW)+(f1_BE-f1_TW))) + (f1_E-f1_W)) / (one + drho1);
+     //real vx2      = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_BNE-f1_TSW)+(f1_BNW-f1_TSE)) + (((f1_NE-f1_SW)+(f1_TN-f1_BS))+((f1_BN-f1_TS)+(f1_NW-f1_SE))) + (f1_N-f1_S)) / (one + drho1);
+     //real vx3      = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_TSW-f1_BNE)+(f1_TSE-f1_BNW)) + (((f1_TE-f1_BW)+(f1_TN-f1_BS))+((f1_TW-f1_BE)+(f1_TS-f1_BN))) + (f1_T-f1_B)) / (one + drho1);
+   //   //////////////////////////////////////////////////////////////////////////
+     ////real omega = om1;
+   //   real cusq  = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+   //   //////////////////////////////////////////////////////////////////////////
+     ////T�st MK
+     ////if(vx1 < zero) vx1 = zero;
+   //   //////////////////////////////////////////////////////////////////////////
+     ////becomes higher with neighbor source and lower with local source
+   //   //real fZERO = c8over27*  (rhoBC[k]-(one + rhoBC[k])*(cusq))                                                           ;
+   //   //real fE    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq));
+   //   //real fW    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq));
+   //   //real fN    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq));
+   //   //real fS    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq));
+   //   //real fT    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq));
+   //   //real fB    = c2over27*  (rhoBC[k]+(one + rhoBC[k])*(three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq));
+   //   //real fNE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq));
+   //   //real fSW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq));
+   //   //real fSE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq));
+   //   //real fNW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq));
+   //   //real fTE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq));
+   //   //real fBW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq));
+   //   //real fBE   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq));
+   //   //real fTW   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq));
+   //   //real fTN   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq));
+   //   //real fBS   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq));
+   //   //real fBN   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq));
+   //   //real fTS   = c1over54*  (rhoBC[k]+(one + rhoBC[k])*(three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq));
+   //   //real fTNE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq));
+   //   //real fBSW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq));
+   //   //real fBNE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq));
+   //   //real fTSW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq));
+   //   //real fTSE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq));
+   //   //real fBNW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
+   //   //real fBSE  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
+   //   //real fTNW  = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
+   //   //////////////////////////////////////////////////////////////////////////
+     //// based on VirtualFluids (kucher + fard)
+   //   real fZERO = c8over27  * rhoBC[k] * (one                                                                      - cusq);
+   //   real fE    = c2over27  * rhoBC[k] * (one + three * ( vx1        ) + c9over2 * ( vx1        ) * ( vx1        ) - cusq);
+   //   real fW    = c2over27  * rhoBC[k] * (one + three * (-vx1        ) + c9over2 * (-vx1        ) * (-vx1        ) - cusq);
+   //   real fN    = c2over27  * rhoBC[k] * (one + three * (     vx2    ) + c9over2 * (     vx2    ) * (     vx2    ) - cusq);
+   //   real fS    = c2over27  * rhoBC[k] * (one + three * (    -vx2    ) + c9over2 * (    -vx2    ) * (    -vx2    ) - cusq);
+   //   real fT    = c2over27  * rhoBC[k] * (one + three * (         vx3) + c9over2 * (         vx3) * (         vx3) - cusq);
+   //   real fB    = c2over27  * rhoBC[k] * (one + three * (        -vx3) + c9over2 * (        -vx3) * (        -vx3) - cusq);
+   //   real fNE   = c1over54  * rhoBC[k] * (one + three * ( vx1+vx2    ) + c9over2 * ( vx1+vx2    ) * ( vx1+vx2    ) - cusq);
+   //   real fSW   = c1over54  * rhoBC[k] * (one + three * (-vx1-vx2    ) + c9over2 * (-vx1-vx2    ) * (-vx1-vx2    ) - cusq);
+   //   real fSE   = c1over54  * rhoBC[k] * (one + three * ( vx1-vx2    ) + c9over2 * ( vx1-vx2    ) * ( vx1-vx2    ) - cusq);
+   //   real fNW   = c1over54  * rhoBC[k] * (one + three * (-vx1+vx2    ) + c9over2 * (-vx1+vx2    ) * (-vx1+vx2    ) - cusq);
+   //   real fTE   = c1over54  * rhoBC[k] * (one + three * ( vx1    +vx3) + c9over2 * ( vx1    +vx3) * ( vx1    +vx3) - cusq);
+   //   real fBW   = c1over54  * rhoBC[k] * (one + three * (-vx1    -vx3) + c9over2 * (-vx1    -vx3) * (-vx1    -vx3) - cusq);
+   //   real fBE   = c1over54  * rhoBC[k] * (one + three * ( vx1    -vx3) + c9over2 * ( vx1    -vx3) * ( vx1    -vx3) - cusq);
+   //   real fTW   = c1over54  * rhoBC[k] * (one + three * (-vx1    +vx3) + c9over2 * (-vx1    +vx3) * (-vx1    +vx3) - cusq);
+   //   real fTN   = c1over54  * rhoBC[k] * (one + three * (     vx2+vx3) + c9over2 * (     vx2+vx3) * (     vx2+vx3) - cusq);
+   //   real fBS   = c1over54  * rhoBC[k] * (one + three * (    -vx2-vx3) + c9over2 * (    -vx2-vx3) * (    -vx2-vx3) - cusq);
+   //   real fBN   = c1over54  * rhoBC[k] * (one + three * (     vx2-vx3) + c9over2 * (     vx2-vx3) * (     vx2-vx3) - cusq);
+   //   real fTS   = c1over54  * rhoBC[k] * (one + three * (    -vx2+vx3) + c9over2 * (    -vx2+vx3) * (    -vx2+vx3) - cusq);
+   //   real fTNE  = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq);
+   //   real fBSW  = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq);
+   //   real fBNE  = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq);
+   //   real fTSW  = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq);
+   //   real fTSE  = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq);
+   //   real fBNW  = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq);
+   //   real fBSE  = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq);
+   //   real fTNW  = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq);
+   ////   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+     //////test
+   ////   real fZERO = c8over27  * ((drho1 + rhoBC[k]) / two) * (one                                                                      - cusq);
+   ////   real fE    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1        ) + c9over2 * ( vx1        ) * ( vx1        ) - cusq);
+   ////   real fW    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1        ) + c9over2 * (-vx1        ) * (-vx1        ) - cusq);
+   ////   real fN    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (     vx2    ) + c9over2 * (     vx2    ) * (     vx2    ) - cusq);
+   ////   real fS    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (    -vx2    ) + c9over2 * (    -vx2    ) * (    -vx2    ) - cusq);
+   ////   real fT    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (         vx3) + c9over2 * (         vx3) * (         vx3) - cusq);
+   ////   real fB    = c2over27  * ((drho1 + rhoBC[k]) / two) * (one + three * (        -vx3) + c9over2 * (        -vx3) * (        -vx3) - cusq);
+   ////   real fNE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2    ) + c9over2 * ( vx1+vx2    ) * ( vx1+vx2    ) - cusq);
+   ////   real fSW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2    ) + c9over2 * (-vx1-vx2    ) * (-vx1-vx2    ) - cusq);
+   ////   real fSE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2    ) + c9over2 * ( vx1-vx2    ) * ( vx1-vx2    ) - cusq);
+   ////   real fNW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2    ) + c9over2 * (-vx1+vx2    ) * (-vx1+vx2    ) - cusq);
+   ////   real fTE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1    +vx3) + c9over2 * ( vx1    +vx3) * ( vx1    +vx3) - cusq);
+   ////   real fBW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1    -vx3) + c9over2 * (-vx1    -vx3) * (-vx1    -vx3) - cusq);
+   ////   real fBE   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1    -vx3) + c9over2 * ( vx1    -vx3) * ( vx1    -vx3) - cusq);
+   ////   real fTW   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1    +vx3) + c9over2 * (-vx1    +vx3) * (-vx1    +vx3) - cusq);
+   ////   real fTN   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (     vx2+vx3) + c9over2 * (     vx2+vx3) * (     vx2+vx3) - cusq);
+   ////   real fBS   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (    -vx2-vx3) + c9over2 * (    -vx2-vx3) * (    -vx2-vx3) - cusq);
+   ////   real fBN   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (     vx2-vx3) + c9over2 * (     vx2-vx3) * (     vx2-vx3) - cusq);
+   ////   real fTS   = c1over54  * ((drho1 + rhoBC[k]) / two) * (one + three * (    -vx2+vx3) + c9over2 * (    -vx2+vx3) * (    -vx2+vx3) - cusq);
+   ////   real fTNE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq);
+   ////   real fBSW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq);
+   ////   real fBNE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq);
+   ////   real fTSW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq);
+   ////   real fTSE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq);
+   ////   real fBNW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq);
+   ////   real fBSE  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq);
+   ////   real fTNW  = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq);
+
+         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+            // based on BGK Plus Comp
+         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+         //double mfabb = (D.f[dP00])[k1e   ];
+         //double mfcbb = (D.f[dM00])[k1w   ];
+         //double mfbab = (D.f[d0P0])[k1n   ];
+         //double mfbcb = (D.f[d0M0])[k1s   ];
+         //double mfbba = (D.f[d00P])[k1t   ];
+         //double mfbbc = (D.f[d00M])[k1b   ];
+         //double mfaab = (D.f[dPP0])[k1ne  ];
+         //double mfccb = (D.f[dMM0])[k1sw  ];
+         //double mfacb = (D.f[dPM0])[k1se  ];
+         //double mfcab = (D.f[dMP0])[k1nw  ];
+         //double mfaba = (D.f[dP0P])[k1te  ];
+         //double mfcbc = (D.f[dM0M])[k1bw  ];
+         //double mfabc = (D.f[dP0M])[k1be  ];
+         //double mfcba = (D.f[dM0P])[k1tw  ];
+         //double mfbaa = (D.f[d0PP])[k1tn  ];
+         //double mfbcc = (D.f[d0MM])[k1bs  ];
+         //double mfbac = (D.f[d0PM])[k1bn  ];
+         //double mfbca = (D.f[d0MP])[k1ts  ];
+         //double mfbbb = (D.f[d000])[k1zero];
+         //double mfaaa = (D.f[dPPP])[k1tne ];
+         //double mfcca = (D.f[dMMP])[k1tsw ];
+         //double mfaca = (D.f[dPMP])[k1tse ];
+         //double mfcaa = (D.f[dMPP])[k1tnw ];
+         //double mfaac = (D.f[dPPM])[k1bne ];
+         //double mfccc = (D.f[dMMM])[k1bsw ];
+         //double mfacc = (D.f[dPMM])[k1bse ];
+         //double mfcac = (D.f[dMPM])[k1bnw ];
+         real mfabb = (D.f[dP00])[k1e   ];
+         real mfcbb = (D.f[dM00])[k1w   ];
+         real mfbab = (D.f[d0P0])[k1n   ];
+         real mfbcb = (D.f[d0M0])[k1s   ];
+         real mfbba = (D.f[d00P])[k1t   ];
+         real mfbbc = (D.f[d00M])[k1b   ];
+         real mfaab = (D.f[dPP0])[k1ne  ];
+         real mfccb = (D.f[dMM0])[k1sw  ];
+         real mfacb = (D.f[dPM0])[k1se  ];
+         real mfcab = (D.f[dMP0])[k1nw  ];
+         real mfaba = (D.f[dP0P])[k1te  ];
+         real mfcbc = (D.f[dM0M])[k1bw  ];
+         real mfabc = (D.f[dP0M])[k1be  ];
+         real mfcba = (D.f[dM0P])[k1tw  ];
+         real mfbaa = (D.f[d0PP])[k1tn  ];
+         real mfbcc = (D.f[d0MM])[k1bs  ];
+         real mfbac = (D.f[d0PM])[k1bn  ];
+         real mfbca = (D.f[d0MP])[k1ts  ];
+         real mfbbb = (D.f[d000])[k1zero];
+         real mfaaa = (D.f[dPPP])[k1tne ];
+         real mfcca = (D.f[dMMP])[k1tsw ];
+         real mfaca = (D.f[dPMP])[k1tse ];
+         real mfcaa = (D.f[dMPP])[k1tnw ];
+         real mfaac = (D.f[dPPM])[k1bne ];
+         real mfccc = (D.f[dMMM])[k1bsw ];
+         real mfacc = (D.f[dPMM])[k1bse ];
+         real mfcac = (D.f[dMPM])[k1bnw ];
+
+         //real mfcbb = (D.f[dP00])[ke   ];
+         //real mfabb = (D.f[dM00])[kw   ];
+         //real mfbcb = (D.f[d0P0])[kn   ];
+         //real mfbab = (D.f[d0M0])[ks   ];
+         //real mfbbc = (D.f[d00P])[kt   ];
+         //real mfbba = (D.f[d00M])[kb   ];
+         //real mfccb = (D.f[dPP0])[kne  ];
+         //real mfaab = (D.f[dMM0])[ksw  ];
+         //real mfcab = (D.f[dPM0])[kse  ];
+         //real mfacb = (D.f[dMP0])[knw  ];
+         //real mfcbc = (D.f[dP0P])[kte  ];
+         //real mfaba = (D.f[dM0M])[kbw  ];
+         //real mfcba = (D.f[dP0M])[kbe  ];
+         //real mfabc = (D.f[dM0P])[ktw  ];
+         //real mfbcc = (D.f[d0PP])[ktn  ];
+         //real mfbaa = (D.f[d0MM])[kbs  ];
+         //real mfbca = (D.f[d0PM])[kbn  ];
+         //real mfbac = (D.f[d0MP])[kts  ];
+         //real mfbbb = (D.f[d000])[kzero];
+         //real mfccc = (D.f[dPPP])[ktne ];
+         //real mfaac = (D.f[dMMP])[ktsw ];
+         //real mfcac = (D.f[dPMP])[ktse ];
+         //real mfacc = (D.f[dMPP])[ktnw ];
+         //real mfcca = (D.f[dPPM])[kbne ];
+         //real mfaaa = (D.f[dMMM])[kbsw ];
+         //real mfcaa = (D.f[dPMM])[kbse ];
+         //real mfaca = (D.f[dMPM])[kbnw ];
+         ////////////////////////////////////////////////////////////////////////////////////
+         //real rho   = (((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) +
+         //				(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
+         //				((mfabb+mfcbb) + (mfbab+mfbcb)) + (mfbba+mfbbc)) + mfbbb) + one;//!!!!Achtung + one
+         ////////////////////////////////////////////////////////////////////////////////////
+         real rho = rhoBC[k];
+         ////////////////////////////////////////////////////////////////////////////////////
+         real OoRho = c1o1 / (rho * 1.5f);
+         ////////////////////////////////////////////////////////////////////////////////////
+         real vvx    = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) +
+                       (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
+                         (mfcbb-mfabb)) * OoRho;
+         real vvy    =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) +
+                         (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
+                           (mfbcb-mfbab)) * OoRho;
+         real vvz    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) +
+                         (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
+                           (mfbbc-mfbba)) * OoRho;
+         /////////////////////////
+         //Test Values
+         //double vvx    = 0.016;
+         //double vvy    = zero;
+         //double vvz    = zero;
+         ////////////////////////////////////////////////////////////////////////////////////////
+         ////round off error test
+         //if(vvx!=zero){
+         //	(kDistTest.f[dP00])[k] = mfabb;
+         //	(kDistTest.f[dM00])[k] = mfcbb;
+         //	(kDistTest.f[d0P0])[k] = mfbab;
+         //	(kDistTest.f[d0M0])[k] = mfbcb;
+         //	(kDistTest.f[d00P])[k] = mfbba;
+         //	(kDistTest.f[d00M])[k] = mfbbc;
+         //	(kDistTest.f[dPP0])[k] = mfaab;
+         //	(kDistTest.f[dMM0])[k] = mfccb;
+         //	(kDistTest.f[dPM0])[k] = mfacb;
+         //	(kDistTest.f[dMP0])[k] = mfcab;
+         //	(kDistTest.f[dP0P])[k] = mfaba;
+         //	(kDistTest.f[dM0M])[k] = mfcbc;
+         //	(kDistTest.f[dP0M])[k] = mfabc;
+         //	(kDistTest.f[dM0P])[k] = mfcba;
+         //	(kDistTest.f[d0PP])[k] = mfbaa;
+         //	(kDistTest.f[d0MM])[k] = mfbcc;
+         //	(kDistTest.f[d0PM])[k] = mfbac;
+         //	(kDistTest.f[d0MP])[k] = mfbca;
+         //	(kDistTest.f[d000])[k] = KQK;
+         //	(kDistTest.f[dPPP])[k] = mfaaa;
+         //	(kDistTest.f[dMMP])[k] = mfcca;
+         //	(kDistTest.f[dPMP])[k] = mfaca;
+         //	(kDistTest.f[dMPP])[k] = mfcaa;
+         //	(kDistTest.f[dPPM])[k] = mfaac;
+         //	(kDistTest.f[dMMM])[k] = mfccc;
+         //	(kDistTest.f[dPMM])[k] = mfacc;
+         //	(kDistTest.f[dMPM])[k] = mfcac;
+         //}else{
+         //	(kDistTest.f[dP00])[k] = zero;
+         //	(kDistTest.f[dM00])[k] = zero;
+         //	(kDistTest.f[d0P0])[k] = zero;
+         //	(kDistTest.f[d0M0])[k] = zero;
+         //	(kDistTest.f[d00P])[k] = zero;
+         //	(kDistTest.f[d00M])[k] = zero;
+         //	(kDistTest.f[dPP0])[k] = zero;
+         //	(kDistTest.f[dMM0])[k] = zero;
+         //	(kDistTest.f[dPM0])[k] = zero;
+         //	(kDistTest.f[dMP0])[k] = zero;
+         //	(kDistTest.f[dP0P])[k] = zero;
+         //	(kDistTest.f[dM0M])[k] = zero;
+         //	(kDistTest.f[dP0M])[k] = zero;
+         //	(kDistTest.f[dM0P])[k] = zero;
+         //	(kDistTest.f[d0PP])[k] = zero;
+         //	(kDistTest.f[d0MM])[k] = zero;
+         //	(kDistTest.f[d0PM])[k] = zero;
+         //	(kDistTest.f[d0MP])[k] = zero;
+         //	(kDistTest.f[d000])[k] = zero;
+         //	(kDistTest.f[dPPP])[k] = zero;
+         //	(kDistTest.f[dMMP])[k] = zero;
+         //	(kDistTest.f[dPMP])[k] = zero;
+         //	(kDistTest.f[dMPP])[k] = zero;
+         //	(kDistTest.f[dPPM])[k] = zero;
+         //	(kDistTest.f[dMMM])[k] = zero;
+         //	(kDistTest.f[dPMM])[k] = zero;
+         //	(kDistTest.f[dMPM])[k] = zero;
+         //}
+
+         //////////////////////////////////////////////////////////////////////////////////////
+         //// first bad fix for negative x velocity
+         ////if(vvx > zero) vvx = zero;
+         //////////////////////////////////////////////////////////////////////////////////////
+         ////// second bad fix for negative x velocity
+         ////if(vvx > zero){
+         ////	vvx = -vvx;
+         ////	vvy = -vvy;
+         ////	vvz = -vvz;
+         ////}
+         ////////////////////////////////////////////////////////////////////////////////////
+         double vx2    = vvx * vvx;
+         double vy2    = vvy * vvy;
+         double vz2    = vvz * vvz;
+         //////////////////////////////////////////////////////////////////////////////////
+         //original
+            real XXb    = -c2o3 + vx2;
+            real XXc    = -c1o2 * (XXb + c1o1 + vvx);
+            real XXa    = XXc + vvx;
+            real YYb    = -c2o3 + vy2;
+            real YYc    = -c1o2 * (YYb + c1o1 + vvy);
+            real YYa    = YYc + vvy;
+            real ZZb    = -c2o3 + vz2;
+            real ZZc    = -c1o2 * (ZZb + c1o1 + vvz);
+            real ZZa    = ZZc + vvz;
+         //////////////////////////////////////////////////////////////////////////////////
+         //unkonditioniert
+            mfcbb = -(rhoBC[k] + c1o1) * XXc * YYb * ZZb - c2o27;
+         mfabb = -(rhoBC[k] + c1o1) * XXa * YYb * ZZb - c2o27;
+         mfbcb = -(rhoBC[k] + c1o1) * XXb * YYc * ZZb - c2o27;
+         mfbab = -(rhoBC[k] + c1o1) * XXb * YYa * ZZb - c2o27;
+         mfbbc = -(rhoBC[k] + c1o1) * XXb * YYb * ZZc - c2o27;
+         mfbba = -(rhoBC[k] + c1o1) * XXb * YYb * ZZa - c2o27;
+         mfccb = -(rhoBC[k] + c1o1) * XXc * YYc * ZZb - c1o54;
+         mfaab = -(rhoBC[k] + c1o1) * XXa * YYa * ZZb - c1o54;
+         mfcab = -(rhoBC[k] + c1o1) * XXc * YYa * ZZb - c1o54;
+         mfacb = -(rhoBC[k] + c1o1) * XXa * YYc * ZZb - c1o54;
+         mfcbc = -(rhoBC[k] + c1o1) * XXc * YYb * ZZc - c1o54;
+         mfaba = -(rhoBC[k] + c1o1) * XXa * YYb * ZZa - c1o54;
+         mfcba = -(rhoBC[k] + c1o1) * XXc * YYb * ZZa - c1o54;
+         mfabc = -(rhoBC[k] + c1o1) * XXa * YYb * ZZc - c1o54;
+         mfbcc = -(rhoBC[k] + c1o1) * XXb * YYc * ZZc - c1o54;
+         mfbaa = -(rhoBC[k] + c1o1) * XXb * YYa * ZZa - c1o54;
+         mfbca = -(rhoBC[k] + c1o1) * XXb * YYc * ZZa - c1o54;
+         mfbac = -(rhoBC[k] + c1o1) * XXb * YYa * ZZc - c1o54;
+         mfbbb = -(rhoBC[k] + c1o1) * XXb * YYb * ZZb - c8o27;
+         mfccc = -(rhoBC[k] + c1o1) * XXc * YYc * ZZc - c1o216;
+         mfaac = -(rhoBC[k] + c1o1) * XXa * YYa * ZZc - c1o216;
+         mfcac = -(rhoBC[k] + c1o1) * XXc * YYa * ZZc - c1o216;
+         mfacc = -(rhoBC[k] + c1o1) * XXa * YYc * ZZc - c1o216;
+         mfcca = -(rhoBC[k] + c1o1) * XXc * YYc * ZZa - c1o216;
+         mfaaa = -(rhoBC[k] + c1o1) * XXa * YYa * ZZa - c1o216;
+         mfcaa = -(rhoBC[k] + c1o1) * XXc * YYa * ZZa - c1o216;
+         mfaca = -(rhoBC[k] + c1o1) * XXa * YYc * ZZa - c1o216;
+         //////////////////////////////////////////////////////////
+         ////konditioniert
+         //double OneOver216RhoPlusOne = c1over216*(rhoBC[k]+one);
+         //double OnoOver216Rho        = c1over216*rhoBC[k];
+         //mfcbb = OnoOver216Rho*sixteen + OneOver216RhoPlusOne*twelve*(-(two*vy2) - two*vz2 + three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-two + three*vy2)*(-two + three*vz2));
+         //mfabb = OnoOver216Rho*sixteen - OneOver216RhoPlusOne*twelve*(two*vy2 + two*vz2 - three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-four + six*vy2 + six*vz2 - nine*vy2*vz2));
+         //mfbcb = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(one + three*vvy + three*vy2)*(-two + three*vz2));
+         //mfbab = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvy*(-two + three*vx2)*(-two + three*vz2) - one*vx2*(one + three*vy2)*(-two + three*vz2) + two*(-(two*vy2) + vz2 + three*vy2*vz2)));
+         //mfbbc = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(-two + three*vy2)*(one + three*vvz + three*vz2));
+         //mfbba = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz*(-two + three*vx2)*(-two + three*vy2) - one*vx2*(-two + three*vy2)*(one + three*vz2) + two*(vy2 - two*vz2 + three*vy2*vz2)));
+         //mfccb = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2))));
+         //mfaab = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2))));
+         //mfcab = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2)));
+         //mfacb = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2)));
+         //mfcbc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2))));
+         //mfaba = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2))));
+         //mfcba = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2)));
+         //mfabc = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2)));
+         //mfbcc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2))));
+         //mfbaa = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2))));
+         //mfbca = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2)));
+         //mfbac = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2)));
+         //mfbbb = eight*(eight*OnoOver216Rho + OneOver216RhoPlusOne*three*(four*vy2 + four*vz2 - six*vy2*vz2 + vx2*(-two + three*vy2)*(-two + three*vz2)));
+         //mfccc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2));
+         //mfaac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2));
+         //mfcac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2));
+         //mfacc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2));
+         //mfcca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2));
+         //mfaaa = OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz - one*vx2 + three*vvz*vx2 - one*vy2 + three*vvz*vy2 - three*vx2*vy2 + nine*vvz*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2));
+         //mfcaa = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2));
+         //mfaca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2));
+
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //if (isEvenTimestep==true)
+      //{
+      //   D.f[dP00] = &DD[dP00 * size_Mat];
+      //   D.f[dM00] = &DD[dM00 * size_Mat];
+      //   D.f[d0P0] = &DD[d0P0 * size_Mat];
+      //   D.f[d0M0] = &DD[d0M0 * size_Mat];
+      //   D.f[d00P] = &DD[d00P * size_Mat];
+      //   D.f[d00M] = &DD[d00M * size_Mat];
+      //   D.f[dPP0] = &DD[dPP0 * size_Mat];
+      //   D.f[dMM0] = &DD[dMM0 * size_Mat];
+      //   D.f[dPM0] = &DD[dPM0 * size_Mat];
+      //   D.f[dMP0] = &DD[dMP0 * size_Mat];
+      //   D.f[dP0P] = &DD[dP0P * size_Mat];
+      //   D.f[dM0M] = &DD[dM0M * size_Mat];
+      //   D.f[dP0M] = &DD[dP0M * size_Mat];
+      //   D.f[dM0P] = &DD[dM0P * size_Mat];
+      //   D.f[d0PP] = &DD[d0PP * size_Mat];
+      //   D.f[d0MM] = &DD[d0MM * size_Mat];
+      //   D.f[d0PM] = &DD[d0PM * size_Mat];
+      //   D.f[d0MP] = &DD[d0MP * size_Mat];
+      //   D.f[d000] = &DD[d000 * size_Mat];
+      //   D.f[dPPP] = &DD[dPPP * size_Mat];
+      //   D.f[dMMP] = &DD[dMMP * size_Mat];
+      //   D.f[dPMP] = &DD[dPMP * size_Mat];
+      //   D.f[dMPP] = &DD[dMPP * size_Mat];
+      //   D.f[dPPM] = &DD[dPPM * size_Mat];
+      //   D.f[dMMM] = &DD[dMMM * size_Mat];
+      //   D.f[dPMM] = &DD[dPMM * size_Mat];
+      //   D.f[dMPM] = &DD[dMPM * size_Mat];
+      //}
+      //else
+      //{
+      //   D.f[dM00] = &DD[dP00 * size_Mat];
+      //   D.f[dP00] = &DD[dM00 * size_Mat];
+      //   D.f[d0M0] = &DD[d0P0 * size_Mat];
+      //   D.f[d0P0] = &DD[d0M0 * size_Mat];
+      //   D.f[d00M] = &DD[d00P * size_Mat];
+      //   D.f[d00P] = &DD[d00M * size_Mat];
+      //   D.f[dMM0] = &DD[dPP0 * size_Mat];
+      //   D.f[dPP0] = &DD[dMM0 * size_Mat];
+      //   D.f[dMP0] = &DD[dPM0 * size_Mat];
+      //   D.f[dPM0] = &DD[dMP0 * size_Mat];
+      //   D.f[dM0M] = &DD[dP0P * size_Mat];
+      //   D.f[dP0P] = &DD[dM0M * size_Mat];
+      //   D.f[dM0P] = &DD[dP0M * size_Mat];
+      //   D.f[dP0M] = &DD[dM0P * size_Mat];
+      //   D.f[d0MM] = &DD[d0PP * size_Mat];
+      //   D.f[d0PP] = &DD[d0MM * size_Mat];
+      //   D.f[d0MP] = &DD[d0PM * size_Mat];
+      //   D.f[d0PM] = &DD[d0MP * size_Mat];
+      //   D.f[d000] = &DD[d000 * size_Mat];
+      //   D.f[dPPP] = &DD[dMMM * size_Mat];
+      //   D.f[dMMP] = &DD[dPPM * size_Mat];
+      //   D.f[dPMP] = &DD[dMPM * size_Mat];
+      //   D.f[dMPP] = &DD[dPMM * size_Mat];
+      //   D.f[dPPM] = &DD[dMMP * size_Mat];
+      //   D.f[dMMM] = &DD[dPPP * size_Mat];
+      //   D.f[dPMM] = &DD[dMPP * size_Mat];
+      //   D.f[dMPM] = &DD[dPMP * size_Mat];
+      //}
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //__syncthreads();
+
+         (D.f[dP00])[ke   ] = mfabb;//mfcbb;
+         (D.f[dM00])[kw   ] = mfcbb;//mfabb;
+         (D.f[d0P0])[kn   ] = mfbab;//mfbcb;
+         (D.f[d0M0])[ks   ] = mfbcb;//mfbab;
+         (D.f[d00P])[kt   ] = mfbba;//mfbbc;
+         (D.f[d00M])[kb   ] = mfbbc;//mfbba;
+         (D.f[dPP0])[kne  ] = mfaab;//mfccb;
+         (D.f[dMM0])[ksw  ] = mfccb;//mfaab;
+         (D.f[dPM0])[kse  ] = mfacb;//mfcab;
+         (D.f[dMP0])[knw  ] = mfcab;//mfacb;
+         (D.f[dP0P])[kte  ] = mfaba;//mfcbc;
+         (D.f[dM0M])[kbw  ] = mfcbc;//mfaba;
+         (D.f[dP0M])[kbe  ] = mfabc;//mfcba;
+         (D.f[dM0P])[ktw  ] = mfcba;//mfabc;
+         (D.f[d0PP])[ktn  ] = mfbaa;//mfbcc;
+         (D.f[d0MM])[kbs  ] = mfbcc;//mfbaa;
+         (D.f[d0PM])[kbn  ] = mfbac;//mfbca;
+         (D.f[d0MP])[kts  ] = mfbca;//mfbac;
+         (D.f[d000])[kzero] = mfbbb;//mfbbb;
+         (D.f[dPPP])[ktne ] = mfaaa;//mfccc;
+         (D.f[dMMP])[ktsw ] = mfcca;//mfaac;
+         (D.f[dPMP])[ktse ] = mfaca;//mfcac;
+         (D.f[dMPP])[ktnw ] = mfcaa;//mfacc;
+         (D.f[dPPM])[kbne ] = mfaac;//mfcca;
+         (D.f[dMMM])[kbsw ] = mfccc;//mfaaa;
+         (D.f[dPMM])[kbse ] = mfacc;//mfcaa;
+         (D.f[dMPM])[kbnw ] = mfcac;//mfaca;
+         //(D.f[dP00])[ke   ] = mfcbb;
+         //(D.f[dM00])[kw   ] = mfabb;
+         //(D.f[d0P0])[kn   ] = mfbcb;
+         //(D.f[d0M0])[ks   ] = mfbab;
+         //(D.f[d00P])[kt   ] = mfbbc;
+         //(D.f[d00M])[kb   ] = mfbba;
+         //(D.f[dPP0])[kne  ] = mfccb;
+         //(D.f[dMM0])[ksw  ] = mfaab;
+         //(D.f[dPM0])[kse  ] = mfcab;
+         //(D.f[dMP0])[knw  ] = mfacb;
+         //(D.f[dP0P])[kte  ] = mfcbc;
+         //(D.f[dM0M])[kbw  ] = mfaba;
+         //(D.f[dP0M])[kbe  ] = mfcba;
+         //(D.f[dM0P])[ktw  ] = mfabc;
+         //(D.f[d0PP])[ktn  ] = mfbcc;
+         //(D.f[d0MM])[kbs  ] = mfbaa;
+         //(D.f[d0PM])[kbn  ] = mfbca;
+         //(D.f[d0MP])[kts  ] = mfbac;
+         //(D.f[d000])[kzero] = mfbbb;
+         //(D.f[dPPP])[ktne ] = mfccc;
+         //(D.f[dMMP])[ktsw ] = mfaac;
+         //(D.f[dPMP])[ktse ] = mfcac;
+         //(D.f[dMPP])[ktnw ] = mfacc;
+         //(D.f[dPPM])[kbne ] = mfcca;
+         //(D.f[dMMM])[kbsw ] = mfaaa;
+         //(D.f[dPMM])[kbse ] = mfcaa;
+         //(D.f[dMPM])[kbnw ] = mfaca;
+
+      //(D.f[dP00])[ke   ] = fE ;  //f1_E ;   //fW;    //fE ;
+      //(D.f[dM00])[kw   ] = fW ;  //f1_W ;   //fE;    //fW ;
+      //(D.f[d0P0])[kn   ] = fN ;  //f1_N ;   //fS;    //fN ;
+      //(D.f[d0M0])[ks   ] = fS ;  //f1_S ;   //fN;    //fS ;
+      //(D.f[d00P])[kt   ] = fT ;  //f1_T ;   //fB;    //fT ;
+      //(D.f[d00M])[kb   ] = fB ;  //f1_B ;   //fT;    //fB ;
+      //(D.f[dPP0])[kne  ] = fNE;  //f1_NE;   //fSW;   //fNE;
+      //(D.f[dMM0])[ksw  ] = fSW;  //f1_SW;   //fNE;   //fSW;
+      //(D.f[dPM0])[kse  ] = fSE;  //f1_SE;   //fNW;   //fSE;
+      //(D.f[dMP0])[knw  ] = fNW;  //f1_NW;   //fSE;   //fNW;
+      //(D.f[dP0P])[kte  ] = fTE;  //f1_TE;   //fBW;   //fTE;
+      //(D.f[dM0M])[kbw  ] = fBW;  //f1_BW;   //fTE;   //fBW;
+      //(D.f[dP0M])[kbe  ] = fBE;  //f1_BE;   //fTW;   //fBE;
+      //(D.f[dM0P])[ktw  ] = fTW;  //f1_TW;   //fBE;   //fTW;
+      //(D.f[d0PP])[ktn  ] = fTN;  //f1_TN;   //fBS;   //fTN;
+      //(D.f[d0MM])[kbs  ] = fBS;  //f1_BS;   //fTN;   //fBS;
+      //(D.f[d0PM])[kbn  ] = fBN;  //f1_BN;   //fTS;   //fBN;
+      //(D.f[d0MP])[kts  ] = fTS;  //f1_TS;   //fBN;   //fTS;
+      //(D.f[d000])[kzero] = fZERO;//f1_ZERO; //fZERO; //fZERO;
+      //(D.f[dPPP])[ktne ] = fTNE; //f1_TNE;  //fBSW;  //fTNE;
+      //(D.f[dMMM])[kbsw ] = fBSW; //f1_BSW;  //fTNE;  //fBSW;
+      //(D.f[dPPM])[kbne ] = fBNE; //f1_BNE;  //fTSW;  //fBNE;
+      //(D.f[dMMP])[ktsw ] = fTSW; //f1_TSW;  //fBNE;  //fTSW;
+      //(D.f[dPMP])[ktse ] = fTSE; //f1_TSE;  //fBNW;  //fTSE;
+      //(D.f[dMPM])[kbnw ] = fBNW; //f1_BNW;  //fTSE;  //fBNW;
+      //(D.f[dPMM])[kbse ] = fBSE; //f1_BSE;  //fTNW;  //fBSE;
+      //(D.f[dMPP])[ktnw ] = fTNW; //f1_TNW;  //fBSE;  //fTNW;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceZero27(
+    real* DD,
+    int* k_Q,
+    unsigned int numberOfBCnodes,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //__syncthreads();
+     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      (D.f[dP00])[ke   ] =c0o1;
+      (D.f[dM00])[kw   ] =c0o1;
+      (D.f[d0P0])[kn   ] =c0o1;
+      (D.f[d0M0])[ks   ] =c0o1;
+      (D.f[d00P])[kt   ] =c0o1;
+      (D.f[d00M])[kb   ] =c0o1;
+      (D.f[dPP0])[kne  ] =c0o1;
+      (D.f[dMM0])[ksw  ] =c0o1;
+      (D.f[dPM0])[kse  ] =c0o1;
+      (D.f[dMP0])[knw  ] =c0o1;
+      (D.f[dP0P])[kte  ] =c0o1;
+      (D.f[dM0M])[kbw  ] =c0o1;
+      (D.f[dP0M])[kbe  ] =c0o1;
+      (D.f[dM0P])[ktw  ] =c0o1;
+      (D.f[d0PP])[ktn  ] =c0o1;
+      (D.f[d0MM])[kbs  ] =c0o1;
+      (D.f[d0PM])[kbn  ] =c0o1;
+      (D.f[d0MP])[kts  ] =c0o1;
+      (D.f[d000])[kzero] =c0o1;
+      (D.f[dPPP])[ktne ] =c0o1;
+      (D.f[dMMP])[ktsw ] =c0o1;
+      (D.f[dPMP])[ktse ] =c0o1;
+      (D.f[dMPP])[ktnw ] =c0o1;
+      (D.f[dPPM])[kbne ] =c0o1;
+      (D.f[dMMM])[kbsw ] =c0o1;
+      (D.f[dPMM])[kbse ] =c0o1;
+      (D.f[dMPM])[kbnw ] =c0o1;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QPressDeviceFake27(
+    real* rhoBC,
+    real* DD,
+    int* k_Q,
+    int* k_N,
+    int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int K1QK  = k_N[k];
+      unsigned int k1zero= K1QK;
+      unsigned int k1e   = K1QK;
+      unsigned int k1w   = neighborX[K1QK];
+      unsigned int k1n   = K1QK;
+      unsigned int k1s   = neighborY[K1QK];
+      unsigned int k1t   = K1QK;
+      unsigned int k1b   = neighborZ[K1QK];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = K1QK;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = K1QK;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = K1QK;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = K1QK;
+      unsigned int k1bsw = neighborZ[k1sw];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[k1e   ];
+      f1_E    = (D.f[dM00])[k1w   ];
+      f1_S    = (D.f[d0P0])[k1n   ];
+      f1_N    = (D.f[d0M0])[k1s   ];
+      f1_B    = (D.f[d00P])[k1t   ];
+      f1_T    = (D.f[d00M])[k1b   ];
+      f1_SW   = (D.f[dPP0])[k1ne  ];
+      f1_NE   = (D.f[dMM0])[k1sw  ];
+      f1_NW   = (D.f[dPM0])[k1se  ];
+      f1_SE   = (D.f[dMP0])[k1nw  ];
+      f1_BW   = (D.f[dP0P])[k1te  ];
+      f1_TE   = (D.f[dM0M])[k1bw  ];
+      f1_TW   = (D.f[dP0M])[k1be  ];
+      f1_BE   = (D.f[dM0P])[k1tw  ];
+      f1_BS   = (D.f[d0PP])[k1tn  ];
+      f1_TN   = (D.f[d0MM])[k1bs  ];
+      f1_TS   = (D.f[d0PM])[k1bn  ];
+      f1_BN   = (D.f[d0MP])[k1ts  ];
+      f1_ZERO = (D.f[d000])[k1zero];
+      f1_BSW  = (D.f[dPPP])[k1tne ];
+      f1_BNE  = (D.f[dMMP])[k1tsw ];
+      f1_BNW  = (D.f[dPMP])[k1tse ];
+      f1_BSE  = (D.f[dMPP])[k1tnw ];
+      f1_TSW  = (D.f[dPPM])[k1bne ];
+      f1_TNE  = (D.f[dMMM])[k1bsw ];
+      f1_TNW  = (D.f[dPMM])[k1bse ];
+      f1_TSE  = (D.f[dMPM])[k1bnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      real vx1, vx2, vx3;
+      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);
+
+
+      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);
+
+      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      //////////////////////////////////////////////////////////////////////////
+      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;
+
+     //drho1 = (drho1 + rhoBC[k])/2.f;
+     drho1 = drho1 - rhoBC[k];
+
+      __syncthreads();
+
+      (D.f[dP00])[ke   ] = c2o27* (rhoBC[k]+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      (D.f[dM00])[kw   ] = c2o27* (rhoBC[k]+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      (D.f[d0P0])[kn   ] = c2o27* (rhoBC[k]+c3o1*(    -vx2    )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      (D.f[d0M0])[ks   ] = c2o27* (rhoBC[k]+c3o1*(     vx2    )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      (D.f[d00P])[kt   ] = c2o27* (rhoBC[k]+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      (D.f[d00M])[kb   ] = c2o27* (rhoBC[k]+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      (D.f[dPP0])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMM0])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPM0])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMP0])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dP0P])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dM0M])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dP0M])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[dM0P])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0PP])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0MM])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0PM])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d0MP])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[d000])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPPP])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMMP])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPMP])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMPP])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPPM])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMMM])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dPMM])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[dMPM])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////
+__global__ void QPressDevice27_IntBB(
+    real* rho,
+    real* DD,
+    int* k_Q,
+    real* QQ,
+    unsigned int numberOfBCnodes,
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   }
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index
+   const unsigned  y = blockIdx.x;   // Globaler y-Index
+   const unsigned  z = blockIdx.y;   // Globaler z-Index
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k < numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      //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)
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[d000])[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);
+
+
+      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      real rhoDiff = drho - rho[k];
+      real VeloX = vx1;
+      real VeloY = vx2;
+      real VeloZ = vx3;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho+c9o2*( vx1        )*( vx1        )-cu_sq);
+         (D.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[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/core/GPU/Random.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/Random.cu
rename to src/gpu/core/GPU/Random.cu
diff --git a/src/gpu/core/GPU/SchlafferBCs27.cu b/src/gpu/core/GPU/SchlafferBCs27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..b031d25bd252b8405b75c0f07afe07a16ce93ee2
--- /dev/null
+++ b/src/gpu/core/GPU/SchlafferBCs27.cu
@@ -0,0 +1,590 @@
+/* Device code */
+#include "LBM/LB.h"
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void PressSchlaff27(real* rhoBC,
+                                          real* DD,
+                                          real* vx0,
+                                          real* vy0,
+                                          real* vz0,
+                                          real* deltaVz0,
+                                          int* k_Q,
+                                          int* k_N,
+                                          int numberOfBCnodes,
+                                          real om1,
+                                          unsigned int* neighborX,
+                                          unsigned int* neighborY,
+                                          unsigned int* neighborZ,
+                                          unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[ke   ];
+      f1_W    = (D.f[dM00])[kw   ];
+      f1_N    = (D.f[d0P0])[kn   ];
+      f1_S    = (D.f[d0M0])[ks   ];
+      f1_T    = (D.f[d00P])[kt   ];
+      f1_B    = (D.f[d00M])[kb   ];
+      f1_NE   = (D.f[dPP0])[kne  ];
+      f1_SW   = (D.f[dMM0])[ksw  ];
+      f1_SE   = (D.f[dPM0])[kse  ];
+      f1_NW   = (D.f[dMP0])[knw  ];
+      f1_TE   = (D.f[dP0P])[kte  ];
+      f1_BW   = (D.f[dM0M])[kbw  ];
+      f1_BE   = (D.f[dP0M])[kbe  ];
+      f1_TW   = (D.f[dM0P])[ktw  ];
+      f1_TN   = (D.f[d0PP])[ktn  ];
+      f1_BS   = (D.f[d0MM])[kbs  ];
+      f1_BN   = (D.f[d0PM])[kbn  ];
+      f1_TS   = (D.f[d0MP])[kts  ];
+      f1_ZERO = (D.f[d000])[kzero];
+      f1_TNE  = (D.f[dPPP])[ktne ];
+      f1_TSW  = (D.f[dMMP])[ktsw ];
+      f1_TSE  = (D.f[dPMP])[ktse ];
+      f1_TNW  = (D.f[dMPP])[ktnw ];
+      f1_BNE  = (D.f[dPPM])[kbne ];
+      f1_BSW  = (D.f[dMMM])[kbsw ];
+      f1_BSE  = (D.f[dPMM])[kbse ];
+      f1_BNW  = (D.f[dMPM])[kbnw ];
+      //////////////////////////////////////////////////////////////////////////
+      real cs       = c1o1/sqrt(c3o1);
+      real csp1     = cs + c1o1;
+      real csp1Sq  = (c1o1 + cs)*(c1o1 + cs);
+      real relFac   = c21o20; // 0.9...1.0
+      //////////////////////////////////////////////////////////////////////////
+      // For adaption:
+      //     Pressure limits with rho0 = 1:
+      //      2.2e-10 ~  0.94 dB
+      //      6.2e-10 ~   9.9 dB
+      //      6.2e-9  ~  29.9 dB
+      //      2.0e-7  ~  60.1 dB   /Vel
+      //      2.0e-5  ~ 100.1 dB   /press
+      const double dPlimit  = c0p0000002;
+      const double dRlimit  = dPlimit * c3o1;// three = c1oCs2;
+      const double uSlimit  = dRlimit * c1o1;// one = c1oRho0;
+      //////////////////////////////////////////////////////////////////////////
+      real VX = vx0[k];
+      real VY = vy0[k];
+      real VZ = vz0[k];
+      //////////////////////////////////////////////////////////////////////////
+
+      real temp = c2o1*(f1_TNE + f1_TSE + f1_TSW + f1_TNW) + c2o1*(f1_TE + f1_TW + f1_TN + f1_TS) + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*f1_T + f1_E + f1_W + f1_N + f1_S + f1_ZERO;
+
+      real vs_z = relFac * (VZ+cs) * ( csp1 - sqrt(csp1Sq + c2o1*VZ - c2o1*temp) );    //old =  relFac * cs * ( csp1 - sqrt(csp1Sq + two*VZ - two*temp) );
+
+      // 3. Compute density of compensated velocity:
+      real tempDeltaV = deltaVz0[k];
+      real rholoc = temp - c1o1 * (VZ + tempDeltaV + vs_z);
+
+      // 4. Compute density deviation:
+      real drho = rholoc - rhoBC[k];
+
+      // 5. Adapt Speed:
+      real dv = tempDeltaV + vs_z;
+
+      if( drho > dRlimit) {
+         VZ += dv + uSlimit;
+         tempDeltaV += uSlimit;
+      }
+      else if( drho < -dRlimit) {
+         VZ += dv - uSlimit;
+         tempDeltaV -= uSlimit;
+      }
+      else {
+         VZ += dv + drho;
+         tempDeltaV += drho;
+      }
+
+      //VZ = vz0[k] + vs_z;
+      // 6. Set unknown distributions:
+      f1_B   = f1_T   - c4o9  * VZ;
+      f1_BW  = f1_TE  - c1o9  * (VX + VZ);
+      f1_BE  = f1_TW  + c1o9  * (VX - VZ);
+      f1_BS  = f1_TN  - c1o9  * (VY + VZ);
+      f1_BN  = f1_TS  + c1o9  * (VY - VZ);
+      f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ);
+      f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ);
+      f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ);
+      f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ);
+
+      deltaVz0[k] = tempDeltaV;
+
+      (D.f[d00M])[kb   ] = f1_B   ;
+      (D.f[dM0M])[kbw  ] = f1_BW  ;
+      (D.f[dP0M])[kbe  ] = f1_BE  ;
+      (D.f[d0MM])[kbs  ] = f1_BS  ;
+      (D.f[d0PM])[kbn  ] = f1_BN  ;
+      (D.f[dPPM])[kbne ] = f1_BNE ;
+      (D.f[dMMM])[kbsw ] = f1_BSW ;
+      (D.f[dPMM])[kbse ] = f1_BSE ;
+      (D.f[dMPM])[kbnw ] = f1_BNW ;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void VelSchlaff27(  int t,
+                                          real* DD,
+                                          real* vz0,
+                                          real* deltaVz0,
+                                          int* k_Q,
+                                          int* k_N,
+                                          int numberOfBCnodes,
+                                          real om1,
+                                          unsigned int* neighborX,
+                                          unsigned int* neighborY,
+                                          unsigned int* neighborZ,
+                                          unsigned long long 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
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      }
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[ke   ];
+      f1_W    = (D.f[dM00])[kw   ];
+      f1_N    = (D.f[d0P0])[kn   ];
+      f1_S    = (D.f[d0M0])[ks   ];
+      f1_T    = (D.f[d00P])[kt   ];
+      f1_B    = (D.f[d00M])[kb   ];
+      f1_NE   = (D.f[dPP0])[kne  ];
+      f1_SW   = (D.f[dMM0])[ksw  ];
+      f1_SE   = (D.f[dPM0])[kse  ];
+      f1_NW   = (D.f[dMP0])[knw  ];
+      f1_TE   = (D.f[dP0P])[kte  ];
+      f1_BW   = (D.f[dM0M])[kbw  ];
+      f1_BE   = (D.f[dP0M])[kbe  ];
+      f1_TW   = (D.f[dM0P])[ktw  ];
+      f1_TN   = (D.f[d0PP])[ktn  ];
+      f1_BS   = (D.f[d0MM])[kbs  ];
+      f1_BN   = (D.f[d0PM])[kbn  ];
+      f1_TS   = (D.f[d0MP])[kts  ];
+      f1_ZERO = (D.f[d000])[kzero];
+      f1_TNE  = (D.f[dPPP])[ktne ];
+      f1_TSW  = (D.f[dMMP])[ktsw ];
+      f1_TSE  = (D.f[dPMP])[ktse ];
+      f1_TNW  = (D.f[dMPP])[ktnw ];
+      f1_BNE  = (D.f[dPPM])[kbne ];
+      f1_BSW  = (D.f[dMMM])[kbsw ];
+      f1_BSE  = (D.f[dPMM])[kbse ];
+      f1_BNW  = (D.f[dMPM])[kbnw ];
+      //f1_W    = (D.f[dP00])[ke   ];
+      //f1_E    = (D.f[dM00])[kw   ];
+      //f1_S    = (D.f[d0P0])[kn   ];
+      //f1_N    = (D.f[d0M0])[ks   ];
+      //f1_B    = (D.f[d00P])[kt   ];
+      //f1_T    = (D.f[d00M])[kb   ];
+      //f1_SW   = (D.f[dPP0])[kne  ];
+      //f1_NE   = (D.f[dMM0])[ksw  ];
+      //f1_NW   = (D.f[dPM0])[kse  ];
+      //f1_SE   = (D.f[dMP0])[knw  ];
+      //f1_BW   = (D.f[dP0P])[kte  ];
+      //f1_TE   = (D.f[dM0M])[kbw  ];
+      //f1_TW   = (D.f[dP0M])[kbe  ];
+      //f1_BE   = (D.f[dM0P])[ktw  ];
+      //f1_BS   = (D.f[d0PP])[ktn  ];
+      //f1_TN   = (D.f[d0MM])[kbs  ];
+      //f1_TS   = (D.f[d0PM])[kbn  ];
+      //f1_BN   = (D.f[d0MP])[kts  ];
+      //f1_ZERO = (D.f[d000])[kzero];
+      //f1_BSW  = (D.f[dPPP])[ktne ];
+      //f1_BNE  = (D.f[dMMP])[ktsw ];
+      //f1_BNW  = (D.f[dPMP])[ktse ];
+      //f1_BSE  = (D.f[dMPP])[ktnw ];
+      //f1_TSW  = (D.f[dPPM])[kbne ];
+      //f1_TNE  = (D.f[dMMM])[kbsw ];
+      //f1_TNW  = (D.f[dPMM])[kbse ];
+      //f1_TSE  = (D.f[dMPM])[kbnw ];
+      //////////////////////////////////////////////////////////////////////////
+      real cs       = c1o1/sqrt(c3o1);
+      real csp1     = cs + c1o1;
+      real csp1Sq  = (c1o1 + cs)*(c1o1 + cs);
+      real relFac   = c19o20; // 0.9...1.0
+      //////////////////////////////////////////////////////////////////////////
+      // For adaption:
+      //     Pressure limits with rho0 = 1:
+      //      2.2e-10 ~  0.94 dB
+      //      6.2e-10 ~   9.9 dB
+      //      6.2e-9  ~  29.9 dB
+      //      2.0e-7  ~  60.1 dB   /Vel
+      //      2.0e-5  ~ 100.1 dB   /press
+      real uSlimit  = c0p0000002;
+      //////////////////////////////////////////////////////////////////////////
+      real VX = c0o1;
+      real VY = c0o1;
+      real VZ = vz0[k];
+      //////////////////////////////////////////////////////////////////////////
+      real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*(f1_B + f1_BE + f1_BW + f1_BN + f1_BS + f1_BNE + f1_BSE + f1_BSW + f1_BNW);
+      //real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + two*(f1_T + f1_TE + f1_TW + f1_TN + f1_TS + f1_TNE + f1_TSE + f1_TSW + f1_TNW);
+      ////real temp2= c1mcsSq + two*VZ - two*temp;
+      real vs_z;
+      //if (t < 5)
+      //{
+      //   vs_z = zero;
+      //}
+      //else
+      //{
+         vs_z = relFac * (cs-VZ) * ( sqrt(csp1Sq - c2o1*VZ - c2o1*temp) - csp1 );         //old = relFac * cs * ( sqrt(csp1Sq - two*VZ - two*temp) - csp1 );
+      //}
+
+      // 3. Adapt Speed:
+      real tempDeltaV = deltaVz0[k];
+      real dv = tempDeltaV + vs_z;
+
+      if( dv > uSlimit) {
+         VZ  += dv - uSlimit;
+         tempDeltaV -= uSlimit;
+      }
+      else if( dv < -uSlimit) {
+         VZ  += dv + uSlimit;
+         tempDeltaV += uSlimit;
+      }
+      else {
+         tempDeltaV = -vs_z;
+      }
+
+      //VZ = vz0[k]+vs_z;
+      // 4. Set unknown distributions:
+      //f1_B   = f1_T   - c4o9  * VZ;
+      //f1_BW  = f1_TE  - c1o9  * (VX + VZ);
+      //f1_BE  = f1_TW  + c1o9  * (VX - VZ);
+      //f1_BS  = f1_TN  - c1o9  * (VY + VZ);
+      //f1_BN  = f1_TS  + c1o9  * (VY - VZ);
+      //f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ);
+      //f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ);
+      //f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ);
+      //f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ);
+
+      f1_T   = f1_B   + c4o9  * VZ;
+      f1_TE  = f1_BW  + c1o9  * (VX + VZ);
+      f1_TW  = f1_BE  - c1o9  * (VX - VZ);
+      f1_TN  = f1_BS  + c1o9  * (VY + VZ);
+      f1_TS  = f1_BN  - c1o9  * (VY - VZ);
+      f1_TNE = f1_BSW + c1o36 * (VX + VY + VZ);
+      f1_TSE = f1_BNW + c1o36 * (VX - VY + VZ);
+      f1_TSW = f1_BNE - c1o36 * (VX + VY - VZ);
+      f1_TNW = f1_BSE - c1o36 * (VX - VY - VZ);
+
+      deltaVz0[k] = tempDeltaV;
+      (D.f[d00P])[kt   ] = f1_T  ;
+      (D.f[dP0P])[kte  ] = f1_TE ;
+      (D.f[dM0P])[ktw  ] = f1_TW ;
+      (D.f[d0PP])[ktn  ] = f1_TN ;
+      (D.f[d0MP])[kts  ] = f1_TS ;
+      (D.f[dPPP])[ktne ] = f1_TNE;
+      (D.f[dMMP])[ktsw ] = f1_TSW;
+      (D.f[dPMP])[ktse ] = f1_TSE;
+      (D.f[dMPP])[ktnw ] = f1_TNW;
+
+      //(D.f[d00M])[kb   ] = f1_B   ;
+      //(D.f[dM0M])[kbw  ] = f1_BW  ;
+      //(D.f[dP0M])[kbe  ] = f1_BE  ;
+      //(D.f[d0MM])[kbs  ] = f1_BS  ;
+      //(D.f[d0PM])[kbn  ] = f1_BN  ;
+      //(D.f[dPPM])[kbne ] = f1_BNE ;
+      //(D.f[dMMM])[kbsw ] = f1_BSW ;
+      //(D.f[dPMM])[kbse ] = f1_BSE ;
+      //(D.f[dMPM])[kbnw ] = f1_BNW ;
+
+
+      //(D.f[d00P])[kt   ] = f1_B  ;
+      //(D.f[dP0P])[kte  ] = f1_BW ;
+      //(D.f[dM0P])[ktw  ] = f1_BE ;
+      //(D.f[d0PP])[ktn  ] = f1_BS ;
+      //(D.f[d0MP])[kts  ] = f1_BN ;
+      //(D.f[dPPP])[ktne ] = f1_BSW;
+      //(D.f[dMMP])[ktsw ] = f1_BNE;
+      //(D.f[dPMP])[ktse ] = f1_BNW;
+      //(D.f[dMPP])[ktnw ] = f1_BSE;
+
+      //(D.f[dP00])[ke   ] = f1_W   -c2over27*drho1;
+      //(D.f[dM00])[kw   ] = f1_E   -c2over27*drho1;
+      //(D.f[d0P0])[kn   ] = f1_S   -c2over27*drho1;
+      //(D.f[d0M0])[ks   ] = f1_N   -c2over27*drho1;
+      //(D.f[d00P])[kt   ] = f1_B   -c2over27*drho1;
+      //(D.f[d00M])[kb   ] = f1_T   -c2over27*drho1;
+      //(D.f[dPP0])[kne  ] = f1_SW  -c1over54*drho1;
+      //(D.f[dMM0])[ksw  ] = f1_NE  -c1over54*drho1;
+      //(D.f[dPM0])[kse  ] = f1_NW  -c1over54*drho1;
+      //(D.f[dMP0])[knw  ] = f1_SE  -c1over54*drho1;
+      //(D.f[dP0P])[kte  ] = f1_BW  -c1over54*drho1;
+      //(D.f[dM0M])[kbw  ] = f1_TE  -c1over54*drho1;
+      //(D.f[dP0M])[kbe  ] = f1_TW  -c1over54*drho1;
+      //(D.f[dM0P])[ktw  ] = f1_BE  -c1over54*drho1;
+      //(D.f[d0PP])[ktn  ] = f1_BS  -c1over54*drho1;
+      //(D.f[d0MM])[kbs  ] = f1_TN  -c1over54*drho1;
+      //(D.f[d0PM])[kbn  ] = f1_TS  -c1over54*drho1;
+      //(D.f[d0MP])[kts  ] = f1_BN  -c1over54*drho1;
+      //(D.f[d000])[kzero] = f1_ZERO-c8over27*drho1;
+      //(D.f[dPPP])[ktne ] = f1_BSW -c1over216*drho1;
+      //(D.f[dMMP])[ktsw ] = f1_BNE -c1over216*drho1;
+      //(D.f[dPMP])[ktse ] = f1_BNW -c1over216*drho1;
+      //(D.f[dMPP])[ktnw ] = f1_BSE -c1over216*drho1;
+      //(D.f[dPPM])[kbne ] = f1_TSW -c1over216*drho1;
+      //(D.f[dMMM])[kbsw ] = f1_TNE -c1over216*drho1;
+      //(D.f[dPMM])[kbse ] = f1_TNW -c1over216*drho1;
+      //(D.f[dMPM])[kbnw ] = f1_TSE -c1over216*drho1;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/src/gpu/core/GPU/SetForcing27.cu b/src/gpu/core/GPU/SetForcing27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..d356084fa0d7f1fc7afb94b784c1b45206a9bf98
--- /dev/null
+++ b/src/gpu/core/GPU/SetForcing27.cu
@@ -0,0 +1,174 @@
+/* Device code */
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+////////////////////////////////////////////////////////////////////////////////
+__global__ void GetVeloforForcing27( real* DD, 
+												int* bcIndex, 
+												int nonAtBC, 
+												real* Vx,
+												real* Vy,
+												real* Vz,
+												unsigned int* neighborX,
+												unsigned int* neighborY,
+												unsigned int* neighborZ,
+												unsigned long long numberOfLBnodes, 
+												bool isEvenTimestep)
+{
+	Distributions27 D;
+	if (isEvenTimestep==false)
+	{
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	} 
+	else
+	{
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	}
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+	if(k < nonAtBC)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		//index
+		unsigned int KQK  = bcIndex[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 mfcbb = (D.f[dP00])[ke   ];
+		real mfabb = (D.f[dM00])[kw   ];
+		real mfbcb = (D.f[d0P0])[kn   ];
+		real mfbab = (D.f[d0M0])[ks   ];
+		real mfbbc = (D.f[d00P])[kt   ];
+		real mfbba = (D.f[d00M])[kb   ];
+		real mfccb = (D.f[dPP0])[kne  ];
+		real mfaab = (D.f[dMM0])[ksw  ];
+		real mfcab = (D.f[dPM0])[kse  ];
+		real mfacb = (D.f[dMP0])[knw  ];
+		real mfcbc = (D.f[dP0P])[kte  ];
+		real mfaba = (D.f[dM0M])[kbw  ];
+		real mfcba = (D.f[dP0M])[kbe  ];
+		real mfabc = (D.f[dM0P])[ktw  ];
+		real mfbcc = (D.f[d0PP])[ktn  ];
+		real mfbaa = (D.f[d0MM])[kbs  ];
+		real mfbca = (D.f[d0PM])[kbn  ];
+		real mfbac = (D.f[d0MP])[kts  ];
+		real mfbbb = (D.f[d000])[kzero];
+		real mfccc = (D.f[dPPP])[ktne ];
+		real mfaac = (D.f[dMMP])[ktsw ];
+		real mfcac = (D.f[dPMP])[ktse ];
+		real mfacc = (D.f[dMPP])[ktnw ];
+		real mfcca = (D.f[dPPM])[kbne ];
+		real mfaaa = (D.f[dMMM])[kbsw ];
+		real mfcaa = (D.f[dPMM])[kbse ];
+		real mfaca = (D.f[dMPM])[kbnw ];
+		////////////////////////////////////////////////////////////////////////////////////
+		real rho   = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
+					 	 mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
+						 mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one
+		////////////////////////////////////////////////////////////////////////////////////
+		real vx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
+			         (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
+				       (mfcbb-mfabb))/ rho;
+		real vy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + 
+			         (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
+			           (mfbcb-mfbab)) / rho;
+		real vz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + 
+			         (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
+			           (mfbbc-mfbba)) / rho;
+		////////////////////////////////////////////////////////////////////////////////////
+		Vx[k] = vx;
+		Vy[k] = vy;
+		Vz[k] = vz;
+		////////////////////////////////////////////////////////////////////////////////////
+	}
+}
+
diff --git a/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu b/src/gpu/core/GPU/SlipBCs27.cu
similarity index 62%
rename from src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu
rename to src/gpu/core/GPU/SlipBCs27.cu
index 3289d6543aa2e13c4beb1310985f40ad73445a4d..2ef15989422a7eccf15c5eb931115282c8794a64 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu
+++ b/src/gpu/core/GPU/SlipBCs27.cu
@@ -73,32 +73,32 @@ __global__ void QSlipDevice27(
             *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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -130,37 +130,37 @@ __global__ void QSlipDevice27(
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[kbnw ];
+      real f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -182,7 +182,7 @@ __global__ void QSlipDevice27(
       D = vf::gpu::getDistributionReferences27(DD, numberOfLBnodes, !isEvenTimestep);
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[DIR_000])[k]=c1o10;
+      //(D.f[d000])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real fac = c1o1;//c99o100;
 	  real VeloX = fac*vx1;
@@ -200,8 +200,8 @@ __global__ void QSlipDevice27(
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq); 
-         (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-feq*om1)/(c1o1-om1)+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);
-         //(D.f[DIR_M00])[kw]=zero;
+         (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-feq*om1)/(c1o1-om1)+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);
+         //(D.f[dM00])[kw]=zero;
       }
 
       q = q_dirW[k];
@@ -212,8 +212,8 @@ __global__ void QSlipDevice27(
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-         (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-feq*om1)/(c1o1-om1)+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);
-         //(D.f[DIR_P00])[ke]=zero;
+         (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-feq*om1)/(c1o1-om1)+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);
+         //(D.f[dP00])[ke]=zero;
       }
 
       q = q_dirN[k];
@@ -224,8 +224,8 @@ __global__ void QSlipDevice27(
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-         (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-feq*om1)/(c1o1-om1)+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);
-         //(D.f[DIR_0M0])[ks]=zero;
+         (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-feq*om1)/(c1o1-om1)+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);
+         //(D.f[d0M0])[ks]=zero;
       }
 
       q = q_dirS[k];
@@ -236,8 +236,8 @@ __global__ void QSlipDevice27(
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-feq*om1)/(c1o1-om1)+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);
-         //(D.f[DIR_0P0])[kn]=zero;
+         (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-feq*om1)/(c1o1-om1)+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);
+         //(D.f[d0P0])[kn]=zero;
       }
 
       q = q_dirT[k];
@@ -248,8 +248,8 @@ __global__ void QSlipDevice27(
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
-         (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-feq*om1)/(c1o1-om1)+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);
-         //(D.f[DIR_00M])[kb]=one;
+         (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-feq*om1)/(c1o1-om1)+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);
+         //(D.f[d00M])[kb]=one;
       }
 
       q = q_dirB[k];
@@ -260,8 +260,8 @@ __global__ void QSlipDevice27(
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-         (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-feq*om1)/(c1o1-om1)+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
-         //(D.f[DIR_00P])[kt]=zero;
+         (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-feq*om1)/(c1o1-om1)+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
+         //(D.f[d00P])[kt]=zero;
       }
 
       q = q_dirNE[k];
@@ -273,8 +273,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-feq*om1)/(c1o1-om1)+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
-         //(D.f[DIR_MM0])[ksw]=zero;
+         (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-feq*om1)/(c1o1-om1)+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
+         //(D.f[dMM0])[ksw]=zero;
       }
 
       q = q_dirSW[k];
@@ -286,8 +286,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-feq*om1)/(c1o1-om1)+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
-         //(D.f[DIR_PP0])[kne]=zero;
+         (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-feq*om1)/(c1o1-om1)+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
+         //(D.f[dPP0])[kne]=zero;
       }
 
       q = q_dirSE[k];
@@ -299,8 +299,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-feq*om1)/(c1o1-om1)+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
-         //(D.f[DIR_MP0])[knw]=zero;
+         (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-feq*om1)/(c1o1-om1)+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
+         //(D.f[dMP0])[knw]=zero;
       }
 
       q = q_dirNW[k];
@@ -312,8 +312,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-feq*om1)/(c1o1-om1)+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
-         //(D.f[DIR_PM0])[kse]=zero;
+         (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-feq*om1)/(c1o1-om1)+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
+         //(D.f[dPM0])[kse]=zero;
       }
 
       q = q_dirTE[k];
@@ -325,8 +325,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-feq*om1)/(c1o1-om1)+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
-         //(D.f[DIR_M0M])[kbw]=zero;
+         (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-feq*om1)/(c1o1-om1)+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
+         //(D.f[dM0M])[kbw]=zero;
       }
 
       q = q_dirBW[k];
@@ -338,8 +338,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-feq*om1)/(c1o1-om1)+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
-         //(D.f[DIR_P0P])[kte]=zero;
+         (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-feq*om1)/(c1o1-om1)+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
+         //(D.f[dP0P])[kte]=zero;
       }
 
       q = q_dirBE[k];
@@ -351,8 +351,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-feq*om1)/(c1o1-om1)+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
-         //(D.f[DIR_M0P])[ktw]=zero;
+         (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-feq*om1)/(c1o1-om1)+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
+         //(D.f[dM0P])[ktw]=zero;
       }
 
       q = q_dirTW[k];
@@ -364,8 +364,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-feq*om1)/(c1o1-om1)+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
-         //(D.f[DIR_P0M])[kbe]=zero;
+         (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-feq*om1)/(c1o1-om1)+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
+         //(D.f[dP0M])[kbe]=zero;
       }
 
       q = q_dirTN[k];
@@ -377,8 +377,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-feq*om1)/(c1o1-om1)+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
-         //(D.f[DIR_0MM])[kbs]=zero;
+         (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-feq*om1)/(c1o1-om1)+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
+         //(D.f[d0MM])[kbs]=zero;
       }
 
       q = q_dirBS[k];
@@ -390,8 +390,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-feq*om1)/(c1o1-om1)+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
-         //(D.f[DIR_0PP])[ktn]=zero;
+         (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-feq*om1)/(c1o1-om1)+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
+         //(D.f[d0PP])[ktn]=zero;
       }
 
       q = q_dirBN[k];
@@ -403,8 +403,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-feq*om1)/(c1o1-om1)+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
-         //(D.f[DIR_0MP])[kts]=zero;
+         (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-feq*om1)/(c1o1-om1)+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
+         //(D.f[d0MP])[kts]=zero;
       }
 
       q = q_dirTS[k];
@@ -416,8 +416,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-feq*om1)/(c1o1-om1)+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
-         //(D.f[DIR_0PM])[kbn]=zero;
+         (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-feq*om1)/(c1o1-om1)+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
+         //(D.f[d0PM])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
@@ -430,8 +430,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_MMM])[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[DIR_MMM])[kbsw]=zero;
+         (D.f[dMMM])[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[dMMM])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
@@ -444,8 +444,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_PPP])[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[DIR_PPP])[ktne]=zero;
+         (D.f[dPPP])[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[dPPP])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
@@ -458,8 +458,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_MMP])[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[DIR_MMP])[ktsw]=zero;
+         (D.f[dMMP])[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[dMMP])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
@@ -472,8 +472,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_PPM])[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[DIR_PPM])[kbne]=zero;
+         (D.f[dPPM])[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[dPPM])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
@@ -486,8 +486,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_MPM])[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[DIR_MPM])[kbnw]=zero;
+         (D.f[dMPM])[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[dMPM])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
@@ -500,8 +500,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_PMP])[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[DIR_PMP])[ktse]=zero;
+         (D.f[dPMP])[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[dPMP])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
@@ -514,8 +514,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_MPP])[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[DIR_MPP])[ktnw]=zero;
+         (D.f[dMPP])[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[dMPP])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
@@ -528,8 +528,8 @@ __global__ void QSlipDevice27(
 		 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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
+         (D.f[dPMM])[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[dPMM])[kbse]=zero;
       }
    }
 }
@@ -644,39 +644,39 @@ __global__ void QSlipDeviceComp27(
       ////////////////////////////////////////////////////////////////////////////////
       //! - Set local distributions
       //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       //! - 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[DIR_000])[kzero]); 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[d000])[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)) +
@@ -714,7 +714,7 @@ __global__ void QSlipDeviceComp27(
       bool y = false;
       bool z = false;
 
-      q = (subgridD.q[DIR_P00])[nodeIndex];
+      q = (subgridD.q[dP00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)  // only update distribution for q between zero and one
       {
          VeloX = c0o1;
@@ -723,10 +723,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloX;
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27);
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_M00])[nodeIndex];
+      q = (subgridD.q[dM00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = c0o1;
@@ -735,10 +735,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloX;
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27);
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
+      q = (subgridD.q[d0P0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
@@ -747,10 +747,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloY;
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27);
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
+      q = (subgridD.q[d0M0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
@@ -759,10 +759,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloY;
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27);
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00P])[nodeIndex];
+      q = (subgridD.q[d00P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
@@ -771,10 +771,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloZ;
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27);
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00M])[nodeIndex];
+      q = (subgridD.q[d00M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
@@ -783,10 +783,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloZ;
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27);
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
+      q = (subgridD.q[dPP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -797,10 +797,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 + vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX + VeloY;
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54);
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
+      q = (subgridD.q[dMM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -811,10 +811,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 - vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX - VeloY;
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54);
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
+      q = (subgridD.q[dPM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -825,10 +825,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 - vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX - VeloY;
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54);
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
+      q = (subgridD.q[dMP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -839,10 +839,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 + vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX + VeloY;
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54);
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
+      q = (subgridD.q[dP0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -853,10 +853,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX + VeloZ;
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54);
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
+      q = (subgridD.q[dM0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
         VeloX = slipLength*vx1;
@@ -867,10 +867,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX - VeloZ;
-         (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54);
+         (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
+      q = (subgridD.q[dP0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -881,10 +881,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX - VeloZ;
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54);
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
+      q = (subgridD.q[dM0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -895,10 +895,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX + VeloZ;
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54);
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
+      q = (subgridD.q[d0PP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -909,10 +909,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloY + VeloZ;
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54);
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
+      q = (subgridD.q[d0MM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -923,11 +923,11 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloY - VeloZ;
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54);
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54);
       }
 
 
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
+      q = (subgridD.q[d0PM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -938,10 +938,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloY - VeloZ;
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54);
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
+      q = (subgridD.q[d0MP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -952,10 +952,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloY + VeloZ;
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54);
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
+      q = (subgridD.q[dPPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -967,10 +967,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 + vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX + VeloY + VeloZ;
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216);
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
+      q = (subgridD.q[dMMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -982,11 +982,11 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 - vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX - VeloY - VeloZ;
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216);
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216);
       }
 
 
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
+      q = (subgridD.q[dPPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -998,10 +998,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 + vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX + VeloY - VeloZ;
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216);
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
+      q = (subgridD.q[dMMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1013,10 +1013,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 - vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX - VeloY + VeloZ;
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216);
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
+      q = (subgridD.q[dPMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1028,10 +1028,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 - vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX - VeloY + VeloZ;
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216);
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
+      q = (subgridD.q[dMPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1043,10 +1043,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 + vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX + VeloY - VeloZ;
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216);
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
+      q = (subgridD.q[dPMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1058,10 +1058,10 @@ __global__ void QSlipDeviceComp27(
          velocityLB = vx1 - vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX - VeloY - VeloZ;
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216);
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
+      q = (subgridD.q[dMPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1073,7 +1073,7 @@ __global__ void QSlipDeviceComp27(
          velocityLB = -vx1 + vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX + VeloY + VeloZ;
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216);
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216);
       }
    }
 }
@@ -1173,39 +1173,39 @@ __global__ void BBSlipDeviceComp27(
       ////////////////////////////////////////////////////////////////////////////////
       //! - Set local distributions
       //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       //! - 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[DIR_000])[kzero]); 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[d000])[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)) +
@@ -1243,67 +1243,67 @@ __global__ void BBSlipDeviceComp27(
       bool y = false;
       bool z = false;
 
-      q = (subgridD.q[DIR_P00])[nodeIndex];
+      q = (subgridD.q[dP00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)  // only update distribution for q between zero and one
       {
          VeloX = c0o1;
          x = true;
 
          velocityBC = VeloX;
-         (dist.f[DIR_M00])[kw] = getBounceBackDistributionForVeloBC(f_W, velocityBC, c2o27);
+         (dist.f[dM00])[kw] = getBounceBackDistributionForVeloBC(f_W, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_M00])[nodeIndex];
+      q = (subgridD.q[dM00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = c0o1;
          x = true;
 
          velocityBC = -VeloX;
-         (dist.f[DIR_P00])[ke] = getBounceBackDistributionForVeloBC(f_E, velocityBC, c2o27);
+         (dist.f[dP00])[ke] = getBounceBackDistributionForVeloBC(f_E, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
+      q = (subgridD.q[d0P0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
          y = true;
 
          velocityBC = VeloY;
-         (dist.f[DIR_0M0])[ks] = getBounceBackDistributionForVeloBC(f_S, velocityBC, c2o27);
+         (dist.f[d0M0])[ks] = getBounceBackDistributionForVeloBC(f_S, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
+      q = (subgridD.q[d0M0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
          y = true;
 
          velocityBC = -VeloY;
-         (dist.f[DIR_0P0])[kn] = getBounceBackDistributionForVeloBC(f_N, velocityBC, c2o27);
+         (dist.f[d0P0])[kn] = getBounceBackDistributionForVeloBC(f_N, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00P])[nodeIndex];
+      q = (subgridD.q[d00P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
          z = true;
 
          velocityBC = VeloZ;
-         (dist.f[DIR_00M])[kb] = getBounceBackDistributionForVeloBC(f_B, velocityBC, c2o27);
+         (dist.f[d00M])[kb] = getBounceBackDistributionForVeloBC(f_B, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00M])[nodeIndex];
+      q = (subgridD.q[d00M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
          z = true;
 
          velocityBC = -VeloZ;
-         (dist.f[DIR_00P])[kt] = getBounceBackDistributionForVeloBC(f_T, velocityBC, c2o27);
+         (dist.f[d00P])[kt] = getBounceBackDistributionForVeloBC(f_T, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
+      q = (subgridD.q[dPP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1312,10 +1312,10 @@ __global__ void BBSlipDeviceComp27(
          if (y == true) VeloY = c0o1;
 
          velocityBC = VeloX + VeloY;
-         (dist.f[DIR_MM0])[ksw] = getBounceBackDistributionForVeloBC(f_SW, velocityBC, c1o54);
+         (dist.f[dMM0])[ksw] = getBounceBackDistributionForVeloBC(f_SW, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
+      q = (subgridD.q[dMM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1324,10 +1324,10 @@ __global__ void BBSlipDeviceComp27(
          if (y == true) VeloY = c0o1;
 
          velocityBC = -VeloX - VeloY;
-         (dist.f[DIR_PP0])[kne] = getBounceBackDistributionForVeloBC(f_NE, velocityBC, c1o54);
+         (dist.f[dPP0])[kne] = getBounceBackDistributionForVeloBC(f_NE, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
+      q = (subgridD.q[dPM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1336,10 +1336,10 @@ __global__ void BBSlipDeviceComp27(
          if (y == true) VeloY = c0o1;
 
          velocityBC = VeloX - VeloY;
-         (dist.f[DIR_MP0])[knw] = getBounceBackDistributionForVeloBC(f_NW, velocityBC, c1o54);
+         (dist.f[dMP0])[knw] = getBounceBackDistributionForVeloBC(f_NW, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
+      q = (subgridD.q[dMP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1348,10 +1348,10 @@ __global__ void BBSlipDeviceComp27(
          if (y == true) VeloY = c0o1;
 
          velocityBC = -VeloX + VeloY;
-         (dist.f[DIR_PM0])[kse] = getBounceBackDistributionForVeloBC(f_SE, velocityBC, c1o54);
+         (dist.f[dPM0])[kse] = getBounceBackDistributionForVeloBC(f_SE, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
+      q = (subgridD.q[dP0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1360,10 +1360,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloX + VeloZ;
-         (dist.f[DIR_M0M])[kbw] = getBounceBackDistributionForVeloBC(f_BW, velocityBC, c1o54);
+         (dist.f[dM0M])[kbw] = getBounceBackDistributionForVeloBC(f_BW, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
+      q = (subgridD.q[dM0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
         VeloX = slipLength*vx1;
@@ -1372,10 +1372,10 @@ __global__ void BBSlipDeviceComp27(
         if (z == true) VeloZ = c0o1;
 
         velocityBC = -VeloX - VeloZ;
-        (dist.f[DIR_P0P])[kte] = getBounceBackDistributionForVeloBC(f_TE, velocityBC, c1o54);
+        (dist.f[dP0P])[kte] = getBounceBackDistributionForVeloBC(f_TE, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
+      q = (subgridD.q[dP0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1384,10 +1384,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloX - VeloZ;
-         (dist.f[DIR_M0P])[ktw] = getBounceBackDistributionForVeloBC(f_TW, velocityBC, c1o54);
+         (dist.f[dM0P])[ktw] = getBounceBackDistributionForVeloBC(f_TW, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
+      q = (subgridD.q[dM0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1396,10 +1396,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloX + VeloZ;
-         (dist.f[DIR_P0M])[kbe] = getBounceBackDistributionForVeloBC(f_BE, velocityBC, c1o54);
+         (dist.f[dP0M])[kbe] = getBounceBackDistributionForVeloBC(f_BE, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
+      q = (subgridD.q[d0PP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1408,10 +1408,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloY + VeloZ;
-         (dist.f[DIR_0MM])[kbs] = getBounceBackDistributionForVeloBC(f_BS, velocityBC, c1o54);
+         (dist.f[d0MM])[kbs] = getBounceBackDistributionForVeloBC(f_BS, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
+      q = (subgridD.q[d0MM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1420,11 +1420,11 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloY - VeloZ;
-         (dist.f[DIR_0PP])[ktn] = getBounceBackDistributionForVeloBC(f_TN, velocityBC, c1o54);
+         (dist.f[d0PP])[ktn] = getBounceBackDistributionForVeloBC(f_TN, velocityBC, c1o54);
       }
 
 
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
+      q = (subgridD.q[d0PM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1433,10 +1433,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloY - VeloZ;
-         (dist.f[DIR_0MP])[kts] = getBounceBackDistributionForVeloBC(f_TS, velocityBC, c1o54);
+         (dist.f[d0MP])[kts] = getBounceBackDistributionForVeloBC(f_TS, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
+      q = (subgridD.q[d0MP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1445,10 +1445,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloY + VeloZ;
-         (dist.f[DIR_0PM])[kbn] = getBounceBackDistributionForVeloBC(f_BN, velocityBC, c1o54);
+         (dist.f[d0PM])[kbn] = getBounceBackDistributionForVeloBC(f_BN, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
+      q = (subgridD.q[dPPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1459,10 +1459,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloX + VeloY + VeloZ;
-         (dist.f[DIR_MMM])[kbsw] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216);
+         (dist.f[dMMM])[kbsw] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
+      q = (subgridD.q[dMMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1473,11 +1473,11 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloX - VeloY - VeloZ;
-         (dist.f[DIR_PPP])[ktne] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216);
+         (dist.f[dPPP])[ktne] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216);
       }
 
 
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
+      q = (subgridD.q[dPPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1488,10 +1488,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloX + VeloY - VeloZ;
-         (dist.f[DIR_MMP])[ktsw] = getBounceBackDistributionForVeloBC(f_TSW, velocityBC, c1o216);
+         (dist.f[dMMP])[ktsw] = getBounceBackDistributionForVeloBC(f_TSW, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
+      q = (subgridD.q[dMMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1502,10 +1502,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloX - VeloY + VeloZ;
-         (dist.f[DIR_PPM])[kbne] = getBounceBackDistributionForVeloBC(f_BNE, velocityBC, c1o216);
+         (dist.f[dPPM])[kbne] = getBounceBackDistributionForVeloBC(f_BNE, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
+      q = (subgridD.q[dPMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1516,10 +1516,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloX - VeloY + VeloZ;
-         (dist.f[DIR_MPM])[kbnw] = getBounceBackDistributionForVeloBC(f_BNW, velocityBC, c1o216);
+         (dist.f[dMPM])[kbnw] = getBounceBackDistributionForVeloBC(f_BNW, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
+      q = (subgridD.q[dMPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1530,10 +1530,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloX + VeloY - VeloZ;
-         (dist.f[DIR_PMP])[ktse] = getBounceBackDistributionForVeloBC(f_TSE, velocityBC, c1o216);
+         (dist.f[dPMP])[ktse] = getBounceBackDistributionForVeloBC(f_TSE, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
+      q = (subgridD.q[dPMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1544,10 +1544,10 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = VeloX - VeloY - VeloZ;
-         (dist.f[DIR_MPP])[ktnw] = getBounceBackDistributionForVeloBC(f_TNW, velocityBC, c1o216);
+         (dist.f[dMPP])[ktnw] = getBounceBackDistributionForVeloBC(f_TNW, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
+      q = (subgridD.q[dMPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1558,7 +1558,7 @@ __global__ void BBSlipDeviceComp27(
          if (z == true) VeloZ = c0o1;
 
          velocityBC = -VeloX + VeloY + VeloZ;
-         (dist.f[DIR_PMM])[kbse] = getBounceBackDistributionForVeloBC(f_BSE, velocityBC, c1o216);
+         (dist.f[dPMM])[kbse] = getBounceBackDistributionForVeloBC(f_BSE, velocityBC, c1o216);
       }
    }
 }
@@ -1663,39 +1663,39 @@ __global__ void QSlipDeviceComp27TurbViscosity(
       ////////////////////////////////////////////////////////////////////////////////
       //! - Set local distributions
       //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       //! - 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[DIR_000])[kzero]); 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[d000])[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)) +
@@ -1738,7 +1738,7 @@ __global__ void QSlipDeviceComp27TurbViscosity(
       bool y = false;
       bool z = false;
 
-      q = (subgridD.q[DIR_P00])[nodeIndex];
+      q = (subgridD.q[dP00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)  // only update distribution for q between zero and one
       {
          VeloX = c0o1;
@@ -1747,10 +1747,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloX;
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, om_turb, velocityBC, c2o27);
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, om_turb, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_M00])[nodeIndex];
+      q = (subgridD.q[dM00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = c0o1;
@@ -1759,10 +1759,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloX;
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, om_turb, velocityBC, c2o27);
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, om_turb, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
+      q = (subgridD.q[d0P0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
@@ -1771,10 +1771,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloY;
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, om_turb, velocityBC, c2o27);
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, om_turb, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
+      q = (subgridD.q[d0M0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
@@ -1783,10 +1783,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloY;
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, om_turb, velocityBC, c2o27);
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, om_turb, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00P])[nodeIndex];
+      q = (subgridD.q[d00P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
@@ -1795,10 +1795,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloZ;
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, om_turb, velocityBC, c2o27);
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, om_turb, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00M])[nodeIndex];
+      q = (subgridD.q[d00M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
@@ -1807,10 +1807,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloZ;
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, om_turb, velocityBC, c2o27);
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, om_turb, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
+      q = (subgridD.q[dPP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1821,10 +1821,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX + VeloY;
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
+      q = (subgridD.q[dMM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1835,10 +1835,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 - vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX - VeloY;
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
+      q = (subgridD.q[dPM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1849,10 +1849,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX - VeloY;
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
+      q = (subgridD.q[dMP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1863,10 +1863,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX + VeloY;
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
+      q = (subgridD.q[dP0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1877,10 +1877,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX + VeloZ;
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
+      q = (subgridD.q[dM0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
         VeloX = slipLength*vx1;
@@ -1891,10 +1891,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
         velocityLB = -vx1 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloX - VeloZ;
-        (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, om_turb, velocityBC, c1o54);
+        (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
+      q = (subgridD.q[dP0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1905,10 +1905,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX - VeloZ;
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
+      q = (subgridD.q[dM0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1919,10 +1919,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX + VeloZ;
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, om_turb, velocityBC, c1o54);
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
+      q = (subgridD.q[d0PP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1933,10 +1933,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloY + VeloZ;
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, om_turb, velocityBC, c1o54);
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
+      q = (subgridD.q[d0MM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1947,11 +1947,11 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloY - VeloZ;
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, om_turb, velocityBC, c1o54);
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, om_turb, velocityBC, c1o54);
       }
 
 
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
+      q = (subgridD.q[d0PM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1962,10 +1962,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloY - VeloZ;
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, om_turb, velocityBC, c1o54);
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
+      q = (subgridD.q[d0MP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -1976,10 +1976,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloY + VeloZ;
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, om_turb, velocityBC, c1o54);
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, om_turb, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
+      q = (subgridD.q[dPPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -1991,10 +1991,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX + VeloY + VeloZ;
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, om_turb, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
+      q = (subgridD.q[dMMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2006,11 +2006,11 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 - vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX - VeloY - VeloZ;
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, om_turb, velocityBC, c1o216);
       }
 
 
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
+      q = (subgridD.q[dPPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2022,10 +2022,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX + VeloY - VeloZ;
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, om_turb, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
+      q = (subgridD.q[dMMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2037,10 +2037,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 - vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX - VeloY + VeloZ;
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, om_turb, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
+      q = (subgridD.q[dPMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2052,10 +2052,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX - VeloY + VeloZ;
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, om_turb, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
+      q = (subgridD.q[dMPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2067,10 +2067,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX + VeloY - VeloZ;
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, om_turb, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
+      q = (subgridD.q[dPMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2082,10 +2082,10 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX - VeloY - VeloZ;
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, om_turb, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
+      q = (subgridD.q[dMPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2097,7 +2097,7 @@ __global__ void QSlipDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX + VeloY + VeloZ;
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, om_turb, velocityBC, c1o216);
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, om_turb, velocityBC, c1o216);
       }
    }
 }
@@ -2203,39 +2203,39 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
       ////////////////////////////////////////////////////////////////////////////////
       //! - Set local distributions
       //!
-      real f_W    = (dist.f[DIR_P00])[ke   ];
-      real f_E    = (dist.f[DIR_M00])[kw   ];
-      real f_S    = (dist.f[DIR_0P0])[kn   ];
-      real f_N    = (dist.f[DIR_0M0])[ks   ];
-      real f_B    = (dist.f[DIR_00P])[kt   ];
-      real f_T    = (dist.f[DIR_00M])[kb   ];
-      real f_SW   = (dist.f[DIR_PP0])[kne  ];
-      real f_NE   = (dist.f[DIR_MM0])[ksw  ];
-      real f_NW   = (dist.f[DIR_PM0])[kse  ];
-      real f_SE   = (dist.f[DIR_MP0])[knw  ];
-      real f_BW   = (dist.f[DIR_P0P])[kte  ];
-      real f_TE   = (dist.f[DIR_M0M])[kbw  ];
-      real f_TW   = (dist.f[DIR_P0M])[kbe  ];
-      real f_BE   = (dist.f[DIR_M0P])[ktw  ];
-      real f_BS   = (dist.f[DIR_0PP])[ktn  ];
-      real f_TN   = (dist.f[DIR_0MM])[kbs  ];
-      real f_TS   = (dist.f[DIR_0PM])[kbn  ];
-      real f_BN   = (dist.f[DIR_0MP])[kts  ];
-      real f_BSW  = (dist.f[DIR_PPP])[ktne ];
-      real f_BNE  = (dist.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (dist.f[DIR_PMP])[ktse ];
-      real f_BSE  = (dist.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (dist.f[DIR_PPM])[kbne ];
-      real f_TNE  = (dist.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (dist.f[DIR_PMM])[kbse ];
-      real f_TSE  = (dist.f[DIR_MPM])[kbnw ];
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       //! - 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[DIR_000])[kzero]); 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[d000])[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)) +
@@ -2278,7 +2278,7 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
       bool y = false;
       bool z = false;
 
-      q = (subgridD.q[DIR_P00])[nodeIndex];
+      q = (subgridD.q[dP00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)  // only update distribution for q between zero and one
       {
          VeloX = c0o1;
@@ -2287,10 +2287,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloX;
-         (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, om_turb, drho, velocityBC, c2o27);
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, om_turb, drho, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_M00])[nodeIndex];
+      q = (subgridD.q[dM00])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = c0o1;
@@ -2299,10 +2299,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloX;
-         (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, om_turb, drho, velocityBC, c2o27);
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, om_turb, drho, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0P0])[nodeIndex];
+      q = (subgridD.q[d0P0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
@@ -2311,10 +2311,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloY;
-         (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, om_turb, drho, velocityBC, c2o27);
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, om_turb, drho, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_0M0])[nodeIndex];
+      q = (subgridD.q[d0M0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = c0o1;
@@ -2323,10 +2323,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloY;
-         (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, om_turb, drho, velocityBC, c2o27);
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, om_turb, drho, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00P])[nodeIndex];
+      q = (subgridD.q[d00P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
@@ -2335,10 +2335,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = VeloZ;
-         (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, om_turb, drho, velocityBC, c2o27);
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, om_turb, drho, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_00M])[nodeIndex];
+      q = (subgridD.q[d00M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloZ = c0o1;
@@ -2347,10 +2347,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
          velocityBC = -VeloZ;
-         (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, om_turb, drho, velocityBC, c2o27);
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, om_turb, drho, velocityBC, c2o27);
       }
 
-      q = (subgridD.q[DIR_PP0])[nodeIndex];
+      q = (subgridD.q[dPP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2361,10 +2361,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX + VeloY;
-         (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MM0])[nodeIndex];
+      q = (subgridD.q[dMM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2375,10 +2375,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 - vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX - VeloY;
-         (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PM0])[nodeIndex];
+      q = (subgridD.q[dPM0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2389,10 +2389,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX - VeloY;
-         (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_MP0])[nodeIndex];
+      q = (subgridD.q[dMP0])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2403,10 +2403,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx2;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX + VeloY;
-         (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0P])[nodeIndex];
+      q = (subgridD.q[dP0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2417,10 +2417,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX + VeloZ;
-         (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0M])[nodeIndex];
+      q = (subgridD.q[dM0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
         VeloX = slipLength*vx1;
@@ -2431,10 +2431,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
         velocityLB = -vx1 - vx3;
         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
         velocityBC = -VeloX - VeloZ;
-        (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, om_turb, drho, velocityBC, c1o54);
+        (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_P0M])[nodeIndex];
+      q = (subgridD.q[dP0M])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2445,10 +2445,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloX - VeloZ;
-         (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_M0P])[nodeIndex];
+      q = (subgridD.q[dM0P])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2459,10 +2459,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloX + VeloZ;
-         (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0PP])[nodeIndex];
+      q = (subgridD.q[d0PP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -2473,10 +2473,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloY + VeloZ;
-         (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MM])[nodeIndex];
+      q = (subgridD.q[d0MM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -2487,11 +2487,11 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloY - VeloZ;
-         (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, om_turb, drho, velocityBC, c1o54);
       }
 
 
-      q = (subgridD.q[DIR_0PM])[nodeIndex];
+      q = (subgridD.q[d0PM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -2502,10 +2502,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = VeloY - VeloZ;
-         (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_0MP])[nodeIndex];
+      q = (subgridD.q[d0MP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloY = slipLength*vx2;
@@ -2516,10 +2516,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
          velocityBC = -VeloY + VeloZ;
-         (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, om_turb, drho, velocityBC, c1o54);
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, om_turb, drho, velocityBC, c1o54);
       }
 
-      q = (subgridD.q[DIR_PPP])[nodeIndex];
+      q = (subgridD.q[dPPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2531,10 +2531,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX + VeloY + VeloZ;
-         (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, om_turb, drho, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMM])[nodeIndex];
+      q = (subgridD.q[dMMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2546,11 +2546,11 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 - vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX - VeloY - VeloZ;
-         (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, om_turb, drho, velocityBC, c1o216);
       }
 
 
-      q = (subgridD.q[DIR_PPM])[nodeIndex];
+      q = (subgridD.q[dPPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2562,10 +2562,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 + vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX + VeloY - VeloZ;
-         (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, om_turb, drho, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MMP])[nodeIndex];
+      q = (subgridD.q[dMMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2577,10 +2577,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 - vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX - VeloY + VeloZ;
-         (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, om_turb, drho, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMP])[nodeIndex];
+      q = (subgridD.q[dPMP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2592,10 +2592,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX - VeloY + VeloZ;
-         (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, om_turb, drho, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPM])[nodeIndex];
+      q = (subgridD.q[dMPM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2607,10 +2607,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX + VeloY - VeloZ;
-         (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, om_turb, drho, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_PMM])[nodeIndex];
+      q = (subgridD.q[dPMM])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2622,10 +2622,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = vx1 - vx2 - vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = VeloX - VeloY - VeloZ;
-         (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, om_turb, drho, velocityBC, c1o216);
       }
 
-      q = (subgridD.q[DIR_MPP])[nodeIndex];
+      q = (subgridD.q[dMPP])[nodeIndex];
       if (q>=c0o1 && q<=c1o1)
       {
          VeloX = slipLength*vx1;
@@ -2637,7 +2637,7 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
          velocityLB = -vx1 + vx2 + vx3;
          feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
          velocityBC = -VeloX + VeloY + VeloZ;
-         (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, om_turb, drho, velocityBC, c1o216);
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, om_turb, drho, velocityBC, c1o216);
       }
    }
 }
@@ -2657,63 +2657,63 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 //    Distributions27 D;
 //    if (isEvenTimestep==true)
 //    {
-//       D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-//       D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-//       D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-//       D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-//       D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-//       D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-//       D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-//       D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-//       D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-//       D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-//       D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-//       D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-//       D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-//       D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-//       D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-//       D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-//       D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-//       D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-//       D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-//       D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-//       D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-//       D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-//       D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-//       D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-//       D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-//       D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-//       D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
+//       D.f[dP00] = &DD[dP00 * size_Mat];
+//       D.f[dM00] = &DD[dM00 * size_Mat];
+//       D.f[d0P0] = &DD[d0P0 * size_Mat];
+//       D.f[d0M0] = &DD[d0M0 * size_Mat];
+//       D.f[d00P] = &DD[d00P * size_Mat];
+//       D.f[d00M] = &DD[d00M * size_Mat];
+//       D.f[dPP0] = &DD[dPP0 * size_Mat];
+//       D.f[dMM0] = &DD[dMM0 * size_Mat];
+//       D.f[dPM0] = &DD[dPM0 * size_Mat];
+//       D.f[dMP0] = &DD[dMP0 * size_Mat];
+//       D.f[dP0P] = &DD[dP0P * size_Mat];
+//       D.f[dM0M] = &DD[dM0M * size_Mat];
+//       D.f[dP0M] = &DD[dP0M * size_Mat];
+//       D.f[dM0P] = &DD[dM0P * size_Mat];
+//       D.f[d0PP] = &DD[d0PP * size_Mat];
+//       D.f[d0MM] = &DD[d0MM * size_Mat];
+//       D.f[d0PM] = &DD[d0PM * size_Mat];
+//       D.f[d0MP] = &DD[d0MP * size_Mat];
+//       D.f[d000] = &DD[d000 * size_Mat];
+//       D.f[dPPP] = &DD[dPPP * size_Mat];
+//       D.f[dMMP] = &DD[dMMP * size_Mat];
+//       D.f[dPMP] = &DD[dPMP * size_Mat];
+//       D.f[dMPP] = &DD[dMPP * size_Mat];
+//       D.f[dPPM] = &DD[dPPM * size_Mat];
+//       D.f[dMMM] = &DD[dMMM * size_Mat];
+//       D.f[dPMM] = &DD[dPMM * size_Mat];
+//       D.f[dMPM] = &DD[dMPM * size_Mat];
 //    } 
 //    else
 //    {
-//       D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-//       D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-//       D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-//       D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-//       D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-//       D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-//       D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-//       D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-//       D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-//       D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-//       D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-//       D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-//       D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-//       D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-//       D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-//       D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-//       D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-//       D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-//       D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-//       D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-//       D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-//       D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-//       D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-//       D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-//       D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-//       D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-//       D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
+//       D.f[dM00] = &DD[dP00 * size_Mat];
+//       D.f[dP00] = &DD[dM00 * size_Mat];
+//       D.f[d0M0] = &DD[d0P0 * size_Mat];
+//       D.f[d0P0] = &DD[d0M0 * size_Mat];
+//       D.f[d00M] = &DD[d00P * size_Mat];
+//       D.f[d00P] = &DD[d00M * size_Mat];
+//       D.f[dMM0] = &DD[dPP0 * size_Mat];
+//       D.f[dPP0] = &DD[dMM0 * size_Mat];
+//       D.f[dMP0] = &DD[dPM0 * size_Mat];
+//       D.f[dPM0] = &DD[dMP0 * size_Mat];
+//       D.f[dM0M] = &DD[dP0P * size_Mat];
+//       D.f[dP0P] = &DD[dM0M * size_Mat];
+//       D.f[dM0P] = &DD[dP0M * size_Mat];
+//       D.f[dP0M] = &DD[dM0P * size_Mat];
+//       D.f[d0MM] = &DD[d0PP * size_Mat];
+//       D.f[d0PP] = &DD[d0MM * size_Mat];
+//       D.f[d0MP] = &DD[d0PM * size_Mat];
+//       D.f[d0PM] = &DD[d0MP * size_Mat];
+//       D.f[d000] = &DD[d000 * size_Mat];
+//       D.f[dPPP] = &DD[dMMM * size_Mat];
+//       D.f[dMMP] = &DD[dPPM * size_Mat];
+//       D.f[dPMP] = &DD[dMPM * size_Mat];
+//       D.f[dMPP] = &DD[dPMM * size_Mat];
+//       D.f[dPPM] = &DD[dMMP * size_Mat];
+//       D.f[dMMM] = &DD[dPPP * size_Mat];
+//       D.f[dPMM] = &DD[dMPP * size_Mat];
+//       D.f[dMPM] = &DD[dPMP * size_Mat];
 //    }
 //    ////////////////////////////////////////////////////////////////////////////////
 //    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2734,32 +2734,32 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 //             *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[DIR_P00 * numberOfBCnodes];
-//       q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-//       q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-//       q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-//       q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-//       q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-//       q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-//       q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-//       q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-//       q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-//       q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-//       q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-//       q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-//       q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-//       q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-//       q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-//       q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-//       q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-//       q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-//       q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-//       q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-//       q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-//       q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-//       q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-//       q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-//       q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+//       q_dirE   = &QQ[dP00 * numberOfBCnodes];
+//       q_dirW   = &QQ[dM00 * numberOfBCnodes];
+//       q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+//       q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+//       q_dirT   = &QQ[d00P * numberOfBCnodes];
+//       q_dirB   = &QQ[d00M * numberOfBCnodes];
+//       q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+//       q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+//       q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+//       q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+//       q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+//       q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+//       q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+//       q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+//       q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+//       q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+//       q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+//       q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+//       q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+//       q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+//       q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+//       q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+//       q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+//       q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+//       q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+//       q_dirBNW = &QQ[dMPM * numberOfBCnodes];
 //       ////////////////////////////////////////////////////////////////////////////////
 //       //index
 //       unsigned int KQK  = k_Q[k];
@@ -2792,37 +2792,37 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 //       unsigned int kbsw = neighborZ[ksw];
       
 //       ////////////////////////////////////////////////////////////////////////////////
-//       real f_W    = (D.f[DIR_P00])[ke   ];
-//       real f_E    = (D.f[DIR_M00])[kw   ];
-//       real f_S    = (D.f[DIR_0P0])[kn   ];
-//       real f_N    = (D.f[DIR_0M0])[ks   ];
-//       real f_B    = (D.f[DIR_00P])[kt   ];
-//       real f_T    = (D.f[DIR_00M])[kb   ];
-//       real f_SW   = (D.f[DIR_PP0])[kne  ];
-//       real f_NE   = (D.f[DIR_MM0])[ksw  ];
-//       real f_NW   = (D.f[DIR_PM0])[kse  ];
-//       real f_SE   = (D.f[DIR_MP0])[knw  ];
-//       real f_BW   = (D.f[DIR_P0P])[kte  ];
-//       real f_TE   = (D.f[DIR_M0M])[kbw  ];
-//       real f_TW   = (D.f[DIR_P0M])[kbe  ];
-//       real f_BE   = (D.f[DIR_M0P])[ktw  ];
-//       real f_BS   = (D.f[DIR_0PP])[ktn  ];
-//       real f_TN   = (D.f[DIR_0MM])[kbs  ];
-//       real f_TS   = (D.f[DIR_0PM])[kbn  ];
-//       real f_BN   = (D.f[DIR_0MP])[kts  ];
-//       real f_BSW  = (D.f[DIR_PPP])[ktne ];
-//       real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-//       real f_BNW  = (D.f[DIR_PMP])[ktse ];
-//       real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-//       real f_TSW  = (D.f[DIR_PPM])[kbne ];
-//       real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-//       real f_TNW  = (D.f[DIR_PMM])[kbse ];
-//       real f_TSE  = (D.f[DIR_MPM])[kbnw ];
+//       real f_W    = (D.f[dP00])[ke   ];
+//       real f_E    = (D.f[dM00])[kw   ];
+//       real f_S    = (D.f[d0P0])[kn   ];
+//       real f_N    = (D.f[d0M0])[ks   ];
+//       real f_B    = (D.f[d00P])[kt   ];
+//       real f_T    = (D.f[d00M])[kb   ];
+//       real f_SW   = (D.f[dPP0])[kne  ];
+//       real f_NE   = (D.f[dMM0])[ksw  ];
+//       real f_NW   = (D.f[dPM0])[kse  ];
+//       real f_SE   = (D.f[dMP0])[knw  ];
+//       real f_BW   = (D.f[dP0P])[kte  ];
+//       real f_TE   = (D.f[dM0M])[kbw  ];
+//       real f_TW   = (D.f[dP0M])[kbe  ];
+//       real f_BE   = (D.f[dM0P])[ktw  ];
+//       real f_BS   = (D.f[d0PP])[ktn  ];
+//       real f_TN   = (D.f[d0MM])[kbs  ];
+//       real f_TS   = (D.f[d0PM])[kbn  ];
+//       real f_BN   = (D.f[d0MP])[kts  ];
+//       real f_BSW  = (D.f[dPPP])[ktne ];
+//       real f_BNE  = (D.f[dMMP])[ktsw ];
+//       real f_BNW  = (D.f[dPMP])[ktse ];
+//       real f_BSE  = (D.f[dMPP])[ktnw ];
+//       real f_TSW  = (D.f[dPPM])[kbne ];
+//       real f_TNE  = (D.f[dMMM])[kbsw ];
+//       real f_TNW  = (D.f[dPMM])[kbse ];
+//       real f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]); 
+//                 f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -2842,67 +2842,67 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 //       //////////////////////////////////////////////////////////////////////////
 //       if (isEvenTimestep==false)
 //       {
-//          D.f[DIR_P00] = &DD[DIR_P00 * size_Mat];
-//          D.f[DIR_M00] = &DD[DIR_M00 * size_Mat];
-//          D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat];
-//          D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat];
-//          D.f[DIR_00P] = &DD[DIR_00P * size_Mat];
-//          D.f[DIR_00M] = &DD[DIR_00M * size_Mat];
-//          D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat];
-//          D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat];
-//          D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat];
-//          D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat];
-//          D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat];
-//          D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat];
-//          D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat];
-//          D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat];
-//          D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat];
-//          D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat];
-//          D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat];
-//          D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat];
-//          D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-//          D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat];
-//          D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat];
-//          D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat];
-//          D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat];
-//          D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat];
-//          D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat];
-//          D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat];
-//          D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat];
+//          D.f[dP00] = &DD[dP00 * size_Mat];
+//          D.f[dM00] = &DD[dM00 * size_Mat];
+//          D.f[d0P0] = &DD[d0P0 * size_Mat];
+//          D.f[d0M0] = &DD[d0M0 * size_Mat];
+//          D.f[d00P] = &DD[d00P * size_Mat];
+//          D.f[d00M] = &DD[d00M * size_Mat];
+//          D.f[dPP0] = &DD[dPP0 * size_Mat];
+//          D.f[dMM0] = &DD[dMM0 * size_Mat];
+//          D.f[dPM0] = &DD[dPM0 * size_Mat];
+//          D.f[dMP0] = &DD[dMP0 * size_Mat];
+//          D.f[dP0P] = &DD[dP0P * size_Mat];
+//          D.f[dM0M] = &DD[dM0M * size_Mat];
+//          D.f[dP0M] = &DD[dP0M * size_Mat];
+//          D.f[dM0P] = &DD[dM0P * size_Mat];
+//          D.f[d0PP] = &DD[d0PP * size_Mat];
+//          D.f[d0MM] = &DD[d0MM * size_Mat];
+//          D.f[d0PM] = &DD[d0PM * size_Mat];
+//          D.f[d0MP] = &DD[d0MP * size_Mat];
+//          D.f[d000] = &DD[d000 * size_Mat];
+//          D.f[dPPP] = &DD[dPPP * size_Mat];
+//          D.f[dMMP] = &DD[dMMP * size_Mat];
+//          D.f[dPMP] = &DD[dPMP * size_Mat];
+//          D.f[dMPP] = &DD[dMPP * size_Mat];
+//          D.f[dPPM] = &DD[dPPM * size_Mat];
+//          D.f[dMMM] = &DD[dMMM * size_Mat];
+//          D.f[dPMM] = &DD[dPMM * size_Mat];
+//          D.f[dMPM] = &DD[dMPM * size_Mat];
 //       } 
 //       else
 //       {
-//          D.f[DIR_M00] = &DD[DIR_P00 * size_Mat];
-//          D.f[DIR_P00] = &DD[DIR_M00 * size_Mat];
-//          D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat];
-//          D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat];
-//          D.f[DIR_00M] = &DD[DIR_00P * size_Mat];
-//          D.f[DIR_00P] = &DD[DIR_00M * size_Mat];
-//          D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat];
-//          D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat];
-//          D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat];
-//          D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat];
-//          D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat];
-//          D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat];
-//          D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat];
-//          D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat];
-//          D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat];
-//          D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat];
-//          D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat];
-//          D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat];
-//          D.f[DIR_000] = &DD[DIR_000 * size_Mat];
-//          D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat];
-//          D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat];
-//          D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat];
-//          D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat];
-//          D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat];
-//          D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat];
-//          D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat];
-//          D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat];
+//          D.f[dM00] = &DD[dP00 * size_Mat];
+//          D.f[dP00] = &DD[dM00 * size_Mat];
+//          D.f[d0M0] = &DD[d0P0 * size_Mat];
+//          D.f[d0P0] = &DD[d0M0 * size_Mat];
+//          D.f[d00M] = &DD[d00P * size_Mat];
+//          D.f[d00P] = &DD[d00M * size_Mat];
+//          D.f[dMM0] = &DD[dPP0 * size_Mat];
+//          D.f[dPP0] = &DD[dMM0 * size_Mat];
+//          D.f[dMP0] = &DD[dPM0 * size_Mat];
+//          D.f[dPM0] = &DD[dMP0 * size_Mat];
+//          D.f[dM0M] = &DD[dP0P * size_Mat];
+//          D.f[dP0P] = &DD[dM0M * size_Mat];
+//          D.f[dM0P] = &DD[dP0M * size_Mat];
+//          D.f[dP0M] = &DD[dM0P * size_Mat];
+//          D.f[d0MM] = &DD[d0PP * size_Mat];
+//          D.f[d0PP] = &DD[d0MM * size_Mat];
+//          D.f[d0MP] = &DD[d0PM * size_Mat];
+//          D.f[d0PM] = &DD[d0MP * size_Mat];
+//          D.f[d000] = &DD[d000 * size_Mat];
+//          D.f[dPPP] = &DD[dMMM * size_Mat];
+//          D.f[dMMP] = &DD[dPPM * size_Mat];
+//          D.f[dPMP] = &DD[dMPM * size_Mat];
+//          D.f[dMPP] = &DD[dPMM * size_Mat];
+//          D.f[dPPM] = &DD[dMMP * size_Mat];
+//          D.f[dMMM] = &DD[dPPP * size_Mat];
+//          D.f[dPMM] = &DD[dMPP * size_Mat];
+//          D.f[dMPM] = &DD[dPMP * size_Mat];
 //       }
 //       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //       //Test
-//       //(D.f[DIR_000])[k]=c1o10;
+//       //(D.f[d000])[k]=c1o10;
 //       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // 	  real om_turb = om1 / (c1o1 + c3o1*om1*max(c0o1, turbViscosity[k_Q[k]]));
      
@@ -2922,10 +2922,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 	     VeloZ = fac*vx3;
 // 		 x = true;
 //          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-//          (D.f[DIR_M00])[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[dM00])[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[DIR_M00])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
-//          //(D.f[DIR_M00])[kw]=zero;
+//          //(D.f[dM00])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
+//          //(D.f[dM00])[kw]=zero;
 //       }
 
 //       q = q_dirW[k];
@@ -2936,10 +2936,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 	     VeloZ = fac*vx3;
 // 		 x = true;
 //          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-//          (D.f[DIR_P00])[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[dP00])[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[DIR_P00])[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[DIR_P00])[ke]=zero;
+//          //(D.f[dP00])[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[dP00])[ke]=zero;
 //       }
 
 //       q = q_dirN[k];
@@ -2950,10 +2950,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 	     VeloZ = fac*vx3;
 // 		 y = true;
 //          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-//          (D.f[DIR_0M0])[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[d0M0])[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[DIR_0M0])[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[DIR_0M0])[ks]=zero;
+//          //(D.f[d0M0])[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[d0M0])[ks]=zero;
 //       }
 
 //       q = q_dirS[k];
@@ -2964,10 +2964,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 	     VeloZ = fac*vx3;
 // 		 y = true;
 //          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-//          (D.f[DIR_0P0])[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[d0P0])[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[DIR_0P0])[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[DIR_0P0])[kn]=zero;
+//          //(D.f[d0P0])[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[d0P0])[kn]=zero;
 //       }
 
 //       q = q_dirT[k];
@@ -2978,10 +2978,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 VeloZ = c0o1;
 // 		 z = true;
 //          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-//          (D.f[DIR_00M])[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[d00M])[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[DIR_00M])[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[DIR_00M])[kb]=one;
+//          //(D.f[d00M])[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[d00M])[kb]=one;
 //       }
 
 //       q = q_dirB[k];
@@ -2992,10 +2992,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 VeloZ = c0o1;
 // 		 z = true;
 //          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-//          (D.f[DIR_00P])[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[d00P])[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[DIR_00P])[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[DIR_00P])[kt]=zero;
+//          //(D.f[d00P])[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[d00P])[kt]=zero;
 //       }
 
 //       q = q_dirNE[k];
@@ -3007,10 +3007,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_MM0])[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[dMM0])[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[DIR_MM0])[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[DIR_MM0])[ksw]=zero;
+//          //(D.f[dMM0])[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[dMM0])[ksw]=zero;
 //       }
 
 //       q = q_dirSW[k];
@@ -3022,10 +3022,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_PP0])[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[dPP0])[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[DIR_PP0])[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[DIR_PP0])[kne]=zero;
+//          //(D.f[dPP0])[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[dPP0])[kne]=zero;
 //       }
 
 //       q = q_dirSE[k];
@@ -3037,10 +3037,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_MP0])[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[dMP0])[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[DIR_MP0])[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[DIR_MP0])[knw]=zero;
+//          //(D.f[dMP0])[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[dMP0])[knw]=zero;
 //       }
 
 //       q = q_dirNW[k];
@@ -3052,10 +3052,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_PM0])[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[dPM0])[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[DIR_PM0])[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[DIR_PM0])[kse]=zero;
+//          //(D.f[dPM0])[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[dPM0])[kse]=zero;
 //       }
 
 //       q = q_dirTE[k];
@@ -3068,10 +3068,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_M0M])[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[dM0M])[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[DIR_M0M])[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[DIR_M0M])[kbw]=zero;
+//          //(D.f[dM0M])[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[dM0M])[kbw]=zero;
 //       }
 
 //       q = q_dirBW[k];
@@ -3083,10 +3083,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_P0P])[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[dP0P])[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[DIR_P0P])[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[DIR_P0P])[kte]=zero;
+//          //(D.f[dP0P])[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[dP0P])[kte]=zero;
 //       }
 
 //       q = q_dirBE[k];
@@ -3098,10 +3098,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_M0P])[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[dM0P])[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[DIR_M0P])[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[DIR_M0P])[ktw]=zero;
+//          //(D.f[dM0P])[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[dM0P])[ktw]=zero;
 //       }
 
 //       q = q_dirTW[k];
@@ -3113,10 +3113,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_P0M])[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[dP0M])[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[DIR_P0M])[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[DIR_P0M])[kbe]=zero;
+//          //(D.f[dP0M])[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[dP0M])[kbe]=zero;
 //       }
 
 //       q = q_dirTN[k];
@@ -3128,10 +3128,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_0MM])[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[d0MM])[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[DIR_0MM])[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[DIR_0MM])[kbs]=zero;
+//          //(D.f[d0MM])[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[d0MM])[kbs]=zero;
 //       }
 
 //       q = q_dirBS[k];
@@ -3143,10 +3143,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_0PP])[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[d0PP])[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[DIR_0PP])[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[DIR_0PP])[ktn]=zero;
+//          //(D.f[d0PP])[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[d0PP])[ktn]=zero;
 //       }
 
 //       q = q_dirBN[k];
@@ -3158,10 +3158,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_0MP])[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[d0MP])[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[DIR_0MP])[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[DIR_0MP])[kts]=zero;
+//          //(D.f[d0MP])[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[d0MP])[kts]=zero;
 //       }
 
 //       q = q_dirTS[k];
@@ -3173,10 +3173,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_0PM])[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[d0PM])[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[DIR_0PM])[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[DIR_0PM])[kbn]=zero;
+//          //(D.f[d0PM])[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[d0PM])[kbn]=zero;
 //       }
 
 //       q = q_dirTNE[k];
@@ -3189,10 +3189,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_MMM])[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[dMMM])[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[DIR_MMM])[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[DIR_MMM])[kbsw]=zero;
+//          //(D.f[dMMM])[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[dMMM])[kbsw]=zero;
 //       }
 
 //       q = q_dirBSW[k];
@@ -3205,10 +3205,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_PPP])[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[dPPP])[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[DIR_PPP])[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[DIR_PPP])[ktne]=zero;
+//          //(D.f[dPPP])[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[dPPP])[ktne]=zero;
 //       }
 
 //       q = q_dirBNE[k];
@@ -3221,10 +3221,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_MMP])[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[dMMP])[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[DIR_MMP])[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[DIR_MMP])[ktsw]=zero;
+//          //(D.f[dMMP])[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[dMMP])[ktsw]=zero;
 //       }
 
 //       q = q_dirTSW[k];
@@ -3237,10 +3237,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_PPM])[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[dPPM])[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[DIR_PPM])[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[DIR_PPM])[kbne]=zero;
+//          //(D.f[dPPM])[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[dPPM])[kbne]=zero;
 //       }
 
 //       q = q_dirTSE[k];
@@ -3253,10 +3253,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_MPM])[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[dMPM])[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[DIR_MPM])[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[DIR_MPM])[kbnw]=zero;
+//          //(D.f[dMPM])[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[dMPM])[kbnw]=zero;
 //       }
 
 //       q = q_dirBNW[k];
@@ -3269,10 +3269,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_PMP])[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[dPMP])[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[DIR_PMP])[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[DIR_PMP])[ktse]=zero;
+//          //(D.f[dPMP])[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[dPMP])[ktse]=zero;
 //       }
 
 //       q = q_dirBSE[k];
@@ -3285,10 +3285,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_MPP])[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[dMPP])[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[DIR_MPP])[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[DIR_MPP])[ktnw]=zero;
+//          //(D.f[dMPP])[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[dMPP])[ktnw]=zero;
 //       }
 
 //       q = q_dirTNW[k];
@@ -3301,10 +3301,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity(
 // 		 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[DIR_PMM])[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[dPMM])[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[DIR_PMM])[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[DIR_PMM])[kbse]=zero;
+//          //(D.f[dPMM])[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[dPMM])[kbse]=zero;
 //       }
 //    }
 // }
@@ -3365,63 +3365,63 @@ __global__ void QSlipGeomDeviceComp27(
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
    } 
    else
    {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -3442,128 +3442,128 @@ __global__ void QSlipGeomDeviceComp27(
             *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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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[DIR_P00 * numberOfBCnodes];
-      nx_dirW   = &NormalX[DIR_M00 * numberOfBCnodes];
-      nx_dirN   = &NormalX[DIR_0P0 * numberOfBCnodes];
-      nx_dirS   = &NormalX[DIR_0M0 * numberOfBCnodes];
-      nx_dirT   = &NormalX[DIR_00P * numberOfBCnodes];
-      nx_dirB   = &NormalX[DIR_00M * numberOfBCnodes];
-      nx_dirNE  = &NormalX[DIR_PP0 * numberOfBCnodes];
-      nx_dirSW  = &NormalX[DIR_MM0 * numberOfBCnodes];
-      nx_dirSE  = &NormalX[DIR_PM0 * numberOfBCnodes];
-      nx_dirNW  = &NormalX[DIR_MP0 * numberOfBCnodes];
-      nx_dirTE  = &NormalX[DIR_P0P * numberOfBCnodes];
-      nx_dirBW  = &NormalX[DIR_M0M * numberOfBCnodes];
-      nx_dirBE  = &NormalX[DIR_P0M * numberOfBCnodes];
-      nx_dirTW  = &NormalX[DIR_M0P * numberOfBCnodes];
-      nx_dirTN  = &NormalX[DIR_0PP * numberOfBCnodes];
-      nx_dirBS  = &NormalX[DIR_0MM * numberOfBCnodes];
-      nx_dirBN  = &NormalX[DIR_0PM * numberOfBCnodes];
-      nx_dirTS  = &NormalX[DIR_0MP * numberOfBCnodes];
-      nx_dirTNE = &NormalX[DIR_PPP * numberOfBCnodes];
-      nx_dirTSW = &NormalX[DIR_MMP * numberOfBCnodes];
-      nx_dirTSE = &NormalX[DIR_PMP * numberOfBCnodes];
-      nx_dirTNW = &NormalX[DIR_MPP * numberOfBCnodes];
-      nx_dirBNE = &NormalX[DIR_PPM * numberOfBCnodes];
-      nx_dirBSW = &NormalX[DIR_MMM * numberOfBCnodes];
-      nx_dirBSE = &NormalX[DIR_PMM * numberOfBCnodes];
-      nx_dirBNW = &NormalX[DIR_MPM * numberOfBCnodes];
+      nx_dirE   = &NormalX[dP00 * numberOfBCnodes];
+      nx_dirW   = &NormalX[dM00 * numberOfBCnodes];
+      nx_dirN   = &NormalX[d0P0 * numberOfBCnodes];
+      nx_dirS   = &NormalX[d0M0 * numberOfBCnodes];
+      nx_dirT   = &NormalX[d00P * numberOfBCnodes];
+      nx_dirB   = &NormalX[d00M * numberOfBCnodes];
+      nx_dirNE  = &NormalX[dPP0 * numberOfBCnodes];
+      nx_dirSW  = &NormalX[dMM0 * numberOfBCnodes];
+      nx_dirSE  = &NormalX[dPM0 * numberOfBCnodes];
+      nx_dirNW  = &NormalX[dMP0 * numberOfBCnodes];
+      nx_dirTE  = &NormalX[dP0P * numberOfBCnodes];
+      nx_dirBW  = &NormalX[dM0M * numberOfBCnodes];
+      nx_dirBE  = &NormalX[dP0M * numberOfBCnodes];
+      nx_dirTW  = &NormalX[dM0P * numberOfBCnodes];
+      nx_dirTN  = &NormalX[d0PP * numberOfBCnodes];
+      nx_dirBS  = &NormalX[d0MM * numberOfBCnodes];
+      nx_dirBN  = &NormalX[d0PM * numberOfBCnodes];
+      nx_dirTS  = &NormalX[d0MP * numberOfBCnodes];
+      nx_dirTNE = &NormalX[dPPP * numberOfBCnodes];
+      nx_dirTSW = &NormalX[dMMP * numberOfBCnodes];
+      nx_dirTSE = &NormalX[dPMP * numberOfBCnodes];
+      nx_dirTNW = &NormalX[dMPP * numberOfBCnodes];
+      nx_dirBNE = &NormalX[dPPM * numberOfBCnodes];
+      nx_dirBSW = &NormalX[dMMM * numberOfBCnodes];
+      nx_dirBSE = &NormalX[dPMM * numberOfBCnodes];
+      nx_dirBNW = &NormalX[dMPM * 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[DIR_P00 * numberOfBCnodes];
-      ny_dirW   = &NormalY[DIR_M00 * numberOfBCnodes];
-      ny_dirN   = &NormalY[DIR_0P0 * numberOfBCnodes];
-      ny_dirS   = &NormalY[DIR_0M0 * numberOfBCnodes];
-      ny_dirT   = &NormalY[DIR_00P * numberOfBCnodes];
-      ny_dirB   = &NormalY[DIR_00M * numberOfBCnodes];
-      ny_dirNE  = &NormalY[DIR_PP0 * numberOfBCnodes];
-      ny_dirSW  = &NormalY[DIR_MM0 * numberOfBCnodes];
-      ny_dirSE  = &NormalY[DIR_PM0 * numberOfBCnodes];
-      ny_dirNW  = &NormalY[DIR_MP0 * numberOfBCnodes];
-      ny_dirTE  = &NormalY[DIR_P0P * numberOfBCnodes];
-      ny_dirBW  = &NormalY[DIR_M0M * numberOfBCnodes];
-      ny_dirBE  = &NormalY[DIR_P0M * numberOfBCnodes];
-      ny_dirTW  = &NormalY[DIR_M0P * numberOfBCnodes];
-      ny_dirTN  = &NormalY[DIR_0PP * numberOfBCnodes];
-      ny_dirBS  = &NormalY[DIR_0MM * numberOfBCnodes];
-      ny_dirBN  = &NormalY[DIR_0PM * numberOfBCnodes];
-      ny_dirTS  = &NormalY[DIR_0MP * numberOfBCnodes];
-      ny_dirTNE = &NormalY[DIR_PPP * numberOfBCnodes];
-      ny_dirTSW = &NormalY[DIR_MMP * numberOfBCnodes];
-      ny_dirTSE = &NormalY[DIR_PMP * numberOfBCnodes];
-      ny_dirTNW = &NormalY[DIR_MPP * numberOfBCnodes];
-      ny_dirBNE = &NormalY[DIR_PPM * numberOfBCnodes];
-      ny_dirBSW = &NormalY[DIR_MMM * numberOfBCnodes];
-      ny_dirBSE = &NormalY[DIR_PMM * numberOfBCnodes];
-      ny_dirBNW = &NormalY[DIR_MPM * numberOfBCnodes];
+      ny_dirE   = &NormalY[dP00 * numberOfBCnodes];
+      ny_dirW   = &NormalY[dM00 * numberOfBCnodes];
+      ny_dirN   = &NormalY[d0P0 * numberOfBCnodes];
+      ny_dirS   = &NormalY[d0M0 * numberOfBCnodes];
+      ny_dirT   = &NormalY[d00P * numberOfBCnodes];
+      ny_dirB   = &NormalY[d00M * numberOfBCnodes];
+      ny_dirNE  = &NormalY[dPP0 * numberOfBCnodes];
+      ny_dirSW  = &NormalY[dMM0 * numberOfBCnodes];
+      ny_dirSE  = &NormalY[dPM0 * numberOfBCnodes];
+      ny_dirNW  = &NormalY[dMP0 * numberOfBCnodes];
+      ny_dirTE  = &NormalY[dP0P * numberOfBCnodes];
+      ny_dirBW  = &NormalY[dM0M * numberOfBCnodes];
+      ny_dirBE  = &NormalY[dP0M * numberOfBCnodes];
+      ny_dirTW  = &NormalY[dM0P * numberOfBCnodes];
+      ny_dirTN  = &NormalY[d0PP * numberOfBCnodes];
+      ny_dirBS  = &NormalY[d0MM * numberOfBCnodes];
+      ny_dirBN  = &NormalY[d0PM * numberOfBCnodes];
+      ny_dirTS  = &NormalY[d0MP * numberOfBCnodes];
+      ny_dirTNE = &NormalY[dPPP * numberOfBCnodes];
+      ny_dirTSW = &NormalY[dMMP * numberOfBCnodes];
+      ny_dirTSE = &NormalY[dPMP * numberOfBCnodes];
+      ny_dirTNW = &NormalY[dMPP * numberOfBCnodes];
+      ny_dirBNE = &NormalY[dPPM * numberOfBCnodes];
+      ny_dirBSW = &NormalY[dMMM * numberOfBCnodes];
+      ny_dirBSE = &NormalY[dPMM * numberOfBCnodes];
+      ny_dirBNW = &NormalY[dMPM * 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[DIR_P00 * numberOfBCnodes];
-      nz_dirW   = &NormalZ[DIR_M00 * numberOfBCnodes];
-      nz_dirN   = &NormalZ[DIR_0P0 * numberOfBCnodes];
-      nz_dirS   = &NormalZ[DIR_0M0 * numberOfBCnodes];
-      nz_dirT   = &NormalZ[DIR_00P * numberOfBCnodes];
-      nz_dirB   = &NormalZ[DIR_00M * numberOfBCnodes];
-      nz_dirNE  = &NormalZ[DIR_PP0 * numberOfBCnodes];
-      nz_dirSW  = &NormalZ[DIR_MM0 * numberOfBCnodes];
-      nz_dirSE  = &NormalZ[DIR_PM0 * numberOfBCnodes];
-      nz_dirNW  = &NormalZ[DIR_MP0 * numberOfBCnodes];
-      nz_dirTE  = &NormalZ[DIR_P0P * numberOfBCnodes];
-      nz_dirBW  = &NormalZ[DIR_M0M * numberOfBCnodes];
-      nz_dirBE  = &NormalZ[DIR_P0M * numberOfBCnodes];
-      nz_dirTW  = &NormalZ[DIR_M0P * numberOfBCnodes];
-      nz_dirTN  = &NormalZ[DIR_0PP * numberOfBCnodes];
-      nz_dirBS  = &NormalZ[DIR_0MM * numberOfBCnodes];
-      nz_dirBN  = &NormalZ[DIR_0PM * numberOfBCnodes];
-      nz_dirTS  = &NormalZ[DIR_0MP * numberOfBCnodes];
-      nz_dirTNE = &NormalZ[DIR_PPP * numberOfBCnodes];
-      nz_dirTSW = &NormalZ[DIR_MMP * numberOfBCnodes];
-      nz_dirTSE = &NormalZ[DIR_PMP * numberOfBCnodes];
-      nz_dirTNW = &NormalZ[DIR_MPP * numberOfBCnodes];
-      nz_dirBNE = &NormalZ[DIR_PPM * numberOfBCnodes];
-      nz_dirBSW = &NormalZ[DIR_MMM * numberOfBCnodes];
-      nz_dirBSE = &NormalZ[DIR_PMM * numberOfBCnodes];
-      nz_dirBNW = &NormalZ[DIR_MPM * numberOfBCnodes];
+      nz_dirE   = &NormalZ[dP00 * numberOfBCnodes];
+      nz_dirW   = &NormalZ[dM00 * numberOfBCnodes];
+      nz_dirN   = &NormalZ[d0P0 * numberOfBCnodes];
+      nz_dirS   = &NormalZ[d0M0 * numberOfBCnodes];
+      nz_dirT   = &NormalZ[d00P * numberOfBCnodes];
+      nz_dirB   = &NormalZ[d00M * numberOfBCnodes];
+      nz_dirNE  = &NormalZ[dPP0 * numberOfBCnodes];
+      nz_dirSW  = &NormalZ[dMM0 * numberOfBCnodes];
+      nz_dirSE  = &NormalZ[dPM0 * numberOfBCnodes];
+      nz_dirNW  = &NormalZ[dMP0 * numberOfBCnodes];
+      nz_dirTE  = &NormalZ[dP0P * numberOfBCnodes];
+      nz_dirBW  = &NormalZ[dM0M * numberOfBCnodes];
+      nz_dirBE  = &NormalZ[dP0M * numberOfBCnodes];
+      nz_dirTW  = &NormalZ[dM0P * numberOfBCnodes];
+      nz_dirTN  = &NormalZ[d0PP * numberOfBCnodes];
+      nz_dirBS  = &NormalZ[d0MM * numberOfBCnodes];
+      nz_dirBN  = &NormalZ[d0PM * numberOfBCnodes];
+      nz_dirTS  = &NormalZ[d0MP * numberOfBCnodes];
+      nz_dirTNE = &NormalZ[dPPP * numberOfBCnodes];
+      nz_dirTSW = &NormalZ[dMMP * numberOfBCnodes];
+      nz_dirTSE = &NormalZ[dPMP * numberOfBCnodes];
+      nz_dirTNW = &NormalZ[dMPP * numberOfBCnodes];
+      nz_dirBNE = &NormalZ[dPPM * numberOfBCnodes];
+      nz_dirBSW = &NormalZ[dMMM * numberOfBCnodes];
+      nz_dirBSE = &NormalZ[dPMM * numberOfBCnodes];
+      nz_dirBNW = &NormalZ[dMPM * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -3595,37 +3595,37 @@ __global__ void QSlipGeomDeviceComp27(
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[kbnw ];
+      real f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -3645,63 +3645,63 @@ __global__ void QSlipGeomDeviceComp27(
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
       } 
       else
       {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real VeloX = vx1;
@@ -3723,11 +3723,11 @@ __global__ void QSlipGeomDeviceComp27(
 
 	  //fac = fac * magS / (c1o3 * (one / om1 - c1o2));
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //real *facAst = &QQ[DIR_000 * numberOfBCnodes];
+	  //real *facAst = &QQ[d000 * numberOfBCnodes];
 
 	  //fac = fac * alpha + facAst[k] * (one - alpha);
 	  //facAst[k] = fac;
-	  //(&QQ[DIR_000 * numberOfBCnodes])[KQK] = fac;
+	  //(&QQ[d000 * numberOfBCnodes])[KQK] = fac;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  ////real uk = sqrtf(vx1*vx1 + vx2*vx2 + vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3776,84 +3776,84 @@ __global__ void QSlipGeomDeviceComp27(
       if (q>=c0o1 && q<=c1o1)
       {
 		 VeloX = vx1 - (vx1 * nx_dirE[k] + vx2 * ny_dirE[k] + vx3 * nz_dirE[k]) * nx_dirE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
 		 phi = fac / (q * fabs( nx_dirE[k]) + fac);
 		 VeloX *= phi;
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[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[dM00])[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];
       if (q>=c0o1 && q<=c1o1)
       {
 		 VeloX = vx1 - (vx1 * nx_dirW[k] + vx2 * ny_dirW[k] + vx3 * nz_dirW[k]) * nx_dirW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
 		 phi = fac / (q * fabs(-nx_dirW[k]) + fac);
 		 VeloX *= phi;
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P00])[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[dP00])[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];
       if (q>=c0o1 && q<=c1o1)
       {
 		 VeloY = vx2 - (vx1 * nx_dirN[k] + vx2 * ny_dirN[k] + vx3 * nz_dirN[k]) * ny_dirN[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
 		 phi = fac / (q * fabs( ny_dirN[k]) + fac);
 		 VeloY *= phi;
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0M0])[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[d0M0])[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];
       if (q>=c0o1 && q<=c1o1)
       {
 		 VeloY = vx2 - (vx1 * nx_dirS[k] + vx2 * ny_dirS[k] + vx3 * nz_dirS[k]) * ny_dirS[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
 		 phi = fac / (q * fabs(-ny_dirS[k]) + fac);
 		 VeloY *= phi;
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0P0])[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[d0P0])[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];
       if (q>=c0o1 && q<=c1o1)
       {
 		 VeloZ = vx3 - (vx1 * nx_dirT[k] + vx2 * ny_dirT[k] + vx3 * nz_dirT[k]) * nz_dirT[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
 		 phi = fac / (q * fabs( nz_dirT[k]) + fac);
 		 VeloZ *= phi;
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_00M])[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[d00M])[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];
       if (q>=c0o1 && q<=c1o1)
       {
 		 VeloZ = vx3 - (vx1 * nx_dirB[k] + vx2 * ny_dirB[k] + vx3 * nz_dirB[k]) * nz_dirB[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
 		 phi = fac / (q * fabs(-nz_dirB[k]) + fac);
 		 VeloZ *= phi;
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_00P])[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[d00P])[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];
@@ -3861,7 +3861,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * nx_dirNE[k];
 		 VeloY = vx2 - (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * ny_dirNE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3869,7 +3869,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MM0])[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[dMM0])[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];
@@ -3877,7 +3877,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * nx_dirSW[k];
 		 VeloY = vx2 - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * ny_dirSW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3885,7 +3885,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PP0])[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[dPP0])[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];
@@ -3893,7 +3893,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * nx_dirSE[k];
 		 VeloY = vx2 - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * ny_dirSE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3901,7 +3901,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MP0])[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[dMP0])[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];
@@ -3909,7 +3909,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * nx_dirNW[k];
 		 VeloY = vx2 - (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * ny_dirNW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3917,7 +3917,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PM0])[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[dPM0])[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];
@@ -3925,7 +3925,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nx_dirTE[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nz_dirTE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3933,7 +3933,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M0M])[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[dM0M])[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];
@@ -3941,7 +3941,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nx_dirBW[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nz_dirBW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3949,7 +3949,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P0P])[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[dP0P])[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];
@@ -3957,7 +3957,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nx_dirBE[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nz_dirBE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3965,7 +3965,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M0P])[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[dM0P])[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];
@@ -3973,7 +3973,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloX = vx1 - (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nx_dirTW[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nz_dirTW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3981,7 +3981,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P0M])[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[dP0M])[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];
@@ -3989,7 +3989,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloY = vx2 - (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * ny_dirTN[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * nz_dirTN[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -3997,7 +3997,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0MM])[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[d0MM])[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];
@@ -4005,7 +4005,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloY = vx2 - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * ny_dirBS[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * nz_dirBS[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4013,7 +4013,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0PP])[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[d0PP])[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];
@@ -4021,7 +4021,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloY = vx2 - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * ny_dirBN[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * nz_dirBN[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4029,7 +4029,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0MP])[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[d0MP])[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];
@@ -4037,7 +4037,7 @@ __global__ void QSlipGeomDeviceComp27(
       {
 		 VeloY = vx2 - (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * ny_dirTS[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * nz_dirTS[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4045,7 +4045,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0PM])[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[d0PM])[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];
@@ -4054,7 +4054,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * nx_dirTNE[k];
 		 VeloY = vx2 - (vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * ny_dirTNE[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * nz_dirTNE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4063,7 +4063,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MMM])[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[dMMM])[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];
@@ -4072,7 +4072,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * nx_dirBSW[k];
 		 VeloY = vx2 - (vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * ny_dirBSW[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * nz_dirBSW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4081,7 +4081,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PPP])[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[dPPP])[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];
@@ -4090,7 +4090,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * nx_dirBNE[k];
 		 VeloY = vx2 - (vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * ny_dirBNE[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * nz_dirBNE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4099,7 +4099,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MMP])[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[dMMP])[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];
@@ -4108,7 +4108,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * nx_dirTSW[k];
 		 VeloY = vx2 - (vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * ny_dirTSW[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * nz_dirTSW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4117,7 +4117,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PPM])[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[dPPM])[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];
@@ -4126,7 +4126,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * nx_dirTSE[k];
 		 VeloY = vx2 - (vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * ny_dirTSE[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * nz_dirTSE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4135,7 +4135,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MPM])[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[dMPM])[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];
@@ -4144,7 +4144,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * nx_dirBNW[k];
 		 VeloY = vx2 - (vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * ny_dirBNW[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * nz_dirBNW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4153,7 +4153,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PMP])[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[dPMP])[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];
@@ -4162,7 +4162,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * nx_dirBSE[k];
 		 VeloY = vx2 - (vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * ny_dirBSE[k];
 		 VeloZ = vx3 - (vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * nz_dirBSE[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = (phi > one) ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4171,7 +4171,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MPP])[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[dMPP])[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];
@@ -4180,7 +4180,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * nx_dirTNW[k];
 		 VeloY = vx2 - (vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * ny_dirTNW[k];
 		 VeloZ = vx3 - (vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * nz_dirTNW[k];
-		 //phi = fac * (one + magS / (Op0000002+uk) * (one-q));
+		 //phi = fac * (one + magS / (c0p0000002+uk) * (one-q));
 		 //phi = phi > one ? one:phi;
 		 //phi = fac; //Test
 		 q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!!
@@ -4189,7 +4189,7 @@ __global__ void QSlipGeomDeviceComp27(
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PMM])[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[dPMM])[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;
       }
    }
 }
@@ -4252,63 +4252,63 @@ __global__ void QSlipNormDeviceComp27(
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
    } 
    else
    {
-      D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-      D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-      D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-      D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-      D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-      D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-      D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-      D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-      D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-      D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-      D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-      D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-      D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-      D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-      D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-      D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-      D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-      D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-      D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-      D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-      D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-      D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-      D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-      D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-      D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-      D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-      D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -4329,128 +4329,128 @@ __global__ void QSlipNormDeviceComp27(
             *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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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[DIR_P00 * numberOfBCnodes];
-      nx_dirW   = &NormalX[DIR_M00 * numberOfBCnodes];
-      nx_dirN   = &NormalX[DIR_0P0 * numberOfBCnodes];
-      nx_dirS   = &NormalX[DIR_0M0 * numberOfBCnodes];
-      nx_dirT   = &NormalX[DIR_00P * numberOfBCnodes];
-      nx_dirB   = &NormalX[DIR_00M * numberOfBCnodes];
-      nx_dirNE  = &NormalX[DIR_PP0 * numberOfBCnodes];
-      nx_dirSW  = &NormalX[DIR_MM0 * numberOfBCnodes];
-      nx_dirSE  = &NormalX[DIR_PM0 * numberOfBCnodes];
-      nx_dirNW  = &NormalX[DIR_MP0 * numberOfBCnodes];
-      nx_dirTE  = &NormalX[DIR_P0P * numberOfBCnodes];
-      nx_dirBW  = &NormalX[DIR_M0M * numberOfBCnodes];
-      nx_dirBE  = &NormalX[DIR_P0M * numberOfBCnodes];
-      nx_dirTW  = &NormalX[DIR_M0P * numberOfBCnodes];
-      nx_dirTN  = &NormalX[DIR_0PP * numberOfBCnodes];
-      nx_dirBS  = &NormalX[DIR_0MM * numberOfBCnodes];
-      nx_dirBN  = &NormalX[DIR_0PM * numberOfBCnodes];
-      nx_dirTS  = &NormalX[DIR_0MP * numberOfBCnodes];
-      nx_dirTNE = &NormalX[DIR_PPP * numberOfBCnodes];
-      nx_dirTSW = &NormalX[DIR_MMP * numberOfBCnodes];
-      nx_dirTSE = &NormalX[DIR_PMP * numberOfBCnodes];
-      nx_dirTNW = &NormalX[DIR_MPP * numberOfBCnodes];
-      nx_dirBNE = &NormalX[DIR_PPM * numberOfBCnodes];
-      nx_dirBSW = &NormalX[DIR_MMM * numberOfBCnodes];
-      nx_dirBSE = &NormalX[DIR_PMM * numberOfBCnodes];
-      nx_dirBNW = &NormalX[DIR_MPM * numberOfBCnodes];
+      nx_dirE   = &NormalX[dP00 * numberOfBCnodes];
+      nx_dirW   = &NormalX[dM00 * numberOfBCnodes];
+      nx_dirN   = &NormalX[d0P0 * numberOfBCnodes];
+      nx_dirS   = &NormalX[d0M0 * numberOfBCnodes];
+      nx_dirT   = &NormalX[d00P * numberOfBCnodes];
+      nx_dirB   = &NormalX[d00M * numberOfBCnodes];
+      nx_dirNE  = &NormalX[dPP0 * numberOfBCnodes];
+      nx_dirSW  = &NormalX[dMM0 * numberOfBCnodes];
+      nx_dirSE  = &NormalX[dPM0 * numberOfBCnodes];
+      nx_dirNW  = &NormalX[dMP0 * numberOfBCnodes];
+      nx_dirTE  = &NormalX[dP0P * numberOfBCnodes];
+      nx_dirBW  = &NormalX[dM0M * numberOfBCnodes];
+      nx_dirBE  = &NormalX[dP0M * numberOfBCnodes];
+      nx_dirTW  = &NormalX[dM0P * numberOfBCnodes];
+      nx_dirTN  = &NormalX[d0PP * numberOfBCnodes];
+      nx_dirBS  = &NormalX[d0MM * numberOfBCnodes];
+      nx_dirBN  = &NormalX[d0PM * numberOfBCnodes];
+      nx_dirTS  = &NormalX[d0MP * numberOfBCnodes];
+      nx_dirTNE = &NormalX[dPPP * numberOfBCnodes];
+      nx_dirTSW = &NormalX[dMMP * numberOfBCnodes];
+      nx_dirTSE = &NormalX[dPMP * numberOfBCnodes];
+      nx_dirTNW = &NormalX[dMPP * numberOfBCnodes];
+      nx_dirBNE = &NormalX[dPPM * numberOfBCnodes];
+      nx_dirBSW = &NormalX[dMMM * numberOfBCnodes];
+      nx_dirBSE = &NormalX[dPMM * numberOfBCnodes];
+      nx_dirBNW = &NormalX[dMPM * 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[DIR_P00 * numberOfBCnodes];
-      ny_dirW   = &NormalY[DIR_M00 * numberOfBCnodes];
-      ny_dirN   = &NormalY[DIR_0P0 * numberOfBCnodes];
-      ny_dirS   = &NormalY[DIR_0M0 * numberOfBCnodes];
-      ny_dirT   = &NormalY[DIR_00P * numberOfBCnodes];
-      ny_dirB   = &NormalY[DIR_00M * numberOfBCnodes];
-      ny_dirNE  = &NormalY[DIR_PP0 * numberOfBCnodes];
-      ny_dirSW  = &NormalY[DIR_MM0 * numberOfBCnodes];
-      ny_dirSE  = &NormalY[DIR_PM0 * numberOfBCnodes];
-      ny_dirNW  = &NormalY[DIR_MP0 * numberOfBCnodes];
-      ny_dirTE  = &NormalY[DIR_P0P * numberOfBCnodes];
-      ny_dirBW  = &NormalY[DIR_M0M * numberOfBCnodes];
-      ny_dirBE  = &NormalY[DIR_P0M * numberOfBCnodes];
-      ny_dirTW  = &NormalY[DIR_M0P * numberOfBCnodes];
-      ny_dirTN  = &NormalY[DIR_0PP * numberOfBCnodes];
-      ny_dirBS  = &NormalY[DIR_0MM * numberOfBCnodes];
-      ny_dirBN  = &NormalY[DIR_0PM * numberOfBCnodes];
-      ny_dirTS  = &NormalY[DIR_0MP * numberOfBCnodes];
-      ny_dirTNE = &NormalY[DIR_PPP * numberOfBCnodes];
-      ny_dirTSW = &NormalY[DIR_MMP * numberOfBCnodes];
-      ny_dirTSE = &NormalY[DIR_PMP * numberOfBCnodes];
-      ny_dirTNW = &NormalY[DIR_MPP * numberOfBCnodes];
-      ny_dirBNE = &NormalY[DIR_PPM * numberOfBCnodes];
-      ny_dirBSW = &NormalY[DIR_MMM * numberOfBCnodes];
-      ny_dirBSE = &NormalY[DIR_PMM * numberOfBCnodes];
-      ny_dirBNW = &NormalY[DIR_MPM * numberOfBCnodes];
+      ny_dirE   = &NormalY[dP00 * numberOfBCnodes];
+      ny_dirW   = &NormalY[dM00 * numberOfBCnodes];
+      ny_dirN   = &NormalY[d0P0 * numberOfBCnodes];
+      ny_dirS   = &NormalY[d0M0 * numberOfBCnodes];
+      ny_dirT   = &NormalY[d00P * numberOfBCnodes];
+      ny_dirB   = &NormalY[d00M * numberOfBCnodes];
+      ny_dirNE  = &NormalY[dPP0 * numberOfBCnodes];
+      ny_dirSW  = &NormalY[dMM0 * numberOfBCnodes];
+      ny_dirSE  = &NormalY[dPM0 * numberOfBCnodes];
+      ny_dirNW  = &NormalY[dMP0 * numberOfBCnodes];
+      ny_dirTE  = &NormalY[dP0P * numberOfBCnodes];
+      ny_dirBW  = &NormalY[dM0M * numberOfBCnodes];
+      ny_dirBE  = &NormalY[dP0M * numberOfBCnodes];
+      ny_dirTW  = &NormalY[dM0P * numberOfBCnodes];
+      ny_dirTN  = &NormalY[d0PP * numberOfBCnodes];
+      ny_dirBS  = &NormalY[d0MM * numberOfBCnodes];
+      ny_dirBN  = &NormalY[d0PM * numberOfBCnodes];
+      ny_dirTS  = &NormalY[d0MP * numberOfBCnodes];
+      ny_dirTNE = &NormalY[dPPP * numberOfBCnodes];
+      ny_dirTSW = &NormalY[dMMP * numberOfBCnodes];
+      ny_dirTSE = &NormalY[dPMP * numberOfBCnodes];
+      ny_dirTNW = &NormalY[dMPP * numberOfBCnodes];
+      ny_dirBNE = &NormalY[dPPM * numberOfBCnodes];
+      ny_dirBSW = &NormalY[dMMM * numberOfBCnodes];
+      ny_dirBSE = &NormalY[dPMM * numberOfBCnodes];
+      ny_dirBNW = &NormalY[dMPM * 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[DIR_P00 * numberOfBCnodes];
-      nz_dirW   = &NormalZ[DIR_M00 * numberOfBCnodes];
-      nz_dirN   = &NormalZ[DIR_0P0 * numberOfBCnodes];
-      nz_dirS   = &NormalZ[DIR_0M0 * numberOfBCnodes];
-      nz_dirT   = &NormalZ[DIR_00P * numberOfBCnodes];
-      nz_dirB   = &NormalZ[DIR_00M * numberOfBCnodes];
-      nz_dirNE  = &NormalZ[DIR_PP0 * numberOfBCnodes];
-      nz_dirSW  = &NormalZ[DIR_MM0 * numberOfBCnodes];
-      nz_dirSE  = &NormalZ[DIR_PM0 * numberOfBCnodes];
-      nz_dirNW  = &NormalZ[DIR_MP0 * numberOfBCnodes];
-      nz_dirTE  = &NormalZ[DIR_P0P * numberOfBCnodes];
-      nz_dirBW  = &NormalZ[DIR_M0M * numberOfBCnodes];
-      nz_dirBE  = &NormalZ[DIR_P0M * numberOfBCnodes];
-      nz_dirTW  = &NormalZ[DIR_M0P * numberOfBCnodes];
-      nz_dirTN  = &NormalZ[DIR_0PP * numberOfBCnodes];
-      nz_dirBS  = &NormalZ[DIR_0MM * numberOfBCnodes];
-      nz_dirBN  = &NormalZ[DIR_0PM * numberOfBCnodes];
-      nz_dirTS  = &NormalZ[DIR_0MP * numberOfBCnodes];
-      nz_dirTNE = &NormalZ[DIR_PPP * numberOfBCnodes];
-      nz_dirTSW = &NormalZ[DIR_MMP * numberOfBCnodes];
-      nz_dirTSE = &NormalZ[DIR_PMP * numberOfBCnodes];
-      nz_dirTNW = &NormalZ[DIR_MPP * numberOfBCnodes];
-      nz_dirBNE = &NormalZ[DIR_PPM * numberOfBCnodes];
-      nz_dirBSW = &NormalZ[DIR_MMM * numberOfBCnodes];
-      nz_dirBSE = &NormalZ[DIR_PMM * numberOfBCnodes];
-      nz_dirBNW = &NormalZ[DIR_MPM * numberOfBCnodes];
+      nz_dirE   = &NormalZ[dP00 * numberOfBCnodes];
+      nz_dirW   = &NormalZ[dM00 * numberOfBCnodes];
+      nz_dirN   = &NormalZ[d0P0 * numberOfBCnodes];
+      nz_dirS   = &NormalZ[d0M0 * numberOfBCnodes];
+      nz_dirT   = &NormalZ[d00P * numberOfBCnodes];
+      nz_dirB   = &NormalZ[d00M * numberOfBCnodes];
+      nz_dirNE  = &NormalZ[dPP0 * numberOfBCnodes];
+      nz_dirSW  = &NormalZ[dMM0 * numberOfBCnodes];
+      nz_dirSE  = &NormalZ[dPM0 * numberOfBCnodes];
+      nz_dirNW  = &NormalZ[dMP0 * numberOfBCnodes];
+      nz_dirTE  = &NormalZ[dP0P * numberOfBCnodes];
+      nz_dirBW  = &NormalZ[dM0M * numberOfBCnodes];
+      nz_dirBE  = &NormalZ[dP0M * numberOfBCnodes];
+      nz_dirTW  = &NormalZ[dM0P * numberOfBCnodes];
+      nz_dirTN  = &NormalZ[d0PP * numberOfBCnodes];
+      nz_dirBS  = &NormalZ[d0MM * numberOfBCnodes];
+      nz_dirBN  = &NormalZ[d0PM * numberOfBCnodes];
+      nz_dirTS  = &NormalZ[d0MP * numberOfBCnodes];
+      nz_dirTNE = &NormalZ[dPPP * numberOfBCnodes];
+      nz_dirTSW = &NormalZ[dMMP * numberOfBCnodes];
+      nz_dirTSE = &NormalZ[dPMP * numberOfBCnodes];
+      nz_dirTNW = &NormalZ[dMPP * numberOfBCnodes];
+      nz_dirBNE = &NormalZ[dPPM * numberOfBCnodes];
+      nz_dirBSW = &NormalZ[dMMM * numberOfBCnodes];
+      nz_dirBSE = &NormalZ[dPMM * numberOfBCnodes];
+      nz_dirBNW = &NormalZ[dMPM * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -4482,37 +4482,37 @@ __global__ void QSlipNormDeviceComp27(
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[DIR_P00])[ke   ];
-      real f_E    = (D.f[DIR_M00])[kw   ];
-      real f_S    = (D.f[DIR_0P0])[kn   ];
-      real f_N    = (D.f[DIR_0M0])[ks   ];
-      real f_B    = (D.f[DIR_00P])[kt   ];
-      real f_T    = (D.f[DIR_00M])[kb   ];
-      real f_SW   = (D.f[DIR_PP0])[kne  ];
-      real f_NE   = (D.f[DIR_MM0])[ksw  ];
-      real f_NW   = (D.f[DIR_PM0])[kse  ];
-      real f_SE   = (D.f[DIR_MP0])[knw  ];
-      real f_BW   = (D.f[DIR_P0P])[kte  ];
-      real f_TE   = (D.f[DIR_M0M])[kbw  ];
-      real f_TW   = (D.f[DIR_P0M])[kbe  ];
-      real f_BE   = (D.f[DIR_M0P])[ktw  ];
-      real f_BS   = (D.f[DIR_0PP])[ktn  ];
-      real f_TN   = (D.f[DIR_0MM])[kbs  ];
-      real f_TS   = (D.f[DIR_0PM])[kbn  ];
-      real f_BN   = (D.f[DIR_0MP])[kts  ];
-      real f_BSW  = (D.f[DIR_PPP])[ktne ];
-      real f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      real f_BNW  = (D.f[DIR_PMP])[ktse ];
-      real f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      real f_TSW  = (D.f[DIR_PPM])[kbne ];
-      real f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      real f_TNW  = (D.f[DIR_PMM])[kbse ];
-      real f_TSE  = (D.f[DIR_MPM])[kbnw ];
+      real f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -4532,63 +4532,63 @@ __global__ void QSlipNormDeviceComp27(
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes];
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
       } 
       else
       {
-         D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes];
-         D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes];
-         D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes];
-         D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes];
-         D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes];
-         D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes];
-         D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes];
-         D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes];
-         D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes];
-         D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes];
-         D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes];
-         D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes];
-         D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes];
-         D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes];
-         D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes];
-         D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes];
-         D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes];
-         D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes];
-         D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes];
-         D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes];
-         D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes];
-         D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes];
-         D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes];
-         D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes];
-         D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes];
-         D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes];
-         D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes];
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real VeloX = vx1;
@@ -4610,11 +4610,11 @@ __global__ void QSlipNormDeviceComp27(
 
 	  fac = fac * magS / (c1o3 * (c1o1 / om1 - c1o2));
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  real *facAst = &QQ[DIR_000 * numberOfBCnodes];
+	  real *facAst = &QQ[d000 * numberOfBCnodes];
 
 	  fac = fac * alpha + facAst[k] * (c1o1 - alpha);
 	  facAst[k] = fac;
-	  //(&QQ[DIR_000 * numberOfBCnodes])[KQK] = fac;
+	  //(&QQ[d000 * numberOfBCnodes])[KQK] = fac;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  ////real uk = sqrtf(vx1*vx1 + vx2*vx2 + vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -4662,7 +4662,7 @@ __global__ void QSlipNormDeviceComp27(
 	  real un = c0o1;
 	  real ut = c0o1;
 	  real tangential = c0o1;
-	  //real smallSingle = Op0000002;
+	  //real cSmallSingle = c0p0000002;
 
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
@@ -4670,13 +4670,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirE[k] + vx2 * ny_dirE[k] + vx3 * nz_dirE[k]) * nx_dirE[k];
 		 un = fabs((vx1 * nx_dirE[k] + vx2 * ny_dirE[k] + vx3 * nz_dirE[k]) * nx_dirE[k]);
 		 ut = fabs(VeloX);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M00])[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[dM00])[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];
@@ -4685,13 +4685,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloX = vx1 - (vx1 * nx_dirW[k] + vx2 * ny_dirW[k] + vx3 * nz_dirW[k]) * nx_dirW[k];
 		 un = fabs(-(vx1 * nx_dirW[k] + vx2 * ny_dirW[k] + vx3 * nz_dirW[k]) * nx_dirW[k]);
 		 ut = fabs(-VeloX);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P00])[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[dP00])[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];
@@ -4700,13 +4700,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloY = vx2 - (vx1 * nx_dirN[k] + vx2 * ny_dirN[k] + vx3 * nz_dirN[k]) * ny_dirN[k];
 		 un = fabs( (vx1 * nx_dirN[k] + vx2 * ny_dirN[k] + vx3 * nz_dirN[k]) * ny_dirN[k]);
 		 ut = fabs( VeloY);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( ny_dirN[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0M0])[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[d0M0])[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];
@@ -4715,13 +4715,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloY = vx2 - (vx1 * nx_dirS[k] + vx2 * ny_dirS[k] + vx3 * nz_dirS[k]) * ny_dirS[k];
 		 un = fabs(-(vx1 * nx_dirS[k] + vx2 * ny_dirS[k] + vx3 * nz_dirS[k]) * ny_dirS[k]);
 		 ut = fabs(-VeloY);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-ny_dirS[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0P0])[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[d0P0])[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];
@@ -4730,13 +4730,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirT[k] + vx2 * ny_dirT[k] + vx3 * nz_dirT[k]) * nz_dirT[k];
 		 un = fabs( (vx1 * nx_dirT[k] + vx2 * ny_dirT[k] + vx3 * nz_dirT[k]) * nz_dirT[k]);
 		 ut = fabs( VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nz_dirT[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_00M])[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[d00M])[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];
@@ -4745,13 +4745,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirB[k] + vx2 * ny_dirB[k] + vx3 * nz_dirB[k]) * nz_dirB[k];
 		 un = fabs(-(vx1 * nx_dirB[k] + vx2 * ny_dirB[k] + vx3 * nz_dirB[k]) * nz_dirB[k]);
 		 ut = fabs(-VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nz_dirB[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_00P])[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[d00P])[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];
@@ -4761,13 +4761,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloY = vx2 - (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * ny_dirNE[k];
 		 un = fabs( (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * nx_dirNE[k] + (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * ny_dirNE[k]);
 		 ut = fabs( VeloX + VeloY);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirNE[k]+ny_dirNE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MM0])[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[dMM0])[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];
@@ -4777,13 +4777,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloY = vx2 - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * ny_dirSW[k];
 		 un = fabs(-(vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * nx_dirSW[k] - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * ny_dirSW[k]);
 		 ut = fabs(-VeloX - VeloY);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirSW[k]-ny_dirSW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PP0])[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[dPP0])[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];
@@ -4793,13 +4793,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloY = vx2 - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * ny_dirSE[k];
 		 un = fabs( (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * nx_dirSE[k] - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * ny_dirSE[k]);
 		 ut = fabs( VeloX - VeloY);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirSE[k]-ny_dirSE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MP0])[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[dMP0])[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];
@@ -4809,13 +4809,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloY = vx2 - (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * ny_dirNW[k];
 		 un = fabs(-(vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * nx_dirNW[k] + (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * ny_dirNW[k]);
 		 ut = fabs(-VeloX + VeloY);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirNW[k]+ny_dirNW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PM0])[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[dPM0])[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];
@@ -4825,13 +4825,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nz_dirTE[k];
 		 un = fabs( (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nx_dirTE[k] + (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nz_dirTE[k]);
 		 ut = fabs( VeloX + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirTE[k]+nz_dirTE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M0M])[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[dM0M])[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];
@@ -4841,13 +4841,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nz_dirBW[k];
 		 un = fabs(-(vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nx_dirBW[k] - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nz_dirBW[k]);
 		 ut = fabs(-VeloX - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirBW[k]-nz_dirBW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P0P])[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[dP0P])[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];
@@ -4857,13 +4857,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nz_dirBE[k];
 		 un = fabs( (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nx_dirBE[k] - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nz_dirBE[k]);
 		 ut = fabs( VeloX - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirBE[k]-nz_dirBE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_M0P])[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[dM0P])[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];
@@ -4873,13 +4873,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nz_dirTW[k];
 		 un = fabs(-(vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nx_dirTW[k] + (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nz_dirTW[k]);
 		 ut = fabs(-VeloX + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirTW[k]+nz_dirTW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_P0M])[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[dP0M])[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];
@@ -4889,13 +4889,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * nz_dirTN[k];
 		 un = fabs( (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * ny_dirTN[k] + (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * nz_dirTN[k]);
 		 ut = fabs( VeloY + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( ny_dirTN[k]+nz_dirTN[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0MM])[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[d0MM])[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];
@@ -4905,13 +4905,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * nz_dirBS[k];
 		 un = fabs(-(vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * ny_dirBS[k] - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * nz_dirBS[k]);
 		 ut = fabs(-VeloY - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-ny_dirBS[k]-nz_dirBS[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0PP])[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[d0PP])[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];
@@ -4921,13 +4921,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * nz_dirBN[k];
 		 un = fabs( (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * ny_dirBN[k] - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * nz_dirBN[k]);
 		 ut = fabs( VeloY - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( ny_dirBN[k]-nz_dirBN[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0MP])[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[d0MP])[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];
@@ -4937,13 +4937,13 @@ __global__ void QSlipNormDeviceComp27(
 		 VeloZ = vx3 - (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * nz_dirTS[k];
 		 un = fabs(-(vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * ny_dirTS[k] + (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * nz_dirTS[k]);
 		 ut = fabs(-VeloY + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-ny_dirTS[k]+nz_dirTS[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_0PM])[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[d0PM])[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];
@@ -4956,13 +4956,13 @@ __global__ void QSlipNormDeviceComp27(
 				   +(vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * ny_dirTNE[k] 
 				   +(vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * nz_dirTNE[k]);
 		 ut = fabs( VeloX + VeloY + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirTNE[k] + ny_dirTNE[k] + nz_dirTNE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MMM])[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[dMMM])[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];
@@ -4975,13 +4975,13 @@ __global__ void QSlipNormDeviceComp27(
 				   -(vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * ny_dirBSW[k] 
 				   -(vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * nz_dirBSW[k]);
 		 ut = fabs(-VeloX - VeloY - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirBSW[k] - ny_dirBSW[k] - nz_dirBSW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PPP])[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[dPPP])[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];
@@ -4994,13 +4994,13 @@ __global__ void QSlipNormDeviceComp27(
 				   +(vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * ny_dirBNE[k] 
 				   -(vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * nz_dirBNE[k]);
 		 ut = fabs( VeloX + VeloY - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirBNE[k] + ny_dirBNE[k] - nz_dirBNE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MMP])[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[dMMP])[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];
@@ -5013,13 +5013,13 @@ __global__ void QSlipNormDeviceComp27(
 				   -(vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * ny_dirTSW[k] 
 				   +(vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * nz_dirTSW[k]);
 		 ut = fabs(-VeloX - VeloY + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirTSW[k] - ny_dirTSW[k] + nz_dirTSW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PPM])[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[dPPM])[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];
@@ -5032,13 +5032,13 @@ __global__ void QSlipNormDeviceComp27(
 				   -(vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * ny_dirTSE[k] 
 				   +(vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * nz_dirTSE[k]);
 		 ut = fabs(+VeloX - VeloY + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirTSE[k] - ny_dirTSE[k] + nz_dirTSE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MPM])[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[dMPM])[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];
@@ -5051,13 +5051,13 @@ __global__ void QSlipNormDeviceComp27(
 				   +(vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * ny_dirBNW[k] 
 				   -(vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * nz_dirBNW[k]);
 		 ut = fabs(-VeloX + VeloY - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirBNW[k] + ny_dirBNW[k] - nz_dirBNW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PMP])[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[dPMP])[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];
@@ -5070,13 +5070,13 @@ __global__ void QSlipNormDeviceComp27(
 				   -(vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * ny_dirBSE[k] 
 				   -(vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * nz_dirBSE[k]);
 		 ut = fabs( VeloX - VeloY - VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs( nx_dirBSE[k] - ny_dirBSE[k] - nz_dirBSE[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_MPP])[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[dMPP])[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];
@@ -5089,13 +5089,13 @@ __global__ void QSlipNormDeviceComp27(
 				   +(vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * ny_dirTNW[k] 
 				   +(vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * nz_dirTNW[k]);
 		 ut = fabs(-VeloX + VeloY + VeloZ);
-		 tangential = ut / (ut + un + smallSingle);
+		 tangential = ut / (ut + un + cSmallSingle);
 		 qSlip = sliplength * fabs(-nx_dirTNW[k] + ny_dirTNW[k] + nz_dirTNW[k]);		//sliplength * e_i * n_i
 		 //qSlip = (qSlip < zero) ? zero:qSlip;
 		 //tangential = (tangential > one) ? one:tangential;
-		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
+		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[DIR_PMM])[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[dPMM])[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/core/GPU/StressBCs27.cu
similarity index 84%
rename from src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu
rename to src/gpu/core/GPU/StressBCs27.cu
index 4b9db6d8b05a0ed958b7416ae8f3d07d761fb71c..b9b538dbc643fee107780f5d34d3f3e91b762ef1 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu
+++ b/src/gpu/core/GPU/StressBCs27.cu
@@ -194,32 +194,32 @@ __global__ void QStressDeviceComp27(
             *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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -254,38 +254,38 @@ __global__ void QStressDeviceComp27(
       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[DIR_P00])[ke   ];     //post-coll f's
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
+      f_W    = (D.f[dP00])[ke   ];     //post-coll f's
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]);
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -636,49 +636,49 @@ __global__ void QStressDeviceComp27(
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M00])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ))/(c1o1+q);
+         (D.f[dM00])[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[DIR_P00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ))/(c1o1+q);
+         (D.f[dP00])[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[DIR_0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ))/(c1o1+q);
+         (D.f[d0M0])[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[DIR_0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ))/(c1o1+q);
+         (D.f[d0P0])[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[DIR_00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ))/(c1o1+q);
+         (D.f[d00M])[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[DIR_00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
+         (D.f[d00P])[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[DIR_MM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
+         (D.f[dMM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
          wallMomentumX +=  -(c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
          wallMomentumY +=  -(c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
       }
@@ -686,7 +686,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
+         (D.f[dPP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
       }
@@ -694,7 +694,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
+         (D.f[dMP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
          wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
          wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
       }
@@ -702,7 +702,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
+         (D.f[dPM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
       }
@@ -710,7 +710,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
+         (D.f[dM0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
       }
@@ -718,7 +718,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
+         (D.f[dP0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
       }
@@ -726,7 +726,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
+         (D.f[dM0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
       }
@@ -734,7 +734,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
+         (D.f[dP0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
       }
@@ -742,7 +742,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
+         (D.f[d0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
       }
@@ -750,7 +750,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
+         (D.f[d0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
       }
@@ -758,7 +758,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
+         (D.f[d0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
       }
@@ -766,7 +766,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
+         (D.f[d0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
       }
@@ -774,7 +774,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
+         (D.f[dMMM])[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);
@@ -783,7 +783,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
+         (D.f[dPPP])[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);
@@ -792,7 +792,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
+         (D.f[dMMP])[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);
@@ -801,7 +801,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
+         (D.f[dPPM])[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);
@@ -810,7 +810,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
+         (D.f[dMPM])[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);
@@ -819,7 +819,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
+         (D.f[dPMP])[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);
@@ -828,7 +828,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
+         (D.f[dMPP])[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);
@@ -837,7 +837,7 @@ __global__ void QStressDeviceComp27(
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
+         (D.f[dPMM])[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);
@@ -906,32 +906,32 @@ __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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -967,38 +967,38 @@ __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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
+      f_W    = (D.f[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]);
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -1266,49 +1266,49 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M00])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ));
+         (D.f[dM00])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ));
          wallMomentumX += -(c6o1*c2o27*( VeloX     ));
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ));
+         (D.f[dP00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ));
          wallMomentumX -= - (c6o1*c2o27*(-VeloX     ));
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ));
+         (D.f[d0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ));
          wallMomentumY += - (c6o1*c2o27*( VeloY     ));
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ));
+         (D.f[d0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ));
          wallMomentumY -=  -(c6o1*c2o27*(-VeloY     ));
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ));
+         (D.f[d00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ));
          wallMomentumZ += - (c6o1*c2o27*( VeloZ     ));
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ));
+         (D.f[d00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ));
          wallMomentumZ -= -(c6o1*c2o27*(-VeloZ     ));
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY));
+         (D.f[dMM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY));
          wallMomentumX +=  -(c6o1*c1o54*(VeloX+VeloY));
          wallMomentumY +=  -(c6o1*c1o54*(VeloX+VeloY));
       }
@@ -1316,7 +1316,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY));
+         (D.f[dPP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY));
          wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY));
       }
@@ -1324,7 +1324,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY));
+         (D.f[dMP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY));
          wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY));
          wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY));
       }
@@ -1332,7 +1332,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY));
+         (D.f[dPM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY));
          wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY));
       }
@@ -1340,7 +1340,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ));
+         (D.f[dM0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ));
          wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ));
       }
@@ -1348,7 +1348,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ));
+         (D.f[dP0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ));
       }
@@ -1356,7 +1356,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ));
+         (D.f[dM0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ));
          wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ));
       }
@@ -1364,7 +1364,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ));
+         (D.f[dP0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ));
       }
@@ -1372,7 +1372,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ));
+         (D.f[d0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ));
          wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ));
       }
@@ -1380,7 +1380,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ));
+         (D.f[d0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ));
          wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ));
       }
@@ -1388,7 +1388,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ));
+         (D.f[d0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ));
          wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ));
       }
@@ -1396,7 +1396,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ));
+         (D.f[d0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ));
          wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ));
       }
@@ -1404,7 +1404,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
+         (D.f[dMMM])[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));
@@ -1413,7 +1413,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
+         (D.f[dPPP])[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));
@@ -1422,7 +1422,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
+         (D.f[dMMP])[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));
@@ -1431,7 +1431,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
+         (D.f[dPPM])[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));
@@ -1440,7 +1440,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
+         (D.f[dMPM])[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));
@@ -1449,7 +1449,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
+         (D.f[dPMP])[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));
@@ -1458,7 +1458,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
+         (D.f[dMPP])[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));
@@ -1467,7 +1467,7 @@ __global__ void BBStressDevice27( real* DD,
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
+         (D.f[dPMM])[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));
@@ -1536,32 +1536,32 @@ __global__ void BBStressPressureDevice27( 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[DIR_P00 * numberOfBCnodes];
-      q_dirW   = &QQ[DIR_M00 * numberOfBCnodes];
-      q_dirN   = &QQ[DIR_0P0 * numberOfBCnodes];
-      q_dirS   = &QQ[DIR_0M0 * numberOfBCnodes];
-      q_dirT   = &QQ[DIR_00P * numberOfBCnodes];
-      q_dirB   = &QQ[DIR_00M * numberOfBCnodes];
-      q_dirNE  = &QQ[DIR_PP0 * numberOfBCnodes];
-      q_dirSW  = &QQ[DIR_MM0 * numberOfBCnodes];
-      q_dirSE  = &QQ[DIR_PM0 * numberOfBCnodes];
-      q_dirNW  = &QQ[DIR_MP0 * numberOfBCnodes];
-      q_dirTE  = &QQ[DIR_P0P * numberOfBCnodes];
-      q_dirBW  = &QQ[DIR_M0M * numberOfBCnodes];
-      q_dirBE  = &QQ[DIR_P0M * numberOfBCnodes];
-      q_dirTW  = &QQ[DIR_M0P * numberOfBCnodes];
-      q_dirTN  = &QQ[DIR_0PP * numberOfBCnodes];
-      q_dirBS  = &QQ[DIR_0MM * numberOfBCnodes];
-      q_dirBN  = &QQ[DIR_0PM * numberOfBCnodes];
-      q_dirTS  = &QQ[DIR_0MP * numberOfBCnodes];
-      q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes];
-      q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes];
-      q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes];
-      q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes];
-      q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes];
-      q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes];
-      q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes];
-      q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes];
+      q_dirE   = &QQ[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1597,38 +1597,38 @@ __global__ void BBStressPressureDevice27( 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[DIR_P00])[ke   ];
-      f_E    = (D.f[DIR_M00])[kw   ];
-      f_S    = (D.f[DIR_0P0])[kn   ];
-      f_N    = (D.f[DIR_0M0])[ks   ];
-      f_B    = (D.f[DIR_00P])[kt   ];
-      f_T    = (D.f[DIR_00M])[kb   ];
-      f_SW   = (D.f[DIR_PP0])[kne  ];
-      f_NE   = (D.f[DIR_MM0])[ksw  ];
-      f_NW   = (D.f[DIR_PM0])[kse  ];
-      f_SE   = (D.f[DIR_MP0])[knw  ];
-      f_BW   = (D.f[DIR_P0P])[kte  ];
-      f_TE   = (D.f[DIR_M0M])[kbw  ];
-      f_TW   = (D.f[DIR_P0M])[kbe  ];
-      f_BE   = (D.f[DIR_M0P])[ktw  ];
-      f_BS   = (D.f[DIR_0PP])[ktn  ];
-      f_TN   = (D.f[DIR_0MM])[kbs  ];
-      f_TS   = (D.f[DIR_0PM])[kbn  ];
-      f_BN   = (D.f[DIR_0MP])[kts  ];
-      f_BSW  = (D.f[DIR_PPP])[ktne ];
-      f_BNE  = (D.f[DIR_MMP])[ktsw ];
-      f_BNW  = (D.f[DIR_PMP])[ktse ];
-      f_BSE  = (D.f[DIR_MPP])[ktnw ];
-      f_TSW  = (D.f[DIR_PPM])[kbne ];
-      f_TNE  = (D.f[DIR_MMM])[kbsw ];
-      f_TNW  = (D.f[DIR_PMM])[kbse ];
-      f_TSE  = (D.f[DIR_MPM])[kbnw ];
+      f_W    = (D.f[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[DIR_000])[kzero]);
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[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)) +
@@ -1896,49 +1896,49 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M00])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ));
+         (D.f[dM00])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ));
          wallMomentumX += -(c6o1*c2o27*( VeloX     ));
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ));
+         (D.f[dP00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ));
          wallMomentumX -= - (c6o1*c2o27*(-VeloX     ));
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ));
+         (D.f[d0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ));
          wallMomentumY += - (c6o1*c2o27*( VeloY     ));
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ));
+         (D.f[d0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ));
          wallMomentumY -=  -(c6o1*c2o27*(-VeloY     ));
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ));
+         (D.f[d00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ));
          wallMomentumZ += - (c6o1*c2o27*( VeloZ     ));
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ));
+         (D.f[d00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ));
          wallMomentumZ -= -(c6o1*c2o27*(-VeloZ     ));
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY));
+         (D.f[dMM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY));
          wallMomentumX +=  -(c6o1*c1o54*(VeloX+VeloY));
          wallMomentumY +=  -(c6o1*c1o54*(VeloX+VeloY));
       }
@@ -1946,7 +1946,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY));
+         (D.f[dPP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY));
          wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY));
       }
@@ -1954,7 +1954,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY));
+         (D.f[dMP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY));
          wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY));
          wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY));
       }
@@ -1962,7 +1962,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY));
+         (D.f[dPM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY));
          wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY));
       }
@@ -1970,7 +1970,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ));
+         (D.f[dM0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ));
          wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ));
       }
@@ -1978,7 +1978,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ));
+         (D.f[dP0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ));
       }
@@ -1986,7 +1986,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_M0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ));
+         (D.f[dM0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ));
          wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ));
       }
@@ -1994,7 +1994,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_P0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ));
+         (D.f[dP0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ));
       }
@@ -2002,7 +2002,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ));
+         (D.f[d0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ));
          wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ));
       }
@@ -2010,7 +2010,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ));
+         (D.f[d0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ));
          wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ));
       }
@@ -2018,7 +2018,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ));
+         (D.f[d0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ));
          wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ));
       }
@@ -2026,7 +2026,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ));
+         (D.f[d0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ));
          wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ));
       }
@@ -2034,7 +2034,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
+         (D.f[dMMM])[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));
@@ -2043,7 +2043,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
+         (D.f[dPPP])[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));
@@ -2052,7 +2052,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
+         (D.f[dMMP])[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));
@@ -2061,7 +2061,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
+         (D.f[dPPM])[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));
@@ -2070,7 +2070,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
+         (D.f[dMPM])[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));
@@ -2079,7 +2079,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
+         (D.f[dPMP])[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));
@@ -2088,7 +2088,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_MPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
+         (D.f[dMPP])[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));
@@ -2097,7 +2097,7 @@ __global__ void BBStressPressureDevice27( real* DD,
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[DIR_PMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
+         (D.f[dPMM])[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/core/GPU/ThinWallBCs27.cu b/src/gpu/core/GPU/ThinWallBCs27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..e35782207c90cada824b5c5423a566afa3645573
--- /dev/null
+++ b/src/gpu/core/GPU/ThinWallBCs27.cu
@@ -0,0 +1,1137 @@
+//  _    ___      __              __________      _     __        ______________   __
+// | |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____   /  ___/ __  / /  / /
+// | | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/  / /___/ /_/ / /  / /
+// | |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )  / /_) / ____/ /__/ / 
+// |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/   \____/_/    \_____/
+//
+//////////////////////////////////////////////////////////////////////////
+
+/* Device code */
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+/////////////////////////////////////////////////////////////////////////
+__global__ void QVelDeviceCompThinWallsPartOne27(
+	real* vx,
+	real* vy,
+	real* vz,
+	real* DD, 
+	int* k_Q, 
+	real* QQ,
+	uint numberOfBCnodes, 
+	real om1, 
+	uint* neighborX,
+	uint* neighborY,
+	uint* neighborZ,
+	unsigned long long numberOfLBnodes, 
+	bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      real VeloX = vx[k];
+      real VeloY = vy[k];
+      real VeloZ = vz[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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * numberOfBCnodes];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index
+      uint KQK  = k_Q[k];
+      uint kzero= KQK;
+      uint ke   = KQK;
+      uint kw   = neighborX[KQK];
+      uint kn   = KQK;
+      uint ks   = neighborY[KQK];
+      uint kt   = KQK;
+      uint kb   = neighborZ[KQK];
+      uint ksw  = neighborY[kw];
+      uint kne  = KQK;
+      uint kse  = ks;
+      uint knw  = kw;
+      uint kbw  = neighborZ[kw];
+      uint kte  = KQK;
+      uint kbe  = kb;
+      uint ktw  = kw;
+      uint kbs  = neighborZ[ks];
+      uint ktn  = KQK;
+      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 = KQK;
+      uint 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[d000])[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); 
+         
+
+      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
+
+      //////////////////////////////////////////////////////////////////////////
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho + c9o2 * ( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq);
+		 (D.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[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);
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QDeviceCompThinWallsPartOne27(
+	real* DD,
+	int* k_Q,
+	real* QQ,
+	unsigned int numberOfBCnodes,
+	real om1,
+	unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned long long numberOfLBnodes,
+	bool isEvenTimestep)
+{
+	Distributions27 D;
+	if (isEvenTimestep == true)
+	{
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	}
+	else
+	{
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	}
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if (k < 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[dP00 * numberOfBCnodes];
+		q_dirW = &QQ[dM00 * numberOfBCnodes];
+		q_dirN = &QQ[d0P0 * numberOfBCnodes];
+		q_dirS = &QQ[d0M0 * numberOfBCnodes];
+		q_dirT = &QQ[d00P * numberOfBCnodes];
+		q_dirB = &QQ[d00M * numberOfBCnodes];
+		q_dirNE = &QQ[dPP0 * numberOfBCnodes];
+		q_dirSW = &QQ[dMM0 * numberOfBCnodes];
+		q_dirSE = &QQ[dPM0 * numberOfBCnodes];
+		q_dirNW = &QQ[dMP0 * numberOfBCnodes];
+		q_dirTE = &QQ[dP0P * numberOfBCnodes];
+		q_dirBW = &QQ[dM0M * numberOfBCnodes];
+		q_dirBE = &QQ[dP0M * numberOfBCnodes];
+		q_dirTW = &QQ[dM0P * numberOfBCnodes];
+		q_dirTN = &QQ[d0PP * numberOfBCnodes];
+		q_dirBS = &QQ[d0MM * numberOfBCnodes];
+		q_dirBN = &QQ[d0PM * numberOfBCnodes];
+		q_dirTS = &QQ[d0MP * numberOfBCnodes];
+		q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+		q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+		q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+		q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+		q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+		q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+		q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+		q_dirBNW = &QQ[dMPM * 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];
+		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 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[dP00])[ke];
+		f_E = (D.f[dM00])[kw];
+		f_S = (D.f[d0P0])[kn];
+		f_N = (D.f[d0M0])[ks];
+		f_B = (D.f[d00P])[kt];
+		f_T = (D.f[d00M])[kb];
+		f_SW = (D.f[dPP0])[kne];
+		f_NE = (D.f[dMM0])[ksw];
+		f_NW = (D.f[dPM0])[kse];
+		f_SE = (D.f[dMP0])[knw];
+		f_BW = (D.f[dP0P])[kte];
+		f_TE = (D.f[dM0M])[kbw];
+		f_TW = (D.f[dP0M])[kbe];
+		f_BE = (D.f[dM0P])[ktw];
+		f_BS = (D.f[d0PP])[ktn];
+		f_TN = (D.f[d0MM])[kbs];
+		f_TS = (D.f[d0PM])[kbn];
+		f_BN = (D.f[d0MP])[kts];
+		f_BSW = (D.f[dPPP])[ktne];
+		f_BNE = (D.f[dMMP])[ktsw];
+		f_BNW = (D.f[dPMP])[ktse];
+		f_BSE = (D.f[dMPP])[ktnw];
+		f_TSW = (D.f[dPPM])[kbne];
+		f_TNE = (D.f[dMMM])[kbsw];
+		f_TNW = (D.f[dPMM])[kbse];
+		f_TSE = (D.f[dMPM])[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[d000])[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);
+
+
+		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 cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3) * (c1o1 + drho);
+		////////////////////////////////////////////////////////////////////////////////
+
+		q = q_dirE[k];
+		if (q >= c0o1 && q <= c1o1)
+		{
+			feq = c2o27* (drho + c9o2*(vx1)*(vx1) * (c1o1 + drho) - cu_sq);
+			(D.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[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);
+		}
+	}
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QThinWallsPartTwo27(
+	real* DD, 
+	int* k_Q, 
+	real* QQ,
+	uint numberOfBCnodes, 
+	uint* geom,
+	uint* neighborX,
+	uint* neighborY,
+	uint* neighborZ,
+	uint* neighborWSB,
+	unsigned long long 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 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * numberOfBCnodes];
+      ////////////////////////////////////////////////////////////////////////////////
+      //index
+      uint KQK  = k_Q[k];
+      //uint kzero= KQK;
+      uint ke   = KQK;
+      uint kw   = neighborX[KQK];
+      uint kn   = KQK;
+      uint ks   = neighborY[KQK];
+      uint kt   = KQK;
+      uint kb   = neighborZ[KQK];
+      uint ksw  = neighborY[kw];
+      uint kne  = KQK;
+      uint kse  = ks;
+      uint knw  = kw;
+      uint kbw  = neighborZ[kw];
+      uint kte  = KQK;
+      uint kbe  = kb;
+      uint ktw  = kw;
+      uint kbs  = neighborZ[ks];
+      uint ktn  = KQK;
+      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 = KQK;
+      uint kbsw = neighborZ[ksw];
+	  ////////////////////////////////////////////////////////////////////////////////
+	  //anti ET intermediate steps
+	  uint kmmm = neighborWSB[KQK]; // -1 -1 -1
+	  uint k0mm = neighborX[kmmm];  //  0 -1 -1
+	  uint km0m = neighborY[kmmm];  // -1  0 -1
+	  uint kmm0 = neighborZ[kmmm];  // -1 -1  0
+	  uint k0m0 = neighborX[kmm0];  //  0 -1  0
+	  uint km00 = neighborY[kmm0];  // -1  0  0
+	  /////////////////////////////////////////////////
+	  //final indices for anti ET
+	  uint kpmm = neighborX[k0mm];  //  1 -1 -1
+	  uint kmpm = neighborY[km0m];  // -1  1 -1
+	  uint kmmp = neighborZ[kmm0];  // -1 -1  1
+	  uint kmp0 = neighborY[km00];  // -1  1  0
+	  uint km0p = neighborZ[km00];  // -1  0  1
+	  uint k0mp = neighborZ[k0m0];  //  0 -1  1
+	  ////////////////////////////////////////////////////////////////////////////////
+	  Distributions27 D, DN;
+	  if (isEvenTimestep == true)
+	  {
+		  D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		  D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		  D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		  D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		  D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		  D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		  D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		  D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		  D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		  D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		  D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		  D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		  D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		  D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		  D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		  D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		  D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		  D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		  D.f[d000] = &DD[d000 * numberOfLBnodes];
+		  D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		  D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		  D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		  D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		  D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		  D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		  D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		  D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	  }
+	  else
+	  {
+		  D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		  D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		  D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		  D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		  D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		  D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		  D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		  D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		  D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		  D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		  D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		  D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		  D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		  D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		  D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		  D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		  D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		  D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		  D.f[d000] = &DD[d000 * numberOfLBnodes];
+		  D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		  D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		  D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		  D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		  D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		  D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		  D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		  D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	  }
+	  if (isEvenTimestep==false)
+      {
+         DN.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         DN.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         DN.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         DN.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         DN.f[d00P] = &DD[d00P * numberOfLBnodes];
+         DN.f[d00M] = &DD[d00M * numberOfLBnodes];
+         DN.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         DN.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         DN.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         DN.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         DN.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         DN.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         DN.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         DN.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         DN.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         DN.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         DN.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         DN.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         DN.f[d000] = &DD[d000 * numberOfLBnodes];
+         DN.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         DN.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         DN.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         DN.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         DN.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         DN.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         DN.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         DN.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         DN.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         DN.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         DN.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         DN.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         DN.f[d00M] = &DD[d00P * numberOfLBnodes];
+         DN.f[d00P] = &DD[d00M * numberOfLBnodes];
+         DN.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         DN.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         DN.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         DN.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         DN.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         DN.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         DN.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         DN.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         DN.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         DN.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         DN.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         DN.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         DN.f[d000] = &DD[d000 * numberOfLBnodes];
+         DN.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         DN.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         DN.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         DN.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         DN.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         DN.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         DN.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         DN.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //directions allways exchange
+	  //(-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)
+	  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //directions exchange if solid neighbor
+	  //( 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[dM00])[kw  ]; (DN.f[dM00])[kw  ]=(D.f[dM00])[kw  ]; (D.f[dM00])[kw  ]=tmp;}}
+	  q = q_dirW[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dP00])[ke  ]; (DN.f[dP00])[ke  ]=(D.f[dP00])[ke  ]; (D.f[dP00])[ke  ]=tmp;}}
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1){ if (geom[ks  ] < GEO_FLUID){tmp = (DN.f[d0M0])[ks  ]; (DN.f[d0M0])[ks  ]=(D.f[d0M0])[ks  ]; (D.f[d0M0])[ks  ]=tmp;}}
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[d0P0])[kn  ]; (DN.f[d0P0])[kn  ]=(D.f[d0P0])[kn  ]; (D.f[d0P0])[kn  ]=tmp;}}
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1){ if (geom[kb  ] < GEO_FLUID){tmp = (DN.f[d00M])[kb  ]; (DN.f[d00M])[kb  ]=(D.f[d00M])[kb  ]; (D.f[d00M])[kb  ]=tmp;}}
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[d00P])[kt  ]; (DN.f[d00P])[kt  ]=(D.f[d00P])[kt  ]; (D.f[d00P])[kt  ]=tmp;}}
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[ksw ] < GEO_FLUID){tmp = (DN.f[dMM0])[ksw ]; (DN.f[dMM0])[ksw ]=(D.f[dMM0])[ksw ]; (D.f[dMM0])[ksw ]=tmp;}}
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dPP0])[kne ]; (DN.f[dPP0])[kne ]=(D.f[dPP0])[kne ]; (D.f[dPP0])[kne ]=tmp;}}
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dMP0])[knw ]; (DN.f[dMP0])[knw ]=(D.f[dMP0])[knw ]; (D.f[dMP0])[knw ]=tmp;}}
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kmp0] < GEO_FLUID){tmp = (DN.f[dPM0])[kse ]; (DN.f[dPM0])[kse ]=(D.f[dPM0])[kse ]; (D.f[dPM0])[kse ]=tmp;}}
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbw ] < GEO_FLUID){tmp = (DN.f[dM0M])[kbw ]; (DN.f[dM0M])[kbw ]=(D.f[dM0M])[kbw ]; (D.f[dM0M])[kbw ]=tmp;}}
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dP0P])[kte ]; (DN.f[dP0P])[kte ]=(D.f[dP0P])[kte ]; (D.f[dP0P])[kte ]=tmp;}}
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dM0P])[ktw ]; (DN.f[dM0P])[ktw ]=(D.f[dM0P])[ktw ]; (D.f[dM0P])[ktw ]=tmp;}}
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[km0p] < GEO_FLUID){tmp = (DN.f[dP0M])[kbe ]; (DN.f[dP0M])[kbe ]=(D.f[dP0M])[kbe ]; (D.f[dP0M])[kbe ]=tmp;}}
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbs ] < GEO_FLUID){tmp = (DN.f[d0MM])[kbs ]; (DN.f[d0MM])[kbs ]=(D.f[d0MM])[kbs ]; (D.f[d0MM])[kbs ]=tmp;}}
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[d0PP])[ktn ]; (DN.f[d0PP])[ktn ]=(D.f[d0PP])[ktn ]; (D.f[d0PP])[ktn ]=tmp;}}
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[d0MP])[kts ]; (DN.f[d0MP])[kts ]=(D.f[d0MP])[kts ]; (D.f[d0MP])[kts ]=tmp;}}
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1){ if (geom[k0mp] < GEO_FLUID){tmp = (DN.f[d0PM])[kbn ]; (DN.f[d0PM])[kbn ]=(D.f[d0PM])[kbn ]; (D.f[d0PM])[kbn ]=tmp;}}
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbsw] < GEO_FLUID){tmp = (DN.f[dMMM])[kbsw]; (DN.f[dMMM])[kbsw]=(D.f[dMMM])[kbsw]; (D.f[dMMM])[kbsw]=tmp;}}
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dPPP])[ktne]; (DN.f[dPPP])[ktne]=(D.f[dPPP])[ktne]; (D.f[dPPP])[ktne]=tmp;}}
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dMMP])[ktsw]; (DN.f[dMMP])[ktsw]=(D.f[dMMP])[ktsw]; (D.f[dMMP])[ktsw]=tmp;}}
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmmp] < GEO_FLUID){tmp = (DN.f[dPPM])[kbne]; (DN.f[dPPM])[kbne]=(D.f[dPPM])[kbne]; (D.f[dPPM])[kbne]=tmp;}}
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dMPM])[kbnw]; (DN.f[dMPM])[kbnw]=(D.f[dMPM])[kbnw]; (D.f[dMPM])[kbnw]=tmp;}}
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmpm] < GEO_FLUID){tmp = (DN.f[dPMP])[ktse]; (DN.f[dPMP])[ktse]=(D.f[dPMP])[ktse]; (D.f[dPMP])[ktse]=tmp;}}
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kpmm] < GEO_FLUID){tmp = (DN.f[dMPP])[ktnw]; (DN.f[dMPP])[ktnw]=(D.f[dMPP])[ktnw]; (D.f[dMPP])[ktnw]=tmp;}}
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dPMM])[kbse]; (DN.f[dPMM])[kbse]=(D.f[dPMM])[kbse]; (D.f[dPMM])[kbse]=tmp;}}
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu b/src/gpu/core/GPU/TurbulenceIntensity.cu
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu
rename to src/gpu/core/GPU/TurbulenceIntensity.cu
index 46911fa39f61e455aa46af2645d37f1ef3786f3f..15f2cb2806fe096391a2f57a39c964f3ffd25c1a 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu
+++ b/src/gpu/core/GPU/TurbulenceIntensity.cu
@@ -54,7 +54,7 @@ __global__ void CalcTurbulenceIntensity(
     vf::gpu::ListIndices listIndices(nodeIndex, neighborX, neighborY, neighborZ);
 
     real distribution[27];
-    vf::gpu::read(distribution, dist, listIndices);
+    vf::gpu::getPreCollisionDistribution(distribution, dist, listIndices);
 
     // analogue to LBCalcMacCompSP27
     real rho = vf::lbm::getDensity(distribution);
diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.cu b/src/gpu/core/GPU/TurbulentViscosityKernels.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.cu
rename to src/gpu/core/GPU/TurbulentViscosityKernels.cu
diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.h b/src/gpu/core/GPU/TurbulentViscosityKernels.h
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.h
rename to src/gpu/core/GPU/TurbulentViscosityKernels.h
index 74d0e69a181e94c6d34e9207f203fb852d9d2fd1..1f83e5878fc4da2442f40597c8de9eba631fce18 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.h
+++ b/src/gpu/core/GPU/TurbulentViscosityKernels.h
@@ -38,7 +38,7 @@
 #include <cuda_runtime.h>
 
 #include "LBM/LB.h" 
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 #include <basics/constants/NumericConstants.h>
 
 using namespace vf::basics::constant;
diff --git a/src/gpu/core/GPU/VelocityBCs27.cu b/src/gpu/core/GPU/VelocityBCs27.cu
new file mode 100644
index 0000000000000000000000000000000000000000..f7e0a574578afb515b3a5665cfeaafe7bc315661
--- /dev/null
+++ b/src/gpu/core/GPU/VelocityBCs27.cu
@@ -0,0 +1,5844 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 VelocityBCs27.cu
+//! \ingroup GPU
+//! \author Martin Schoenherr, Anna Wellmann
+//======================================================================================
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include "basics/constants/NumericConstants.h"
+#include "LBM/GPUHelperFunctions/KernelUtilities.h"
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+using namespace vf::gpu;
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDeviceCompPlusSlip27(
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if (k < numberOfBCnodes)
+   {
+	   ////////////////////////////////////////////////////////////////////////////////
+	   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)
+	   ////////////////////////////////////////////////////////////////////////////////
+	   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[dP00 * numberOfBCnodes];
+	   q_dirW = &QQ[dM00 * numberOfBCnodes];
+	   q_dirN = &QQ[d0P0 * numberOfBCnodes];
+	   q_dirS = &QQ[d0M0 * numberOfBCnodes];
+	   q_dirT = &QQ[d00P * numberOfBCnodes];
+	   q_dirB = &QQ[d00M * numberOfBCnodes];
+	   q_dirNE = &QQ[dPP0 * numberOfBCnodes];
+	   q_dirSW = &QQ[dMM0 * numberOfBCnodes];
+	   q_dirSE = &QQ[dPM0 * numberOfBCnodes];
+	   q_dirNW = &QQ[dMP0 * numberOfBCnodes];
+	   q_dirTE = &QQ[dP0P * numberOfBCnodes];
+	   q_dirBW = &QQ[dM0M * numberOfBCnodes];
+	   q_dirBE = &QQ[dP0M * numberOfBCnodes];
+	   q_dirTW = &QQ[dM0P * numberOfBCnodes];
+	   q_dirTN = &QQ[d0PP * numberOfBCnodes];
+	   q_dirBS = &QQ[d0MM * numberOfBCnodes];
+	   q_dirBN = &QQ[d0PM * numberOfBCnodes];
+	   q_dirTS = &QQ[d0MP * numberOfBCnodes];
+	   q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+	   q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+	   q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+	   q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+	   q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+	   q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+	   q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+	   q_dirBNW = &QQ[dMPM * 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];
+	   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 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[dP00])[ke];
+	   f_E = (D.f[dM00])[kw];
+	   f_S = (D.f[d0P0])[kn];
+	   f_N = (D.f[d0M0])[ks];
+	   f_B = (D.f[d00P])[kt];
+	   f_T = (D.f[d00M])[kb];
+	   f_SW = (D.f[dPP0])[kne];
+	   f_NE = (D.f[dMM0])[ksw];
+	   f_NW = (D.f[dPM0])[kse];
+	   f_SE = (D.f[dMP0])[knw];
+	   f_BW = (D.f[dP0P])[kte];
+	   f_TE = (D.f[dM0M])[kbw];
+	   f_TW = (D.f[dP0M])[kbe];
+	   f_BE = (D.f[dM0P])[ktw];
+	   f_BS = (D.f[d0PP])[ktn];
+	   f_TN = (D.f[d0MM])[kbs];
+	   f_TS = (D.f[d0PM])[kbn];
+	   f_BN = (D.f[d0MP])[kts];
+	   f_BSW = (D.f[dPPP])[ktne];
+	   f_BNE = (D.f[dMMP])[ktsw];
+	   f_BNW = (D.f[dPMP])[ktse];
+	   f_BSE = (D.f[dMPP])[ktnw];
+	   f_TSW = (D.f[dPPM])[kbne];
+	   f_TNE = (D.f[dMMM])[kbsw];
+	   f_TNW = (D.f[dPMM])[kbse];
+	   f_TSE = (D.f[dMPM])[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[d000])[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);
+
+
+	   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 cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3) * (c1o1 + drho);
+
+	   //////////////////////////////////////////////////////////////////////////
+	   if (isEvenTimestep == false)
+	   {
+		   D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		   D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		   D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		   D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		   D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		   D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		   D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		   D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		   D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		   D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		   D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		   D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		   D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		   D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		   D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		   D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		   D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		   D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		   D.f[d000] = &DD[d000 * numberOfLBnodes];
+		   D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		   D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		   D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		   D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		   D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		   D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		   D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		   D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	   }
+	   else
+	   {
+		   D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		   D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		   D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		   D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		   D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		   D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		   D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		   D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		   D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		   D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		   D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		   D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		   D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		   D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		   D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		   D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		   D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		   D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		   D.f[d000] = &DD[d000 * numberOfLBnodes];
+		   D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		   D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		   D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		   D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		   D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		   D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		   D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		   D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	   }
+	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	   //Test
+	   //(D.f[d000])[k]=c1o10;
+	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	   //ToDo anders Klammern
+
+	   /////To Slip Or Not To Slip?
+	   // We assume slip BC if |vec(V_BC)|=1. To avoid problems we take V_BC*V_BC>0.99 (c99o100)
+	   if (VeloX*VeloX + VeloY*VeloY + VeloZ*VeloZ > c99o100)
+		{
+		   // vt=v-(n \dot v) *n
+		   // n=(VeloX,VeloY,VeloZ) a misuse of the velocity variable!
+		   real normalV = VeloX*vx1 + VeloY*vx2 + VeloZ*vx3;
+		   vx1 = vx1 - normalV*VeloX;
+		   vx2 = vx2 - normalV*VeloY;
+		   vx3 = vx3 - normalV*VeloZ;
+		}
+	  ////////////////
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
+         (D.f[dM00])[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[dM00])[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[dP00])[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[dP00])[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[d0M0])[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[d0M0])[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[d0P0])[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[d0P0])[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[d00M])[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[d00M])[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[d00P])[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[d00P])[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[dMM0])[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[dMM0])[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[dPP0])[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[dPP0])[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[dMP0])[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[dMP0])[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[dPM0])[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[dPM0])[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[dM0M])[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[dM0M])[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[dP0P])[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[dP0P])[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[dM0P])[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[dM0P])[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[dP0M])[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[dP0M])[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[d0MM])[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[d0MM])[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[d0PP])[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[d0PP])[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[d0MP])[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[d0MP])[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[d0PM])[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[d0PM])[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[dMMM])[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[dMMM])[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[dPPP])[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[dPPP])[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[dMMP])[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[dMMP])[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[dPPM])[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[dPPM])[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[dMPM])[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[dMPM])[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[dPMP])[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[dPMP])[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[dMPP])[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[dMPP])[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[dPMM])[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[dPMM])[kbse]=zero;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+__global__ void QVeloDeviceEQ27(
+    real* VeloX,
+    real* VeloY,
+    real* VeloZ,
+    real* DD, 
+    int* k_Q, 
+    int numberOfBCnodes, 
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long 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 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<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];
+      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];
+      ////////////////////////////////////////////////////////////////////////////////
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+
+			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+            // based on BGK Plus Comp
+			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			real mfcbb = (D.f[dP00])[ke   ];
+			real mfabb = (D.f[dM00])[kw   ];
+			real mfbcb = (D.f[d0P0])[kn   ];
+			real mfbab = (D.f[d0M0])[ks   ];
+			real mfbbc = (D.f[d00P])[kt   ];
+			real mfbba = (D.f[d00M])[kb   ];
+			real mfccb = (D.f[dPP0])[kne  ];
+			real mfaab = (D.f[dMM0])[ksw  ];
+			real mfcab = (D.f[dPM0])[kse  ];
+			real mfacb = (D.f[dMP0])[knw  ];
+			real mfcbc = (D.f[dP0P])[kte  ];
+			real mfaba = (D.f[dM0M])[kbw  ];
+			real mfcba = (D.f[dP0M])[kbe  ];
+			real mfabc = (D.f[dM0P])[ktw  ];
+			real mfbcc = (D.f[d0PP])[ktn  ];
+			real mfbaa = (D.f[d0MM])[kbs  ];
+			real mfbca = (D.f[d0PM])[kbn  ];
+			real mfbac = (D.f[d0MP])[kts  ];
+			real mfbbb = (D.f[d000])[kzero];
+			real mfccc = (D.f[dPPP])[ktne ];
+			real mfaac = (D.f[dMMP])[ktsw ];
+			real mfcac = (D.f[dPMP])[ktse ];
+			real mfacc = (D.f[dMPP])[ktnw ];
+			real mfcca = (D.f[dPPM])[kbne ];
+			real mfaaa = (D.f[dMMM])[kbsw ];
+			real mfcaa = (D.f[dPMM])[kbse ];
+			real mfaca = (D.f[dMPM])[kbnw ];
+			////////////////////////////////////////////////////////////////////////////////////
+			real rho   = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
+							 mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
+							 mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one
+			////////////////////////////////////////////////////////////////////////////////////
+			real vvx    = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
+						     (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
+						       (mfcbb-mfabb)) / rho;
+			real vvy    =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + 
+				             (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
+				               (mfbcb-mfbab)) / rho;
+			real vvz    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + 
+				             (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
+				               (mfbbc-mfbba)) / rho;
+			////////////////////////////////////////////////////////////////////////////////////
+			if(VeloX[k]!=c0o1) vvx = VeloX[k];
+			if(VeloY[k]!=c0o1) vvy = VeloY[k];
+			if(VeloZ[k]!=c0o1) vvz = VeloZ[k];
+			////////////////////////////////////////////////////////////////////////////////////
+			real vx2    = vvx * vvx;
+			real vy2    = vvy * vvy;
+			real vz2    = vvz * vvz;
+			////////////////////////////////////////////////////////////////////////////////////
+            real XXb    = -c2o3 + vx2;
+            real XXc    = -c1o2 * (XXb + c1o1 + vvx);
+            real XXa    = XXc + vvx;
+            real YYb    = -c2o3 + vy2;
+            real YYc    = -c1o2 * (YYb + c1o1 + vvy);
+            real YYa    = YYc + vvy;
+            real ZZb    = -c2o3 + vz2;
+            real ZZc    = -c1o2 * (ZZb + c1o1 + vvz);
+            real ZZa    = ZZc + vvz;
+			////////////////////////////////////////////////////////////////////////////////////
+            mfcbb = -rho * XXc * YYb * ZZb - c2o27 ; 
+			mfabb = -rho * XXa * YYb * ZZb - c2o27 ;
+			mfbcb = -rho * XXb * YYc * ZZb - c2o27 ;
+			mfbab = -rho * XXb * YYa * ZZb - c2o27 ;
+			mfbbc = -rho * XXb * YYb * ZZc - c2o27 ;
+			mfbba = -rho * XXb * YYb * ZZa - c2o27 ;
+			mfccb = -rho * XXc * YYc * ZZb - c1o54 ;
+			mfaab = -rho * XXa * YYa * ZZb - c1o54 ;
+			mfcab = -rho * XXc * YYa * ZZb - c1o54 ;
+			mfacb = -rho * XXa * YYc * ZZb - c1o54 ;
+			mfcbc = -rho * XXc * YYb * ZZc - c1o54 ;
+			mfaba = -rho * XXa * YYb * ZZa - c1o54 ;
+			mfcba = -rho * XXc * YYb * ZZa - c1o54 ;
+			mfabc = -rho * XXa * YYb * ZZc - c1o54 ;
+			mfbcc = -rho * XXb * YYc * ZZc - c1o54 ;
+			mfbaa = -rho * XXb * YYa * ZZa - c1o54 ;
+			mfbca = -rho * XXb * YYc * ZZa - c1o54 ;
+			mfbac = -rho * XXb * YYa * ZZc - c1o54 ;
+			mfbbb = -rho * XXb * YYb * ZZb - c8o27 ;
+			mfccc = -rho * XXc * YYc * ZZc - c1o216;
+			mfaac = -rho * XXa * YYa * ZZc - c1o216;
+			mfcac = -rho * XXc * YYa * ZZc - c1o216;
+			mfacc = -rho * XXa * YYc * ZZc - c1o216;
+			mfcca = -rho * XXc * YYc * ZZa - c1o216;
+			mfaaa = -rho * XXa * YYa * ZZa - c1o216;
+			mfcaa = -rho * XXc * YYa * ZZa - c1o216;
+			mfaca = -rho * XXa * YYc * ZZa - c1o216;
+			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			(D.f[dP00])[ke   ] = mfabb;//mfcbb;
+			(D.f[dM00])[kw   ] = mfcbb;//mfabb;
+			(D.f[d0P0])[kn   ] = mfbab;//mfbcb;
+			(D.f[d0M0])[ks   ] = mfbcb;//mfbab;
+			(D.f[d00P])[kt   ] = mfbba;//mfbbc;
+			(D.f[d00M])[kb   ] = mfbbc;//mfbba;
+			(D.f[dPP0])[kne  ] = mfaab;//mfccb;
+			(D.f[dMM0])[ksw  ] = mfccb;//mfaab;
+			(D.f[dPM0])[kse  ] = mfacb;//mfcab;
+			(D.f[dMP0])[knw  ] = mfcab;//mfacb;
+			(D.f[dP0P])[kte  ] = mfaba;//mfcbc;
+			(D.f[dM0M])[kbw  ] = mfcbc;//mfaba;
+			(D.f[dP0M])[kbe  ] = mfabc;//mfcba;
+			(D.f[dM0P])[ktw  ] = mfcba;//mfabc;
+			(D.f[d0PP])[ktn  ] = mfbaa;//mfbcc;
+			(D.f[d0MM])[kbs  ] = mfbcc;//mfbaa;
+			(D.f[d0PM])[kbn  ] = mfbac;//mfbca;
+			(D.f[d0MP])[kts  ] = mfbca;//mfbac;
+			(D.f[d000])[kzero] = mfbbb;//mfbbb;
+			(D.f[dPPP])[ktne ] = mfaaa;//mfccc;
+			(D.f[dMMP])[ktsw ] = mfcca;//mfaac;
+			(D.f[dPMP])[ktse ] = mfaca;//mfcac;
+			(D.f[dMPP])[ktnw ] = mfcaa;//mfacc;
+			(D.f[dPPM])[kbne ] = mfaac;//mfcca;
+			(D.f[dMMM])[kbsw ] = mfccc;//mfaaa;
+			(D.f[dPMM])[kbse ] = mfacc;//mfcaa;
+			(D.f[dMPM])[kbnw ] = mfcac;//mfaca;
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDeviceIncompHighNu27(
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      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)
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_W   = (D.f[dM00])[kw   ];
+      f_N   = (D.f[d0P0])[kn   ];
+      f_S   = (D.f[d0M0])[ks   ];
+      f_T   = (D.f[d00P])[kt   ];
+      f_B   = (D.f[d00M])[kb   ];
+      f_NE  = (D.f[dPP0])[kne  ];
+      f_SW  = (D.f[dMM0])[ksw  ];
+      f_SE  = (D.f[dPM0])[kse  ];
+      f_NW  = (D.f[dMP0])[knw  ];
+      f_TE  = (D.f[dP0P])[kte  ];
+      f_BW  = (D.f[dM0M])[kbw  ];
+      f_BE  = (D.f[dP0M])[kbe  ];
+      f_TW  = (D.f[dM0P])[ktw  ];
+      f_TN  = (D.f[d0PP])[ktn  ];
+      f_BS  = (D.f[d0MM])[kbs  ];
+      f_BN  = (D.f[d0PM])[kbn  ];
+      f_TS  = (D.f[d0MP])[kts  ];
+      f_TNE = (D.f[dPPP])[ktne ];
+      f_TSW = (D.f[dMMP])[ktsw ];
+      f_TSE = (D.f[dPMP])[ktse ];
+      f_TNW = (D.f[dMPP])[ktnw ];
+      f_BNE = (D.f[dPPM])[kbne ];
+      f_BSW = (D.f[dMMM])[kbsw ];
+      f_BSE = (D.f[dPMM])[kbse ];
+      f_BNW = (D.f[dMPM])[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[d000])[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));// / (one + 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));// / (one + 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));// / (one + drho); 
+
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	  //ToDo anders Klammern
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) /** (one + drho)*/-cu_sq); 
+         (D.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDeviceCompHighNu27(
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD,
+    int* k_Q,
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      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)
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_W   = (D.f[dM00])[kw   ];
+      f_N   = (D.f[d0P0])[kn   ];
+      f_S   = (D.f[d0M0])[ks   ];
+      f_T   = (D.f[d00P])[kt   ];
+      f_B   = (D.f[d00M])[kb   ];
+      f_NE  = (D.f[dPP0])[kne  ];
+      f_SW  = (D.f[dMM0])[ksw  ];
+      f_SE  = (D.f[dPM0])[kse  ];
+      f_NW  = (D.f[dMP0])[knw  ];
+      f_TE  = (D.f[dP0P])[kte  ];
+      f_BW  = (D.f[dM0M])[kbw  ];
+      f_BE  = (D.f[dP0M])[kbe  ];
+      f_TW  = (D.f[dM0P])[ktw  ];
+      f_TN  = (D.f[d0PP])[ktn  ];
+      f_BS  = (D.f[d0MM])[kbs  ];
+      f_BN  = (D.f[d0PM])[kbn  ];
+      f_TS  = (D.f[d0MP])[kts  ];
+      f_TNE = (D.f[dPPP])[ktne ];
+      f_TSW = (D.f[dMMP])[ktsw ];
+      f_TSE = (D.f[dPMP])[ktse ];
+      f_TNW = (D.f[dMPP])[ktnw ];
+      f_BNE = (D.f[dPPM])[kbne ];
+      f_BSW = (D.f[dMMM])[kbsw ];
+      f_BSE = (D.f[dPMM])[kbse ];
+      f_BNW = (D.f[dMPM])[kbnw ];
+      //f_W    = (D.f[dP00])[ke   ];
+      //f_E    = (D.f[dM00])[kw   ];
+      //f_S    = (D.f[d0P0])[kn   ];
+      //f_N    = (D.f[d0M0])[ks   ];
+      //f_B    = (D.f[d00P])[kt   ];
+      //f_T    = (D.f[d00M])[kb   ];
+      //f_SW   = (D.f[dPP0])[kne  ];
+      //f_NE   = (D.f[dMM0])[ksw  ];
+      //f_NW   = (D.f[dPM0])[kse  ];
+      //f_SE   = (D.f[dMP0])[knw  ];
+      //f_BW   = (D.f[dP0P])[kte  ];
+      //f_TE   = (D.f[dM0M])[kbw  ];
+      //f_TW   = (D.f[dP0M])[kbe  ];
+      //f_BE   = (D.f[dM0P])[ktw  ];
+      //f_BS   = (D.f[d0PP])[ktn  ];
+      //f_TN   = (D.f[d0MM])[kbs  ];
+      //f_TS   = (D.f[d0PM])[kbn  ];
+      //f_BN   = (D.f[d0MP])[kts  ];
+      //f_BSW  = (D.f[dPPP])[ktne ];
+      //f_BNE  = (D.f[dMMP])[ktsw ];
+      //f_BNW  = (D.f[dPMP])[ktse ];
+      //f_BSE  = (D.f[dMPP])[ktnw ];
+      //f_TSW  = (D.f[dPPM])[kbne ];
+      //f_TNE  = (D.f[dMMM])[kbsw ];
+      //f_TNW  = (D.f[dPMM])[kbse ];
+      //f_TSE  = (D.f[dMPM])[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[d000])[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); 
+         
+
+      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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	  //ToDo anders Klammern
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
+         (D.f[dM00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
+         //(D.f[dM00])[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[dM00])[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[dP00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
+         //(D.f[dP00])[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[dP00])[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[d0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
+         //(D.f[d0M0])[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[d0M0])[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[d0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
+         //(D.f[d0P0])[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[d0P0])[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[d00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
+         //(D.f[d00M])[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[d00M])[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[d00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
+         //(D.f[d00P])[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[d00P])[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[dMM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[dMM0])[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[dMM0])[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[dPP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[dPP0])[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[dPP0])[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[dMP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[dMP0])[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[dMP0])[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[dPM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[dPM0])[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[dPM0])[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[dM0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[dM0M])[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[dM0M])[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[dP0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[dP0P])[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[dP0P])[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[dM0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[dM0P])[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[dM0P])[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[dP0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[dP0M])[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[dP0M])[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[d0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[d0MM])[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[d0MM])[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[d0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[d0PP])[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[d0PP])[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[d0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[d0MP])[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[d0MP])[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[d0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[d0PM])[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[d0PM])[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[dMMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dMMM])[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[dMMM])[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[dPPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dPPP])[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[dPPP])[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[dMMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dMMP])[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[dMMP])[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[dPPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dPPM])[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[dPPM])[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[dMPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dMPM])[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[dMPM])[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[dPMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dPMP])[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[dPMP])[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[dMPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[dMPP])[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[dMPP])[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[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[dPMM])[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[dPMM])[kbse]=zero;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__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 long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   //////////////////////////////////////////////////////////////////////////
+   //! The velocity boundary condition is executed in the following steps
+   //!
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local velocities
+      //!
+      real VeloX = velocityX[nodeIndex];
+      real VeloY = velocityY[nodeIndex];
+      real VeloZ = velocityZ[nodeIndex];
+
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+     
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int KQK  = subgridDistanceIndices[nodeIndex];
+      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 distributions
+      //!
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[d000])[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); 
+    
+      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, distribution, numberOfLBnodes, !isEvenTimestep);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      real feq, q, velocityLB, velocityBC;
+      q = (subgridD.q[dP00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
+      {
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloX;
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, omega, drho, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[dM00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloX;
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, omega, drho, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d0P0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloY;
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, omega, drho, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d0M0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloY;
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, omega, drho, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d00P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloZ;
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, omega, drho, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d00M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloZ;
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, omega, drho, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[dPP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloY;
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dMM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloY;
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dPM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloY;
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dMP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloY;
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dP0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloZ;
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dM0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloZ;
+         (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dP0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloZ;
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dM0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloZ;
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0PP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY + VeloZ;
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0MM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY - VeloZ;
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0PM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY - VeloZ;
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0MP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY + VeloZ;
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, omega, drho, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dPPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY + VeloZ;
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY - VeloZ;
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dPPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY - VeloZ;
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY + VeloZ;
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dPMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY + VeloZ;
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY - VeloZ;
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dPMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY - VeloZ;
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, omega, drho, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY + VeloZ;
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, omega, drho, velocityBC, c1o216);
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDeviceCompZeroPress1h27(
+    int inx,
+    int iny,
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes,
+    real om1, 
+    real Phi,
+    real angularVelocity,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    real* coordX,
+    real* coordY,
+    real* coordZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      //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)
+		////////////////////////////////////////////////////////////////////////////////
+		real VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k];
+		real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*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)
+		////////////////////////////////////////////////////////////////////////////////////
+		//Ship
+		real coord0X = 281.125f;//7.5f;
+		real coord0Y = 388.125f;//7.5f;
+		real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y);
+		real uy =   angularVelocity * (coordX[k_Q[k]] - coord0X);
+		real VeloXpur=VeloX;
+		real VeloYpur=VeloY;
+		VeloX-=ux;
+		VeloY-=uy;
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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];
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  real vx1, vx2, vx3, drho, feq, q, cu_sq;
+	  ///////// equilibrium BC
+	  cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY);
+	  VeloXpur*=-c1o1;
+	  VeloYpur*=-c1o1;
+	  vx1=VeloX;
+	  vx2=VeloY;
+	  vx3=c0o1;
+	  drho=c0o1;
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho+c3o1*( VeloXpur        )+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
+         (D.f[dM00])[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[dP00])[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[d0M0])[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[d0P0])[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[d00M])[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[d00P])[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[dMM0])[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[dPP0])[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[dMP0])[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[dPM0])[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[dM0M])[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[dP0P])[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[dM0P])[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[dP0M])[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[d0MM])[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[d0PP])[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[d0MP])[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[d0PM])[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[dMMM])[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[dPPP])[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[dMMP])[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[dPPM])[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[dMPM])[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[dPMP])[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[dMPP])[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[dPMM])[kbse]= feq - c1o216 * drho;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void LB_BC_Vel_West_27(
+    int nx, 
+    int ny, 
+    int nz, 
+    int itz, 
+    unsigned int* bcMatD, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    real* DD, 
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep, 
+    real u0x, 
+    unsigned int grid_nx, 
+    unsigned int grid_ny, 
+    real om) 
+{
+   //thread-index
+   unsigned int ity = blockIdx.x;
+   unsigned int itx = threadIdx.x;
+
+   unsigned int  k, nxny;                   // Zugriff auf arrays im device
+
+   unsigned int  x = itx + STARTOFFX;  // Globaler x-Index 
+   unsigned int  y = ity + STARTOFFY;  // Globaler y-Index 
+   unsigned int  z = itz + STARTOFFZ;  // Globaler z-Index 
+
+   k = nx*(ny*z + y) + x;
+   nxny = nx*ny;
+   unsigned int k1 = k+nxny;
+
+   if( bcMatD[k] == GEO_VELO )
+   {
+      Distributions27 D;
+      if (isEvenTimestep==true)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //index
+      unsigned int kzero= k;
+      unsigned int ke   = k;
+      unsigned int kw   = neighborX[k];
+      unsigned int kn   = k;
+      unsigned int ks   = neighborY[k];
+      unsigned int kt   = k;
+      unsigned int kb   = neighborZ[k];
+      unsigned int ksw  = neighborY[kw];
+      unsigned int kne  = k;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = k;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = k;
+      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 = k;
+      unsigned int kbsw = neighborZ[ksw];
+      //unsigned int kzero= k;
+      //unsigned int ke   = k;
+      //unsigned int kw   = k + 1;
+      //unsigned int kn   = k;
+      //unsigned int ks   = k + nx;
+      //unsigned int kt   = k;
+      //unsigned int kb   = k + nxny;
+      //unsigned int ksw  = k + nx + 1;
+      //unsigned int kne  = k;
+      //unsigned int kse  = k + nx;
+      //unsigned int knw  = k + 1;
+      //unsigned int kbw  = k + nxny + 1;
+      //unsigned int kte  = k;
+      //unsigned int kbe  = k + nxny;
+      //unsigned int ktw  = k + 1;
+      //unsigned int kbs  = k + nxny + nx;
+      //unsigned int ktn  = k;
+      //unsigned int kbn  = k + nxny;
+      //unsigned int kts  = k + nx;
+      //unsigned int ktse = k + nx;
+      //unsigned int kbnw = k + nxny + 1;
+      //unsigned int ktnw = k + 1;
+      //unsigned int kbse = k + nxny + nx;
+      //unsigned int ktsw = k + nx + 1;
+      //unsigned int kbne = k + nxny;
+      //unsigned int ktne = k;
+      //unsigned int kbsw = k + nxny + nx + 1;
+      ////////////////////////////////////////////////////////////////////////////////
+      //index1
+      unsigned int k1zero= k1;
+      unsigned int k1e   = k1;
+      unsigned int k1w   = neighborX[k1];
+      unsigned int k1n   = k1;
+      unsigned int k1s   = neighborY[k1];
+      unsigned int k1t   = k1;
+      unsigned int k1b   = neighborZ[k1];
+      unsigned int k1sw  = neighborY[k1w];
+      unsigned int k1ne  = k1;
+      unsigned int k1se  = k1s;
+      unsigned int k1nw  = k1w;
+      unsigned int k1bw  = neighborZ[k1w];
+      unsigned int k1te  = k1;
+      unsigned int k1be  = k1b;
+      unsigned int k1tw  = k1w;
+      unsigned int k1bs  = neighborZ[k1s];
+      unsigned int k1tn  = k1;
+      unsigned int k1bn  = k1b;
+      unsigned int k1ts  = k1s;
+      unsigned int k1tse = k1s;
+      unsigned int k1bnw = k1bw;
+      unsigned int k1tnw = k1w;
+      unsigned int k1bse = k1bs;
+      unsigned int k1tsw = k1sw;
+      unsigned int k1bne = k1b;
+      unsigned int k1tne = k1;
+      unsigned int k1bsw = neighborZ[k1sw];
+      //unsigned int k1zero= k1;
+      //unsigned int k1e   = k1;
+      //unsigned int k1w   = k1 + 1;
+      //unsigned int k1n   = k1;
+      //unsigned int k1s   = k1 + nx;
+      //unsigned int k1t   = k1;
+      //unsigned int k1b   = k1 + nxny;
+      //unsigned int k1sw  = k1 + nx + 1;
+      //unsigned int k1ne  = k1;
+      //unsigned int k1se  = k1 + nx;
+      //unsigned int k1nw  = k1 + 1;
+      //unsigned int k1bw  = k1 + nxny + 1;
+      //unsigned int k1te  = k1;
+      //unsigned int k1be  = k1 + nxny;
+      //unsigned int k1tw  = k1 + 1;
+      //unsigned int k1bs  = k1 + nxny + nx;
+      //unsigned int k1tn  = k1;
+      //unsigned int k1bn  = k1 + nxny;
+      //unsigned int k1ts  = k1 + nx;
+      //unsigned int k1tse = k1 + nx;
+      //unsigned int k1bnw = k1 + nxny + 1;
+      //unsigned int k1tnw = k1 + 1;
+      //unsigned int k1bse = k1 + nxny + nx;
+      //unsigned int k1tsw = k1 + nx + 1;
+      //unsigned int k1bne = k1 + nxny;
+      //unsigned int k1tne = k1;
+      //unsigned int k1bsw = k1 + nxny + nx + 1;
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[k1e   ];
+      f1_E    = (D.f[dM00])[k1w   ];
+      f1_S    = (D.f[d0P0])[k1n   ];
+      f1_N    = (D.f[d0M0])[k1s   ];
+      f1_B    = (D.f[d00P])[k1t   ];
+      f1_T    = (D.f[d00M])[k1b   ];
+      f1_SW   = (D.f[dPP0])[k1ne  ];
+      f1_NE   = (D.f[dMM0])[k1sw  ];
+      f1_NW   = (D.f[dPM0])[k1se  ];
+      f1_SE   = (D.f[dMP0])[k1nw  ];
+      f1_BW   = (D.f[dP0P])[k1te  ];
+      f1_TE   = (D.f[dM0M])[k1bw  ];
+      f1_TW   = (D.f[dP0M])[k1be  ];
+      f1_BE   = (D.f[dM0P])[k1tw  ];
+      f1_BS   = (D.f[d0PP])[k1tn  ];
+      f1_TN   = (D.f[d0MM])[k1bs  ];
+      f1_TS   = (D.f[d0PM])[k1bn  ];
+      f1_BN   = (D.f[d0MP])[k1ts  ];
+      f1_ZERO = (D.f[d000])[k1zero];
+      f1_BSW  = (D.f[dPPP])[k1tne ];
+      f1_BNE  = (D.f[dMMP])[k1tsw ];
+      f1_BNW  = (D.f[dPMP])[k1tse ];
+      f1_BSE  = (D.f[dMPP])[k1tnw ];
+      f1_TSW  = (D.f[dPPM])[k1bne ];
+      f1_TNE  = (D.f[dMMM])[k1bsw ];
+      f1_TNW  = (D.f[dPMM])[k1bse ];
+      f1_TSE  = (D.f[dMPM])[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();
+
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real drho = drho1;
+      real  vx1 = c0o1;
+      real  vx2 = c0o1;
+      real  vx3 = u0x;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+      (D.f[d000])[kzero] =   c8o27* (drho-cu_sq);
+      (D.f[dP00])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      (D.f[dM00])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      (D.f[d0P0])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      (D.f[d0M0])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      (D.f[d00P])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      (D.f[d00M])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      (D.f[dPP0])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      (D.f[dMM0])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      (D.f[dPM0])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      (D.f[dMP0])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      (D.f[dP0P])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      (D.f[dM0M])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      (D.f[dP0M])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      (D.f[dM0P])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      (D.f[d0PP])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      (D.f[d0MM])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      (D.f[d0PM])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      (D.f[d0MP])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      (D.f[dPPP])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      (D.f[dMMM])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      (D.f[dPPM])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      (D.f[dMMP])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      (D.f[dPMP])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      (D.f[dMPM])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      (D.f[dPMM])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      (D.f[dMPP])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+   }
+   __syncthreads();
+}          
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDevPlainBB27(
+    real* velocityX,
+    real* velocityY,
+    real* velocityZ,
+    real* distributions,
+    int* subgridDistanceIndices,
+    real* subgridDistances,
+    uint numberOfBCnodes,
+    uint* neighborX,
+    uint* neighborY,
+    uint* neighborZ,
+    unsigned long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   //////////////////////////////////////////////////////////////////////////
+   //! The velocity boundary condition is executed in the following steps
+   //!
+   ////////////////////////////////////////////////////////////////////////////////
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+   // run for all indices in size of boundary condition (numberOfBCnodes)
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local velocities
+      //!
+      real VeloX = velocityX[nodeIndex];
+      real VeloY = velocityY[nodeIndex];
+      real VeloZ = velocityZ[nodeIndex];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      uint indexOfBCnode = subgridDistanceIndices[nodeIndex];
+      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];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[dP00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dM00])[kw  ]=f_E   + c4o9  * (-VeloX);
+      q = (subgridD.q[dM00])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dP00])[ke  ]=f_W   + c4o9  * ( VeloX);
+      q = (subgridD.q[d0P0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0M0])[ks  ]=f_N   + c4o9  * (-VeloY);
+      q = (subgridD.q[d0M0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0P0])[kn  ]=f_S   + c4o9  * ( VeloY);
+      q = (subgridD.q[d00P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d00M])[kb  ]=f_T   + c4o9  * (-VeloZ);
+      q = (subgridD.q[d00M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d00P])[kt  ]=f_B   + c4o9  * ( VeloZ);
+      q = (subgridD.q[dPP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMM0])[ksw ]=f_NE  + c1o9  * (-VeloX - VeloY);
+      q = (subgridD.q[dMM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPP0])[kne ]=f_SW  + c1o9  * ( VeloX + VeloY);
+      q = (subgridD.q[dPM0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMP0])[knw ]=f_SE  + c1o9  * (-VeloX + VeloY);
+      q = (subgridD.q[dMP0])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPM0])[kse ]=f_NW  + c1o9  * ( VeloX - VeloY);
+      q = (subgridD.q[dP0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dM0M])[kbw ]=f_TE  + c1o9  * (-VeloX - VeloZ);
+      q = (subgridD.q[dM0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dP0P])[kte ]=f_BW  + c1o9  * ( VeloX + VeloZ);
+      q = (subgridD.q[dP0M])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dM0P])[ktw ]=f_BE  + c1o9  * (-VeloX + VeloZ);
+      q = (subgridD.q[dM0P])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dP0M])[kbe ]=f_TW  + c1o9  * ( VeloX - VeloZ);
+      q = (subgridD.q[d0PP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0MM])[kbs ]=f_TN  + c1o9  * (-VeloY - VeloZ);
+      q = (subgridD.q[d0MM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0PP])[ktn ]=f_BS  + c1o9  * ( VeloY + VeloZ);
+      q = (subgridD.q[d0PM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0MP])[kts ]=f_BN  + c1o9  * (-VeloY + VeloZ);
+      q = (subgridD.q[d0MP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[d0PM])[kbn ]=f_TS  + c1o9  * ( VeloY - VeloZ);
+      q = (subgridD.q[dPPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMMM])[kbsw]=f_TNE + c1o36 * (-VeloX - VeloY - VeloZ);
+      q = (subgridD.q[dMMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPPP])[ktne]=f_BSW + c1o36 * ( VeloX + VeloY + VeloZ);
+      q = (subgridD.q[dPPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMMP])[ktsw]=f_BNE + c1o36 * (-VeloX - VeloY + VeloZ);
+      q = (subgridD.q[dMMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPPM])[kbne]=f_TSW + c1o36 * ( VeloX + VeloY - VeloZ);
+      q = (subgridD.q[dPMP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMPM])[kbnw]=f_TSE + c1o36 * (-VeloX + VeloY - VeloZ);
+      q = (subgridD.q[dMPM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPMP])[ktse]=f_BNW + c1o36 * ( VeloX - VeloY + VeloZ);
+      q = (subgridD.q[dPMM])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dMPP])[ktnw]=f_BSE + c1o36 * (-VeloX + VeloY + VeloZ);
+      q = (subgridD.q[dMPP])[nodeIndex];   if (q>=c0o1 && q<=c1o1)    (dist.f[dPMM])[kbse]=f_TNW + c1o36 * ( VeloX - VeloY - VeloZ);
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDevCouette27(
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD,
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+	  ////////////////////////////////////////////////////////////////////////////////
+	  real VeloX = vx[k];
+	  real VeloY = vy[k];
+	  real VeloZ = vz[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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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 f_W    = (D.f[dP00])[ke   ];
+      real f_E    = (D.f[dM00])[kw   ];
+      real f_S    = (D.f[d0P0])[kn   ];
+      real f_N    = (D.f[d0M0])[ks   ];
+      real f_B    = (D.f[d00P])[kt   ];
+      real f_T    = (D.f[d00M])[kb   ];
+      real f_SW   = (D.f[dPP0])[kne  ];
+      real f_NE   = (D.f[dMM0])[ksw  ];
+      real f_NW   = (D.f[dPM0])[kse  ];
+      real f_SE   = (D.f[dMP0])[knw  ];
+      real f_BW   = (D.f[dP0P])[kte  ];
+      real f_TE   = (D.f[dM0M])[kbw  ];
+      real f_TW   = (D.f[dP0M])[kbe  ];
+      real f_BE   = (D.f[dM0P])[ktw  ];
+      real f_BS   = (D.f[d0PP])[ktn  ];
+      real f_TN   = (D.f[d0MM])[kbs  ];
+      real f_TS   = (D.f[d0PM])[kbn  ];
+      real f_BN   = (D.f[d0MP])[kts  ];
+      real f_BSW  = (D.f[dPPP])[ktne ];
+      real f_BNE  = (D.f[dMMP])[ktsw ];
+      real f_BNW  = (D.f[dPMP])[ktse ];
+      real f_BSE  = (D.f[dMPP])[ktnw ];
+      real f_TSW  = (D.f[dPPM])[kbne ];
+      real f_TNE  = (D.f[dMMM])[kbsw ];
+      real f_TNW  = (D.f[dPMM])[kbse ];
+      real f_TSE  = (D.f[dMPM])[kbnw ];
+	  ////////////////////////////////////////////////////////////////////////////////
+
+	  ////////////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  ///////               FlowDirection Y !!!!!!!!!!                                                           ///////////////////////////////////
+	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //calculate velocity
+	  //real vx1 = ((f_TNE-f_BSW)+(f_BSE-f_TNW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)) + (((f_NE-f_SW)+(f_TE-f_BW))+((f_SE-f_NW)+(f_BE-f_TW))) + (f_E-f_W);
+	  real vx2 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_BNE-f_TSW)+(f_BNW-f_TSE)) + (((f_NE-f_SW)+(f_TN-f_BS))+((f_BN-f_TS)+(f_NW-f_SE))) + (f_N-f_S);
+	  //real vx3 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_TSW-f_BNE)+(f_TSE-f_BNW)) + (((f_TE-f_BW)+(f_TN-f_BS))+((f_TW-f_BE)+(f_TS-f_BN))) + (f_T-f_B);
+	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //constant
+	  real on=c0o1;//c1o2;//one;
+	  real ms=-c6o1;
+	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //2nd order moment
+	  real kxxMyyFromfcNEQ = c0o1;//-c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2));		//all dP00+dM00 minus all d0P0+d0M0 (no combinations of xy left)
+
+	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	  //set distributions
+      real q;
+      q = q_dirE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dM00])[kw  ]=f_E   + ms*c2o27  * VeloX;	
+      q = q_dirW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dP00])[ke  ]=f_W   - ms*c2o27  * VeloX;	
+      q = q_dirN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[d0M0])[ks  ]=f_N   + ms*c2o27  * VeloY;	
+      q = q_dirS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[d0P0])[kn  ]=f_S   - ms*c2o27  * VeloY;	
+	  q = q_dirT[k];	if (q>=c0o1 && q<=c1o1)	(D.f[d00M])[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[d00P])[kt  ]=f_B   - ms*c2o27  * VeloZ;
+      q = q_dirNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dMM0])[ksw ]=f_NE  + ms*c1o54  * VeloX + ms*c1o54  * VeloY;
+	  q = q_dirSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dPP0])[kne ]=f_SW  - ms*c1o54  * VeloX - ms*c1o54  * VeloY;
+	  q = q_dirSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dMP0])[knw ]=f_SE  + ms*c1o54  * VeloX - ms*c1o54  * VeloY;
+	  q = q_dirNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dPM0])[kse ]=f_NW  - ms*c1o54  * VeloX + ms*c1o54  * VeloY;
+	  q = q_dirTE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dM0M])[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[dP0P])[kte ]=f_BW  - ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
+	  q = q_dirBE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dM0P])[ktw ]=f_BE  + ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
+	  q = q_dirTW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dP0M])[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[d0MM])[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[d0PP])[ktn ]=f_BS  - ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
+	  q = q_dirBN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[d0MP])[kts ]=f_BN  + ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
+	  q = q_dirTS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[d0PM])[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[dMMM])[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[dPPP])[ktne]=f_BSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirBNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dMMP])[ktsw]=f_BNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirTSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dPPM])[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[dMPM])[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[dPMP])[ktse]=f_BNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirBSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dMPP])[ktnw]=f_BSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirTNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dPMM])[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[dM00])[kw  ]=f_E   + ms*c2over27  * VeloX;	
+   //   q = q_dirW[k];	if (q>=zero && q<=one)	(D.f[dP00])[ke  ]=f_W   - ms*c2over27  * VeloX;	
+   //   q = q_dirN[k];	if (q>=zero && q<=one)	(D.f[d0M0])[ks  ]=f_N   + ms*c2over27  * VeloY;	
+   //   q = q_dirS[k];	if (q>=zero && q<=one)	(D.f[d0P0])[kn  ]=f_S   - ms*c2over27  * VeloY;	
+	  //q = q_dirT[k];	if (q>=zero && q<=one)	(D.f[d00M])[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[d00P])[kt  ]=f_B   - ms*c2over27  * VeloZ;
+   //   q = q_dirNE[k];	if (q>=zero && q<=one)	(D.f[dMM0])[ksw ]=f_NE  + ms*c1over54  * VeloX + ms*c1over54  * VeloY;
+	  //q = q_dirSW[k];	if (q>=zero && q<=one)	(D.f[dPP0])[kne ]=f_SW  - ms*c1over54  * VeloX - ms*c1over54  * VeloY;
+	  //q = q_dirSE[k];	if (q>=zero && q<=one)	(D.f[dMP0])[knw ]=f_SE  + ms*c1over54  * VeloX - ms*c1over54  * VeloY;
+	  //q = q_dirNW[k];	if (q>=zero && q<=one)	(D.f[dPM0])[kse ]=f_NW  - ms*c1over54  * VeloX + ms*c1over54  * VeloY;
+	  //q = q_dirTE[k];	if (q>=zero && q<=one)	(D.f[dM0M])[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[dP0P])[kte ]=f_BW  - ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
+	  //q = q_dirBE[k];	if (q>=zero && q<=one)	(D.f[dM0P])[ktw ]=f_BE  + ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
+	  //q = q_dirTW[k];	if (q>=zero && q<=one)	(D.f[dP0M])[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[d0MM])[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[d0PP])[ktn ]=f_BS  - ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
+	  //q = q_dirBN[k];	if (q>=zero && q<=one)	(D.f[d0MP])[kts ]=f_BN  + ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
+	  //q = q_dirTS[k];	if (q>=zero && q<=one)	(D.f[d0PM])[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[dMMM])[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[dPPP])[ktne]=f_BSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirBNE[k];	if (q>=zero && q<=one)	(D.f[dMMP])[ktsw]=f_BNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirTSW[k];	if (q>=zero && q<=one)	(D.f[dPPM])[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[dMPM])[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[dPMP])[ktse]=f_BNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirBSE[k];	if (q>=zero && q<=one)	(D.f[dMPP])[ktnw]=f_BSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirTNW[k];	if (q>=zero && q<=one)	(D.f[dPMM])[kbse]=f_TNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDev1h27(
+    int inx,
+    int iny,
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1,
+    real Phi,
+    real angularVelocity,
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    real* coordX,
+    real* coordY,
+    real* coordZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+	Distributions27 D;
+	if (isEvenTimestep==true)
+	{
+		D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DD[d00P * numberOfLBnodes];
+		D.f[d00M] = &DD[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+	} 
+	else
+	{
+		D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DD[d00P * numberOfLBnodes];
+		D.f[d00P] = &DD[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+		D.f[d000] = &DD[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+		D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+		D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+		D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+		D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+		D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+		D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+		D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+	}
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if(k<numberOfBCnodes)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		real VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k];
+		real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*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)
+		////////////////////////////////////////////////////////////////////////////////////
+		//Ship
+		real coord0X = 281.125f;//7.5f;
+		real coord0Y = 388.125f;//7.5f;
+		real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y);
+		real uy =   angularVelocity * (coordX[k_Q[k]] - coord0X);
+		real VeloXpur=VeloX;
+		real VeloYpur=VeloY;
+		VeloX-=ux;
+		VeloY-=uy;
+		////////////////////////////////////////////////////////////////////////////////
+		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[dP00 * numberOfBCnodes];
+		q_dirW   = &QQ[dM00 * numberOfBCnodes];
+		q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+		q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+		q_dirT   = &QQ[d00P * numberOfBCnodes];
+		q_dirB   = &QQ[d00M * numberOfBCnodes];
+		q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+		q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+		q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+		q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+		q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+		q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+		q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+		q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+		q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+		q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+		q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+		q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+		q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+		q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+		q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+		q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+		q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+		q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+		q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+		q_dirBNW = &QQ[dMPM * 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];
+		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];
+		//unsigned int nxny = nx*ny;
+		//unsigned int kzero= KQK;
+		//unsigned int ke   = KQK;
+		//unsigned int kw   = KQK + 1;
+		//unsigned int kn   = KQK;
+		//unsigned int ks   = KQK + nx;
+		//unsigned int kt   = KQK;
+		//unsigned int kb   = KQK + nxny;
+		//unsigned int ksw  = KQK + nx + 1;
+		//unsigned int kne  = KQK;
+		//unsigned int kse  = KQK + nx;
+		//unsigned int knw  = KQK + 1;
+		//unsigned int kbw  = KQK + nxny + 1;
+		//unsigned int kte  = KQK;
+		//unsigned int kbe  = KQK + nxny;
+		//unsigned int ktw  = KQK + 1;
+		//unsigned int kbs  = KQK + nxny + nx;
+		//unsigned int ktn  = KQK;
+		//unsigned int kbn  = KQK + nxny;
+		//unsigned int kts  = KQK + nx;
+		//unsigned int ktse = KQK + nx;
+		//unsigned int kbnw = KQK + nxny + 1;
+		//unsigned int ktnw = KQK + 1;
+		//unsigned int kbse = KQK + nxny + nx;
+		//unsigned int ktsw = KQK + nx + 1;
+		//unsigned int kbne = KQK + nxny;
+		//unsigned int ktne = KQK;
+		//unsigned int kbsw = KQK + nxny + nx + 1;
+		////////////////////////////////////////////////////////////////////////////////
+		//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[dP00])[ke   ];
+		//f_E    = (D.f[dM00])[kw   ];
+		//f_S    = (D.f[d0P0])[kn   ];
+		//f_N    = (D.f[d0M0])[ks   ];
+		//f_B    = (D.f[d00P])[kt   ];
+		//f_T    = (D.f[d00M])[kb   ];
+		//f_SW   = (D.f[dPP0])[kne  ];
+		//f_NE   = (D.f[dMM0])[ksw  ];
+		//f_NW   = (D.f[dPM0])[kse  ];
+		//f_SE   = (D.f[dMP0])[knw  ];
+		//f_BW   = (D.f[dP0P])[kte  ];
+		//f_TE   = (D.f[dM0M])[kbw  ];
+		//f_TW   = (D.f[dP0M])[kbe  ];
+		//f_BE   = (D.f[dM0P])[ktw  ];
+		//f_BS   = (D.f[d0PP])[ktn  ];
+		//f_TN   = (D.f[d0MM])[kbs  ];
+		//f_TS   = (D.f[d0PM])[kbn  ];
+		//f_BN   = (D.f[d0MP])[kts  ];
+		//f_BSW  = (D.f[dPPP])[ktne ];
+		//f_BNE  = (D.f[dMMP])[ktsw ];
+		//f_BNW  = (D.f[dPMP])[ktse ];
+		//f_BSE  = (D.f[dMPP])[ktnw ];
+		//f_TSW  = (D.f[dPPM])[kbne ];
+		//f_TNE  = (D.f[dMMM])[kbsw ];
+		//f_TNW  = (D.f[dPMM])[kbse ];
+		//f_TSE  = (D.f[dMPM])[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[d000])[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); 
+
+
+		//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); 
+
+		//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); 
+
+		//cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+		//////////////////////////////////////////////////////////////////////////
+		if (isEvenTimestep==false)
+		{
+			D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+			D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+			D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+			D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+			D.f[d00P] = &DD[d00P * numberOfLBnodes];
+			D.f[d00M] = &DD[d00M * numberOfLBnodes];
+			D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+			D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+			D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+			D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+			D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+			D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+			D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+			D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+			D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+			D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+			D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+			D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+			D.f[d000] = &DD[d000 * numberOfLBnodes];
+			D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+			D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+			D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+			D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+			D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+			D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+			D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+			D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+		} 
+		else
+		{
+			D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+			D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+			D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+			D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+			D.f[d00M] = &DD[d00P * numberOfLBnodes];
+			D.f[d00P] = &DD[d00M * numberOfLBnodes];
+			D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+			D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+			D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+			D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+			D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+			D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+			D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+			D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+			D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+			D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+			D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+			D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+			D.f[d000] = &DD[d000 * numberOfLBnodes];
+			D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+			D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+			D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+			D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+			D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+			D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+			D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+			D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+		}
+		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+		//Test
+		//(D.f[d000])[k]=c1o10;
+		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+		//ToDo anders Klammern
+
+		//q = q_dirE[k];
+		//if (q>=zero && q<=one)
+		//{
+		//	feq=c2over27* (drho/*+three*( vx1        )*/+c9over2*( vx1        )*( vx1        )-cu_sq); 
+		//	(D.f[dM00])[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[dM00])[kw]=zero;
+		//}
+
+		//q = q_dirW[k];
+		//if (q>=zero && q<=one)
+		//{
+		//	feq=c2over27* (drho/*+three*(-vx1        )*/+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
+		//	(D.f[dP00])[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[dP00])[ke]=zero;
+		//}
+
+		//q = q_dirN[k];
+		//if (q>=zero && q<=one)
+		//{
+		//	feq=c2over27* (drho/*+three*(    vx2     )*/+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
+		//	(D.f[d0M0])[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[d0M0])[ks]=zero;
+		//}
+
+		//q = q_dirS[k];
+		//if (q>=zero && q<=one)
+		//{
+		//	feq=c2over27* (drho/*+three*(   -vx2     )*/+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
+		//	(D.f[d0P0])[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[d0P0])[kn]=zero;
+		//}
+
+		//q = q_dirT[k];
+		//if (q>=zero && q<=one)
+		//{
+		//	feq=c2over27* (drho/*+three*(         vx3)*/+c9over2*(         vx3)*(         vx3)-cu_sq); 
+		//	(D.f[d00M])[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[d00M])[kb]=one;
+		//}
+
+		//q = q_dirB[k];
+		//if (q>=zero && q<=one)
+		//{
+		//	feq=c2over27* (drho/*+three*(        -vx3)*/+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
+		//	(D.f[d00P])[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[d00P])[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[dMM0])[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[dMM0])[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[dPP0])[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[dPP0])[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[dMP0])[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[dMP0])[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[dPM0])[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[dPM0])[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[dM0M])[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[dM0M])[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[dP0P])[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[dP0P])[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[dM0P])[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[dM0P])[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[dP0M])[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[dP0M])[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[d0MM])[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[d0MM])[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[d0PP])[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[d0PP])[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[d0MP])[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[d0MP])[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[d0PM])[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[d0PM])[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[dMMM])[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[dMMM])[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[dPPP])[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[dPPP])[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[dMMP])[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[dMMP])[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[dPPM])[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[dPPM])[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[dMPM])[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[dMPM])[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[dPMP])[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[dPMP])[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[dMPP])[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[dMPP])[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[dPMM])[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[dPMM])[kbse]=zero;
+		//}
+
+		///////// equilibrium BC
+		cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY);
+		VeloXpur*=-c1o1;
+		VeloYpur*=-c1o1;
+		vx3=c0o1;
+		drho=c0o1;
+		q = q_dirE[k];
+		if (q>=c0o1 && q<=c1o1)
+		{
+			feq=c2o27* (drho+c3o1*( VeloXpur        )+c9o2*( VeloX        )*( VeloX        )-cu_sq); 
+			(D.f[dM00])[kw]=feq;
+			//(D.f[dM00])[kw]=zero;
+		}
+
+		q = q_dirW[k];
+		if (q>=c0o1 && q<=c1o1)
+		{
+			feq=c2o27* (drho+c3o1*(-VeloXpur        )+c9o2*(-VeloX        )*(-VeloX        )-cu_sq); 
+			(D.f[dP00])[ke]=feq;
+			//(D.f[dP00])[ke]=zero;
+		}
+
+		q = q_dirN[k];
+		if (q>=c0o1 && q<=c1o1)
+		{
+			feq=c2o27* (drho+c3o1*(    VeloYpur     )+c9o2*(     VeloY    )*(     VeloY    )-cu_sq); 
+			(D.f[d0M0])[ks]=feq;
+			//(D.f[d0M0])[ks]=zero;
+		}
+
+		q = q_dirS[k];
+		if (q>=c0o1 && q<=c1o1)
+		{
+			feq=c2o27* (drho+c3o1*(   -VeloYpur     )+c9o2*(    -VeloY    )*(    -VeloY    )-cu_sq); 
+			(D.f[d0P0])[kn]=feq;
+			//(D.f[d0P0])[kn]=zero;
+		}
+
+		q = q_dirT[k];
+		if (q>=c0o1 && q<=c1o1)
+		{
+			feq=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
+			(D.f[d00M])[kb]=feq;
+			//(D.f[d00M])[kb]=one;
+		}
+
+		q = q_dirB[k];
+		if (q>=c0o1 && q<=c1o1)
+		{
+			feq=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
+			(D.f[d00P])[kt]=feq;
+			//(D.f[d00P])[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[dMM0])[ksw]=feq;
+			//(D.f[dMM0])[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[dPP0])[kne]=feq;
+			//(D.f[dPP0])[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[dMP0])[knw]=feq;
+			//(D.f[dMP0])[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[dPM0])[kse]=feq;
+			//(D.f[dPM0])[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[dM0M])[kbw]=feq;
+			//(D.f[dM0M])[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[dP0P])[kte]=feq;
+			//(D.f[dP0P])[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[dM0P])[ktw]=feq;
+			//(D.f[dM0P])[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[dP0M])[kbe]=feq;
+			//(D.f[dP0M])[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[d0MM])[kbs]=feq;
+			//(D.f[d0MM])[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[d0PP])[ktn]=feq;
+			//(D.f[d0PP])[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[d0MP])[kts]=feq;
+			//(D.f[d0MP])[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[d0PM])[kbn]=feq;
+			//(D.f[d0PM])[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[dMMM])[kbsw]=feq;
+			//(D.f[dMMM])[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[dPPP])[ktne]=feq;
+			//(D.f[dPPP])[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[dMMP])[ktsw]=feq;
+			//(D.f[dMMP])[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[dPPM])[kbne]=feq;
+			//(D.f[dPPM])[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[dMPM])[kbnw]=feq;
+			//(D.f[dMPM])[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[dPMP])[ktse]=feq;
+			//(D.f[dPMP])[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[dMPP])[ktnw]=feq;
+			//(D.f[dMPP])[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[dPMM])[kbse]=feq;
+			//(D.f[dPMM])[kbse]=zero;
+		}
+	
+	}
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__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 long long numberOfLBnodes,
+    bool isEvenTimestep)
+{
+   //////////////////////////////////////////////////////////////////////////
+   //! The velocity boundary condition is executed in the following steps
+   //!
+    ////////////////////////////////////////////////////////////////////////////////
+    //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+    //!
+    const unsigned nodeIndex = getNodeIndex();
+
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(nodeIndex < 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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local velocities
+      //!
+      real VeloX = velocityX[nodeIndex];
+      real VeloY = velocityY[nodeIndex];
+      real VeloZ = velocityZ[nodeIndex];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+      
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[nodeIndex];
+      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  = indexOfBCnode;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = indexOfBCnode;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = indexOfBCnode;
+      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 = indexOfBCnode;
+      unsigned int kbsw = neighborZ[ksw];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[dP00])[ke   ];
+      real f_E    = (dist.f[dM00])[kw   ];
+      real f_S    = (dist.f[d0P0])[kn   ];
+      real f_N    = (dist.f[d0M0])[ks   ];
+      real f_B    = (dist.f[d00P])[kt   ];
+      real f_T    = (dist.f[d00M])[kb   ];
+      real f_SW   = (dist.f[dPP0])[kne  ];
+      real f_NE   = (dist.f[dMM0])[ksw  ];
+      real f_NW   = (dist.f[dPM0])[kse  ];
+      real f_SE   = (dist.f[dMP0])[knw  ];
+      real f_BW   = (dist.f[dP0P])[kte  ];
+      real f_TE   = (dist.f[dM0M])[kbw  ];
+      real f_TW   = (dist.f[dP0M])[kbe  ];
+      real f_BE   = (dist.f[dM0P])[ktw  ];
+      real f_BS   = (dist.f[d0PP])[ktn  ];
+      real f_TN   = (dist.f[d0MM])[kbs  ];
+      real f_TS   = (dist.f[d0PM])[kbn  ];
+      real f_BN   = (dist.f[d0MP])[kts  ];
+      real f_BSW  = (dist.f[dPPP])[ktne ];
+      real f_BNE  = (dist.f[dMMP])[ktsw ];
+      real f_BNW  = (dist.f[dPMP])[ktse ];
+      real f_BSE  = (dist.f[dMPP])[ktnw ];
+      real f_TSW  = (dist.f[dPPM])[kbne ];
+      real f_TNE  = (dist.f[dMMM])[kbsw ];
+      real f_TNW  = (dist.f[dPMM])[kbse ];
+      real f_TSE  = (dist.f[dMPM])[kbnw ];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - 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[d000])[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); 
+
+      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);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      //!
+      real feq, q, velocityLB, velocityBC;
+      q = (subgridD.q[dP00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
+      {
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloX;
+         (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[dM00])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloX;
+         (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d0P0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloY;
+         (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d0M0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloY;
+         (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d00P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloZ;
+         (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[d00M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloZ;
+         (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27);
+      }
+
+      q = (subgridD.q[dPP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloY;
+         (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dMM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloY;
+         (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dPM0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloY;
+         (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dMP0])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloY;
+         (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dP0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloZ;
+         (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dM0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloZ;
+         (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dP0M])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloZ;
+         (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dM0P])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloZ;
+         (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0PP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY + VeloZ;
+         (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0MM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY - VeloZ;
+         (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0PM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY - VeloZ;
+         (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[d0MP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY + VeloZ;
+         (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54);
+      }
+
+      q = (subgridD.q[dPPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY + VeloZ;
+         (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY - VeloZ;
+         (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dPPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY - VeloZ;
+         (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY + VeloZ;
+         (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dPMP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY + VeloZ;
+         (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMPM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY - VeloZ;
+         (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dPMM])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY - VeloZ;
+         (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216);
+      }
+
+      q = (subgridD.q[dMPP])[nodeIndex];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY + VeloZ;
+         (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216);
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void QVelDevice27(
+    int inx,
+    int iny,
+    real* vx,
+    real* vy,
+    real* vz,
+    real* DD, 
+    int* k_Q, 
+    real* QQ,
+    unsigned int numberOfBCnodes, 
+    real om1, 
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    unsigned long long numberOfLBnodes, 
+    bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      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)
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00 * numberOfBCnodes];
+      q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      q_dirT   = &QQ[d00P * numberOfBCnodes];
+      q_dirB   = &QQ[d00M * numberOfBCnodes];
+      q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      q_dirBNW = &QQ[dMPM * 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];
+      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];
+      //unsigned int nxny = nx*ny;
+      //unsigned int kzero= KQK;
+      //unsigned int ke   = KQK;
+      //unsigned int kw   = KQK + 1;
+      //unsigned int kn   = KQK;
+      //unsigned int ks   = KQK + nx;
+      //unsigned int kt   = KQK;
+      //unsigned int kb   = KQK + nxny;
+      //unsigned int ksw  = KQK + nx + 1;
+      //unsigned int kne  = KQK;
+      //unsigned int kse  = KQK + nx;
+      //unsigned int knw  = KQK + 1;
+      //unsigned int kbw  = KQK + nxny + 1;
+      //unsigned int kte  = KQK;
+      //unsigned int kbe  = KQK + nxny;
+      //unsigned int ktw  = KQK + 1;
+      //unsigned int kbs  = KQK + nxny + nx;
+      //unsigned int ktn  = KQK;
+      //unsigned int kbn  = KQK + nxny;
+      //unsigned int kts  = KQK + nx;
+      //unsigned int ktse = KQK + nx;
+      //unsigned int kbnw = KQK + nxny + 1;
+      //unsigned int ktnw = KQK + 1;
+      //unsigned int kbse = KQK + nxny + nx;
+      //unsigned int ktsw = KQK + nx + 1;
+      //unsigned int kbne = KQK + nxny;
+      //unsigned int ktne = KQK;
+      //unsigned int kbsw = KQK + nxny + nx + 1;
+      ////////////////////////////////////////////////////////////////////////////////
+      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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[d000])[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); 
+         
+
+      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); 
+
+      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);
+
+      //////////////////////////////////////////////////////////////////////////
+      if (isEvenTimestep==false)
+      {
+         D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00P] = &DD[d00P * numberOfLBnodes];
+         D.f[d00M] = &DD[d00M * numberOfLBnodes];
+         D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+         D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+         D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+         D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+         D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+         D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+         D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+         D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+         D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+      } 
+      else
+      {
+         D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+         D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+         D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+         D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+         D.f[d00M] = &DD[d00P * numberOfLBnodes];
+         D.f[d00P] = &DD[d00M * numberOfLBnodes];
+         D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+         D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+         D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+         D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+         D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+         D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+         D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+         D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+         D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+         D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+         D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+         D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+         D.f[d000] = &DD[d000 * numberOfLBnodes];
+         D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+         D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+         D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+         D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+         D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+         D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+         D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+         D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+      }
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      //Test
+      //(D.f[d000])[k]=c1o10;
+      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	  //ToDo anders Klammern
+
+      q = q_dirE[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        )-cu_sq); 
+         (D.f[dM00])[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[dM00])[kw]=zero;
+      }
+
+      q = q_dirW[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
+         (D.f[dP00])[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[dP00])[ke]=zero;
+      }
+
+      q = q_dirN[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
+         (D.f[d0M0])[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[d0M0])[ks]=zero;
+      }
+
+      q = q_dirS[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
+         (D.f[d0P0])[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[d0P0])[kn]=zero;
+      }
+
+      q = q_dirT[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3)-cu_sq); 
+         (D.f[d00M])[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[d00M])[kb]=one;
+      }
+
+      q = q_dirB[k];
+      if (q>=c0o1 && q<=c1o1)
+      {
+         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
+         (D.f[d00P])[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[d00P])[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[dMM0])[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[dMM0])[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[dPP0])[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[dPP0])[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[dMP0])[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[dMP0])[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[dPM0])[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[dPM0])[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[dM0M])[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[dM0M])[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[dP0P])[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[dP0P])[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[dM0P])[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[dM0P])[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[dP0M])[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[dP0M])[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[d0MM])[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[d0MM])[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[d0PP])[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[d0PP])[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[d0MP])[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[d0MP])[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[d0PM])[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[d0PM])[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[dMMM])[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[dMMM])[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[dPPP])[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[dPPP])[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[dMMP])[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[dMMP])[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[dPPM])[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[dPPM])[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[dMPM])[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[dMPM])[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[dPMP])[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[dPMP])[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[dMPP])[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[dMPP])[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[dPMM])[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[dPMM])[kbse]=zero;
+      }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+__global__ void PropellerBC(
+    unsigned int* neighborX,
+    unsigned int* neighborY,
+    unsigned int* neighborZ,
+    real* rho,
+    real* ux,
+    real* uy,
+    real* uz,
+    int* k_Q, 
+    unsigned int size_Prop,
+    unsigned long long numberOfLBnodes,
+    unsigned int* bcMatD,
+    real* DD,
+    bool EvenOrOdd)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<size_Prop)
+   {
+    ////////////////////////////////////////////////////////////////////////////////
+        Distributions27 D;
+        if (EvenOrOdd==true)
+        {
+			D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+			D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+			D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+			D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+			D.f[d00P] = &DD[d00P * numberOfLBnodes];
+			D.f[d00M] = &DD[d00M * numberOfLBnodes];
+			D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+			D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+			D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+			D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+			D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+			D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+			D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+			D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+			D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+			D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+			D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+			D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+			D.f[d000] = &DD[d000 * numberOfLBnodes];
+			D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+			D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+			D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+			D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+			D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+			D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+			D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+			D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+        }
+        else
+        {
+			D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+			D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+			D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+			D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+			D.f[d00M] = &DD[d00P * numberOfLBnodes];
+			D.f[d00P] = &DD[d00M * numberOfLBnodes];
+			D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+			D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+			D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+			D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+			D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+			D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+			D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+			D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+			D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+			D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+			D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+			D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+			D.f[d000] = &DD[d000 * numberOfLBnodes];
+			D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+			D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+			D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+			D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+			D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+			D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+			D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+			D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+        }
+        //////////////////////////////////////////////////////////////////////////
+		unsigned int KQK = k_Q[k];
+		unsigned int BC  = bcMatD[KQK];
+		if( (BC != GEO_SOLID) && (BC != GEO_VOID))
+		{		
+		//////////////////////////////////////////////////////////////////////////
+        real  vx1 = ux[k];
+        real  vx2 = uy[k];
+        real  vx3 = uz[k];
+        //real  vx1 = -c1o100;
+        //real  vx2 = zero;
+        //real  vx3 = zero;
+        //////////////////////////////////////////////////////////////////////////
+        //index
+        //////////////////////////////////////////////////////////////////////////
+		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 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[d000])[kzero];
+		f_E   = (D.f[dP00])[ke   ];
+		f_W   = (D.f[dM00])[kw   ];
+		f_N   = (D.f[d0P0])[kn   ];
+		f_S   = (D.f[d0M0])[ks   ];
+		f_T   = (D.f[d00P])[kt   ];
+		f_B   = (D.f[d00M])[kb   ];
+		f_NE  = (D.f[dPP0])[kne  ];
+		f_SW  = (D.f[dMM0])[ksw  ];
+		f_SE  = (D.f[dPM0])[kse  ];
+		f_NW  = (D.f[dMP0])[knw  ];
+		f_TE  = (D.f[dP0P])[kte  ];
+		f_BW  = (D.f[dM0M])[kbw  ];
+		f_BE  = (D.f[dP0M])[kbe  ];
+		f_TW  = (D.f[dM0P])[ktw  ];
+		f_TN  = (D.f[d0PP])[ktn  ];
+		f_BS  = (D.f[d0MM])[kbs  ];
+		f_BN  = (D.f[d0PM])[kbn  ];
+		f_TS  = (D.f[d0MP])[kts  ];
+		f_TNE = (D.f[dPPP])[ktne ];
+		f_BSW = (D.f[dMMM])[kbsw ];
+		f_BNE = (D.f[dPPM])[kbne ];
+		f_TSW = (D.f[dMMP])[ktsw ];
+		f_TSE = (D.f[dPMP])[ktse ];
+		f_BNW = (D.f[dMPM])[kbnw ];
+		f_BSE = (D.f[dPMM])[kbse ];
+		f_TNW = (D.f[dMPP])[ktnw ];
+		//f_W    = (D.f[dP00])[ke   ];
+		//f_E    = (D.f[dM00])[kw   ];
+		//f_S    = (D.f[d0P0])[kn   ];
+		//f_N    = (D.f[d0M0])[ks   ];
+		//f_B    = (D.f[d00P])[kt   ];
+		//f_T    = (D.f[d00M])[kb   ];
+		//f_SW   = (D.f[dPP0])[kne  ];
+		//f_NE   = (D.f[dMM0])[ksw  ];
+		//f_NW   = (D.f[dPM0])[kse  ];
+		//f_SE   = (D.f[dMP0])[knw  ];
+		//f_BW   = (D.f[dP0P])[kte  ];
+		//f_TE   = (D.f[dM0M])[kbw  ];
+		//f_TW   = (D.f[dP0M])[kbe  ];
+		//f_BE   = (D.f[dM0P])[ktw  ];
+		//f_BS   = (D.f[d0PP])[ktn  ];
+		//f_TN   = (D.f[d0MM])[kbs  ];
+		//f_TS   = (D.f[d0PM])[kbn  ];
+		//f_BN   = (D.f[d0MP])[kts  ];
+		//f_BSW  = (D.f[dPPP])[ktne ];
+		//f_TNE  = (D.f[dMMM])[kbsw ];
+		//f_TSW  = (D.f[dPPM])[kbne ];
+		//f_BNE  = (D.f[dMMP])[ktsw ];
+		//f_BNW  = (D.f[dPMP])[ktse ];
+		//f_TSE  = (D.f[dMPM])[kbnw ];
+		//f_TNW  = (D.f[dPMM])[kbse ];
+		//f_BSE  = (D.f[dMPP])[ktnw ];
+		//////////////////////////////////////////////////////////////////////////////////
+		real vxo1, vxo2, vxo3, drho;
+		drho   =  /*zero;*/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 + f_ZERO; 
+
+		vxo1   =   (((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); 
+        
+
+		vxo2   =   ((-(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); 
+
+		vxo3   =   (((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 cusq=c3o2*(vxo1*vxo1+vxo2*vxo2+vxo3*vxo3);
+		//vx1 = vx1 * two - vxo1;
+		//vx2 = vx2 * two - vxo2;
+		//vx3 = vx3 * two - vxo3;
+		real cusq2=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+         //f_ZERO = ((one+drho) * (   c8over27 *(one+(-cusq2)))) - c8over27;
+         //f_E    = ((one+drho) * (   c2over27 *(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq2))) - c2over27 ;
+         //f_W    = ((one+drho) * (   c2over27 *(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq2))) - c2over27 ;
+         //f_N    = ((one+drho) * (   c2over27 *(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq2))) - c2over27 ;
+         //f_S    = ((one+drho) * (   c2over27 *(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq2))) - c2over27 ;
+         //f_T    = ((one+drho) * (   c2over27 *(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq2))) - c2over27 ;
+         //f_B    = ((one+drho) * (   c2over27 *(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq2))) - c2over27 ;
+         //f_NE   = ((one+drho) * (   c1over54 *(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq2))) - c1over54 ;
+         //f_SW   = ((one+drho) * (   c1over54 *(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq2))) - c1over54 ;
+         //f_SE   = ((one+drho) * (   c1over54 *(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq2))) - c1over54 ;
+         //f_NW   = ((one+drho) * (   c1over54 *(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq2))) - c1over54 ;
+         //f_TE   = ((one+drho) * (   c1over54 *(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq2))) - c1over54 ;
+         //f_BW   = ((one+drho) * (   c1over54 *(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq2))) - c1over54 ;
+         //f_BE   = ((one+drho) * (   c1over54 *(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq2))) - c1over54 ;
+         //f_TW   = ((one+drho) * (   c1over54 *(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq2))) - c1over54 ;
+         //f_TN   = ((one+drho) * (   c1over54 *(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq2))) - c1over54 ;
+         //f_BS   = ((one+drho) * (   c1over54 *(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq2))) - c1over54 ;
+         //f_BN   = ((one+drho) * (   c1over54 *(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq2))) - c1over54 ;
+         //f_TS   = ((one+drho) * (   c1over54 *(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq2))) - c1over54 ;
+         //f_TNE  = ((one+drho) * (   c1over216*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))) - c1over216;
+         //f_BSW  = ((one+drho) * (   c1over216*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))) - c1over216;
+         //f_BNE  = ((one+drho) * (   c1over216*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))) - c1over216;
+         //f_TSW  = ((one+drho) * (   c1over216*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))) - c1over216;
+         //f_TSE  = ((one+drho) * (   c1over216*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))) - c1over216;
+         //f_BNW  = ((one+drho) * (   c1over216*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))) - c1over216;
+         //f_BSE  = ((one+drho) * (   c1over216*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))) - c1over216;
+         //f_TNW  = ((one+drho) * (   c1over216*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))) - c1over216;
+         f_ZERO = f_ZERO + ((c1o1+drho) * (-  c8o27* (-cusq)																   +   c8o27* (-cusq2)));
+         f_E    = f_E    + ((c1o1+drho) * (-  c2o27* (c3o1*( vxo1          )+c9o2*( vxo1          )*( vxo1          )-cusq) +   c2o27* (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq2)));
+         f_W    = f_W    + ((c1o1+drho) * (-  c2o27* (c3o1*(-vxo1          )+c9o2*(-vxo1          )*(-vxo1          )-cusq) +   c2o27* (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq2)));
+         f_N    = f_N    + ((c1o1+drho) * (-  c2o27* (c3o1*(      vxo2     )+c9o2*(      vxo2     )*(      vxo2     )-cusq) +   c2o27* (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq2)));
+         f_S    = f_S    + ((c1o1+drho) * (-  c2o27* (c3o1*(     -vxo2     )+c9o2*(     -vxo2     )*(     -vxo2     )-cusq) +   c2o27* (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq2)));
+         f_T    = f_T    + ((c1o1+drho) * (-  c2o27* (c3o1*(           vxo3)+c9o2*(           vxo3)*(           vxo3)-cusq) +   c2o27* (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq2)));
+         f_B    = f_B    + ((c1o1+drho) * (-  c2o27* (c3o1*(          -vxo3)+c9o2*(          -vxo3)*(          -vxo3)-cusq) +   c2o27* (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq2)));
+         f_NE   = f_NE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1+vxo2     )+c9o2*( vxo1+vxo2     )*( vxo1+vxo2     )-cusq) +   c1o54* (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq2)));
+         f_SW   = f_SW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1-vxo2     )+c9o2*(-vxo1-vxo2     )*(-vxo1-vxo2     )-cusq) +   c1o54* (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq2)));
+         f_SE   = f_SE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1-vxo2     )+c9o2*( vxo1-vxo2     )*( vxo1-vxo2     )-cusq) +   c1o54* (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq2)));
+         f_NW   = f_NW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1+vxo2     )+c9o2*(-vxo1+vxo2     )*(-vxo1+vxo2     )-cusq) +   c1o54* (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq2)));
+         f_TE   = f_TE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1     +vxo3)+c9o2*( vxo1     +vxo3)*( vxo1     +vxo3)-cusq) +   c1o54* (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq2)));
+         f_BW   = f_BW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1     -vxo3)+c9o2*(-vxo1     -vxo3)*(-vxo1     -vxo3)-cusq) +   c1o54* (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq2)));
+         f_BE   = f_BE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1     -vxo3)+c9o2*( vxo1     -vxo3)*( vxo1     -vxo3)-cusq) +   c1o54* (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq2)));
+         f_TW   = f_TW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1     +vxo3)+c9o2*(-vxo1     +vxo3)*(-vxo1     +vxo3)-cusq) +   c1o54* (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq2)));
+         f_TN   = f_TN   + ((c1o1+drho) * (-  c1o54* (c3o1*(      vxo2+vxo3)+c9o2*(      vxo2+vxo3)*(      vxo2+vxo3)-cusq) +   c1o54* (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq2)));
+         f_BS   = f_BS   + ((c1o1+drho) * (-  c1o54* (c3o1*(     -vxo2-vxo3)+c9o2*(     -vxo2-vxo3)*(     -vxo2-vxo3)-cusq) +   c1o54* (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq2)));
+         f_BN   = f_BN   + ((c1o1+drho) * (-  c1o54* (c3o1*(      vxo2-vxo3)+c9o2*(      vxo2-vxo3)*(      vxo2-vxo3)-cusq) +   c1o54* (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq2)));
+         f_TS   = f_TS   + ((c1o1+drho) * (-  c1o54* (c3o1*(     -vxo2+vxo3)+c9o2*(     -vxo2+vxo3)*(     -vxo2+vxo3)-cusq) +   c1o54* (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq2)));
+         f_TNE  = f_TNE  + ((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_BSW  = f_BSW  + ((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_BNE  = f_BNE  + ((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_TSW  = f_TSW  + ((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_TSE  = f_TSE  + ((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_BNW  = f_BNW  + ((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_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[d000])[kzero] =  f_ZERO;
+        (D.f[dP00])[ke   ] =  f_E   ;	// f_W   ;//    	
+        (D.f[dM00])[kw   ] =  f_W   ;	// f_E   ;//    	
+        (D.f[d0P0])[kn   ] =  f_N   ;	// f_S   ;//    	
+        (D.f[d0M0])[ks   ] =  f_S   ;	// f_N   ;//    	
+        (D.f[d00P])[kt   ] =  f_T   ;	// f_B   ;//    	
+        (D.f[d00M])[kb   ] =  f_B   ;	// f_T   ;//    	
+        (D.f[dPP0])[kne  ] =  f_NE  ;	// f_SW  ;//    	
+        (D.f[dMM0])[ksw  ] =  f_SW  ;	// f_NE  ;//    	
+        (D.f[dPM0])[kse  ] =  f_SE  ;	// f_NW  ;//    	
+        (D.f[dMP0])[knw  ] =  f_NW  ;	// f_SE  ;//    	
+        (D.f[dP0P])[kte  ] =  f_TE  ;	// f_BW  ;//    	
+        (D.f[dM0M])[kbw  ] =  f_BW  ;	// f_TE  ;//    	
+        (D.f[dP0M])[kbe  ] =  f_BE  ;	// f_TW  ;//    	
+        (D.f[dM0P])[ktw  ] =  f_TW  ;	// f_BE  ;//    	
+        (D.f[d0PP])[ktn  ] =  f_TN  ;	// f_BS  ;//    	
+        (D.f[d0MM])[kbs  ] =  f_BS  ;	// f_TN  ;//    	
+        (D.f[d0PM])[kbn  ] =  f_BN  ;	// f_TS  ;//    	
+        (D.f[d0MP])[kts  ] =  f_TS  ;	// f_BN  ;//    	
+        (D.f[dPPP])[ktne ] =  f_TNE ;	// f_BSW ;//    	
+        (D.f[dMMM])[kbsw ] =  f_BSW ;	// f_BNE ;//    	
+        (D.f[dPPM])[kbne ] =  f_BNE ;	// f_BNW ;//    	
+        (D.f[dMMP])[ktsw ] =  f_TSW ;	// f_BSE ;//    	
+        (D.f[dPMP])[ktse ] =  f_TSE ;	// f_TSW ;//    	
+        (D.f[dMPM])[kbnw ] =  f_BNW ;	// f_TNE ;//    	
+        (D.f[dPMM])[kbse ] =  f_BSE ;	// f_TNW ;//    	
+        (D.f[dMPP])[ktnw ] =  f_TNW ;	// f_TSE ;//    	
+
+		//////////////////////////////////////////////////////////////////////////
+        ////(D.f[d000])[kzero] =   c8over27* (drho-cu_sq);
+        //(D.f[dP00])[ke   ] =   three*c2over27* ( vx1        );		//six
+        //(D.f[dM00])[kw   ] =   three*c2over27* (-vx1        );		//six
+        //(D.f[d0P0])[kn   ] =   three*c2over27* (     vx2    );		//six
+        //(D.f[d0M0])[ks   ] =   three*c2over27* (    -vx2    );		//six
+        //(D.f[d00P])[kt   ] =   three*c2over27* (         vx3);		//six
+        //(D.f[d00M])[kb   ] =   three*c2over27* (        -vx3);		//six
+        //(D.f[dPP0])[kne  ] =   three*c1over54* ( vx1+vx2    );		//six
+        //(D.f[dMM0])[ksw  ] =   three*c1over54* (-vx1-vx2    );		//six
+        //(D.f[dPM0])[kse  ] =   three*c1over54* ( vx1-vx2    );		//six
+        //(D.f[dMP0])[knw  ] =   three*c1over54* (-vx1+vx2    );		//six
+        //(D.f[dP0P])[kte  ] =   three*c1over54* ( vx1    +vx3);		//six
+        //(D.f[dM0M])[kbw  ] =   three*c1over54* (-vx1    -vx3);		//six
+        //(D.f[dP0M])[kbe  ] =   three*c1over54* ( vx1    -vx3);		//six
+        //(D.f[dM0P])[ktw  ] =   three*c1over54* (-vx1    +vx3);		//six
+        //(D.f[d0PP])[ktn  ] =   three*c1over54* (     vx2+vx3);		//six
+        //(D.f[d0MM])[kbs  ] =   three*c1over54* (    -vx2-vx3);		//six
+        //(D.f[d0PM])[kbn  ] =   three*c1over54* (     vx2-vx3);		//six
+        //(D.f[d0MP])[kts  ] =   three*c1over54* (    -vx2+vx3);		//six
+        //(D.f[dPPP])[ktne ] =   three*c1over216*( vx1+vx2+vx3);		//six
+        //(D.f[dMMM])[kbsw ] =   three*c1over216*(-vx1-vx2-vx3);		//six
+        //(D.f[dPPM])[kbne ] =   three*c1over216*( vx1+vx2-vx3);		//six
+        //(D.f[dMMP])[ktsw ] =   three*c1over216*(-vx1-vx2+vx3);		//six
+        //(D.f[dPMP])[ktse ] =   three*c1over216*( vx1-vx2+vx3);		//six
+        //(D.f[dMPM])[kbnw ] =   three*c1over216*(-vx1+vx2-vx3);		//six
+        //(D.f[dPMM])[kbse ] =   three*c1over216*( vx1-vx2-vx3);		//six
+        //(D.f[dMPP])[ktnw ] =   three*c1over216*(-vx1+vx2+vx3);		//six
+        //(D.f[d000])[kzero] =   c8over27* (drho-cu_sq);
+        //(D.f[dP00])[ke   ] =   c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
+        //(D.f[dM00])[kw   ] =   c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
+        //(D.f[d0P0])[kn   ] =   c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
+        //(D.f[d0M0])[ks   ] =   c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
+        //(D.f[d00P])[kt   ] =   c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
+        //(D.f[d00M])[kb   ] =   c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
+        //(D.f[dPP0])[kne  ] =   c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+        //(D.f[dMM0])[ksw  ] =   c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+        //(D.f[dPM0])[kse  ] =   c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+        //(D.f[dMP0])[knw  ] =   c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+        //(D.f[dP0P])[kte  ] =   c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+        //(D.f[dM0M])[kbw  ] =   c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+        //(D.f[dP0M])[kbe  ] =   c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+        //(D.f[dM0P])[ktw  ] =   c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+        //(D.f[d0PP])[ktn  ] =   c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+        //(D.f[d0MM])[kbs  ] =   c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+        //(D.f[d0PM])[kbn  ] =   c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+        //(D.f[d0MP])[kts  ] =   c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+        //(D.f[dPPP])[ktne ] =   c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+        //(D.f[dMMM])[kbsw ] =   c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+        //(D.f[dPPM])[kbne ] =   c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+        //(D.f[dMMP])[ktsw ] =   c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+        //(D.f[dPMP])[ktse ] =   c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+        //(D.f[dMPM])[kbnw ] =   c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+        //(D.f[dPMM])[kbse ] =   c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+        //(D.f[dMPP])[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/core/GPU/WaleCumulant27.cu
similarity index 89%
rename from src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu
rename to src/gpu/core/GPU/WaleCumulant27.cu
index 6bac690a881494520a33e901c35c3f51e4d2bfc7..9180b6a6d1ed09a72ce8d1f97440c88384fa9137 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu
+++ b/src/gpu/core/GPU/WaleCumulant27.cu
@@ -50,63 +50,63 @@ __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -120,33 +120,33 @@ __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];
-			real mfabb = (D.f[DIR_M00])[kw];
-			real mfbcb = (D.f[DIR_0P0])[k];
-			real mfbab = (D.f[DIR_0M0])[ks];
-			real mfbbc = (D.f[DIR_00P])[k];
-			real mfbba = (D.f[DIR_00M])[kb];
-			real mfccb = (D.f[DIR_PP0])[k];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];
-			real mfacb = (D.f[DIR_MP0])[kw];
-			real mfcbc = (D.f[DIR_P0P])[k];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];
-			real mfabc = (D.f[DIR_M0P])[kw];
-			real mfbcc = (D.f[DIR_0PP])[k];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];
-			real mfbac = (D.f[DIR_0MP])[ks];
-			real mfbbb = (D.f[DIR_000])[k];
-			real mfccc = (D.f[DIR_PPP])[k];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks];
-			real mfacc = (D.f[DIR_MPP])[kw];
-			real mfcca = (D.f[DIR_PPM])[kb];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k];
+			real mfabb = (D.f[dM00])[kw];
+			real mfbcb = (D.f[d0P0])[k];
+			real mfbab = (D.f[d0M0])[ks];
+			real mfbbc = (D.f[d00P])[k];
+			real mfbba = (D.f[d00M])[kb];
+			real mfccb = (D.f[dPP0])[k];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];
+			real mfacb = (D.f[dMP0])[kw];
+			real mfcbc = (D.f[dP0P])[k];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];
+			real mfabc = (D.f[dM0P])[kw];
+			real mfbcc = (D.f[d0PP])[k];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];
+			real mfbac = (D.f[d0MP])[ks];
+			real mfbbb = (D.f[d000])[k];
+			real mfccc = (D.f[dPPP])[k];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks];
+			real mfacc = (D.f[dMPP])[kw];
+			real mfcca = (D.f[dPPM])[kb];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -300,7 +300,7 @@ __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			real SdSd = S1d*S1d + S2d*S2d + S3d*S3d + S4d*S4d + S5d*S5d + S6d*S6d + S7d*S7d + S8d*S8d + S9d*S9d;
 			/////////////// Computing turbulent viscosity ///////////////////////
 
-			//wOper = (real)pow((double)SdSd, 1.5) / ((real)pow((double)S2, 2.5) + (real)pow((double)SdSd, 1.25) + smallSingle);// 1e-26f);
+			//wOper = (real)pow((double)SdSd, 1.5) / ((real)pow((double)S2, 2.5) + (real)pow((double)SdSd, 1.25) + cSmallSingle);// 1e-26f);
 			wOper = (float)pow((double)SdSd, 0.25) / ((float)pow((double)((float)pow((double)S2, 0.5) / ((float)pow((double)SdSd, 0.25) + 1e-10)), 5.0) + 1);
 
 			nuTurb = (Cw*Cw * DelX*DelX) * wOper;
@@ -1007,33 +1007,33 @@ __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;
-			(D.f[DIR_M00])[kw] = mfcbb;
-			(D.f[DIR_0P0])[k] = mfbab;
-			(D.f[DIR_0M0])[ks] = mfbcb;
-			(D.f[DIR_00P])[k] = mfbba;
-			(D.f[DIR_00M])[kb] = mfbbc;
-			(D.f[DIR_PP0])[k] = mfaab;
-			(D.f[DIR_MM0])[ksw] = mfccb;
-			(D.f[DIR_PM0])[ks] = mfacb;
-			(D.f[DIR_MP0])[kw] = mfcab;
-			(D.f[DIR_P0P])[k] = mfaba;
-			(D.f[DIR_M0M])[kbw] = mfcbc;
-			(D.f[DIR_P0M])[kb] = mfabc;
-			(D.f[DIR_M0P])[kw] = mfcba;
-			(D.f[DIR_0PP])[k] = mfbaa;
-			(D.f[DIR_0MM])[kbs] = mfbcc;
-			(D.f[DIR_0PM])[kb] = mfbac;
-			(D.f[DIR_0MP])[ks] = mfbca;
-			(D.f[DIR_000])[k] = mfbbb;
-			(D.f[DIR_PPP])[k] = mfaaa;
-			(D.f[DIR_PMP])[ks] = mfaca;
-			(D.f[DIR_PPM])[kb] = mfaac;
-			(D.f[DIR_PMM])[kbs] = mfacc;
-			(D.f[DIR_MPP])[kw] = mfcaa;
-			(D.f[DIR_MMP])[ksw] = mfcca;
-			(D.f[DIR_MPM])[kbw] = mfcac;
-			(D.f[DIR_MMM])[kbsw] = mfccc;
+			(D.f[dP00])[k] = mfabb;
+			(D.f[dM00])[kw] = mfcbb;
+			(D.f[d0P0])[k] = mfbab;
+			(D.f[d0M0])[ks] = mfbcb;
+			(D.f[d00P])[k] = mfbba;
+			(D.f[d00M])[kb] = mfbbc;
+			(D.f[dPP0])[k] = mfaab;
+			(D.f[dMM0])[ksw] = mfccb;
+			(D.f[dPM0])[ks] = mfacb;
+			(D.f[dMP0])[kw] = mfcab;
+			(D.f[dP0P])[k] = mfaba;
+			(D.f[dM0M])[kbw] = mfcbc;
+			(D.f[dP0M])[kb] = mfabc;
+			(D.f[dM0P])[kw] = mfcba;
+			(D.f[d0PP])[k] = mfbaa;
+			(D.f[d0MM])[kbs] = mfbcc;
+			(D.f[d0PM])[kb] = mfbac;
+			(D.f[d0MP])[ks] = mfbca;
+			(D.f[d000])[k] = mfbbb;
+			(D.f[dPPP])[k] = mfaaa;
+			(D.f[dPMP])[ks] = mfaca;
+			(D.f[dPPM])[kb] = mfaac;
+			(D.f[dPMM])[kbs] = mfacc;
+			(D.f[dMPP])[kw] = mfcaa;
+			(D.f[dMMP])[ksw] = mfcca;
+			(D.f[dMPM])[kbw] = mfcac;
+			(D.f[dMMM])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/core/GPU/WallFunction.cu b/src/gpu/core/GPU/WallFunction.cu
new file mode 100644
index 0000000000000000000000000000000000000000..2777a11fd8044e746885586aec3e33fa242642b4
--- /dev/null
+++ b/src/gpu/core/GPU/WallFunction.cu
@@ -0,0 +1,520 @@
+/* Device code */
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+
+//////////////////////////////////////////////////////////////////////////////
+__global__ void WallFunction27(
+										  real* vx,
+										  real* vy,
+										  real* vz,
+										  real* DD, 
+										  int* k_Q, 
+										  real* QQ,
+										  unsigned int numberOfBCnodes, 
+										  real om1, 
+										  unsigned int* neighborX,
+										  unsigned int* neighborY,
+										  unsigned int* neighborZ,
+										  unsigned long long numberOfLBnodes, 
+										  bool isEvenTimestep)
+{
+   Distributions27 D;
+   if (isEvenTimestep==true)
+   {
+      D.f[dP00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dM00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00P] = &DD[d00P * numberOfLBnodes];
+      D.f[d00M] = &DD[d00M * numberOfLBnodes];
+      D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
+      D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
+      D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
+      D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
+      D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
+      D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
+      D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
+      D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
+      D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
+   } 
+   else
+   {
+      D.f[dM00] = &DD[dP00 * numberOfLBnodes];
+      D.f[dP00] = &DD[dM00 * numberOfLBnodes];
+      D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
+      D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
+      D.f[d00M] = &DD[d00P * numberOfLBnodes];
+      D.f[d00P] = &DD[d00M * numberOfLBnodes];
+      D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
+      D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
+      D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
+      D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
+      D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
+      D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
+      D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
+      D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
+      D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
+      D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
+      D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
+      D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
+      D.f[d000] = &DD[d000 * numberOfLBnodes];
+      D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
+      D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
+      D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
+      D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
+      D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
+      D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
+      D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
+      D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<numberOfBCnodes)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      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)
+      ////////////////////////////////////////////////////////////////////////////////
+      //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[dP00 * numberOfBCnodes];
+      //q_dirW   = &QQ[dM00 * numberOfBCnodes];
+      //q_dirN   = &QQ[d0P0 * numberOfBCnodes];
+      //q_dirS   = &QQ[d0M0 * numberOfBCnodes];
+      //q_dirT   = &QQ[d00P * numberOfBCnodes];
+      //q_dirB   = &QQ[d00M * numberOfBCnodes];
+      //q_dirNE  = &QQ[dPP0 * numberOfBCnodes];
+      //q_dirSW  = &QQ[dMM0 * numberOfBCnodes];
+      //q_dirSE  = &QQ[dPM0 * numberOfBCnodes];
+      //q_dirNW  = &QQ[dMP0 * numberOfBCnodes];
+      //q_dirTE  = &QQ[dP0P * numberOfBCnodes];
+      //q_dirBW  = &QQ[dM0M * numberOfBCnodes];
+      //q_dirBE  = &QQ[dP0M * numberOfBCnodes];
+      //q_dirTW  = &QQ[dM0P * numberOfBCnodes];
+      //q_dirTN  = &QQ[d0PP * numberOfBCnodes];
+      //q_dirBS  = &QQ[d0MM * numberOfBCnodes];
+      //q_dirBN  = &QQ[d0PM * numberOfBCnodes];
+      //q_dirTS  = &QQ[d0MP * numberOfBCnodes];
+      //q_dirTNE = &QQ[dPPP * numberOfBCnodes];
+      //q_dirTSW = &QQ[dMMP * numberOfBCnodes];
+      //q_dirTSE = &QQ[dPMP * numberOfBCnodes];
+      //q_dirTNW = &QQ[dMPP * numberOfBCnodes];
+      //q_dirBNE = &QQ[dPPM * numberOfBCnodes];
+      //q_dirBSW = &QQ[dMMM * numberOfBCnodes];
+      //q_dirBSE = &QQ[dPMM * numberOfBCnodes];
+      //q_dirBNW = &QQ[dMPM * 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];
+      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 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[dP00])[ke   ];
+      f_E    = (D.f[dM00])[kw   ];
+      f_S    = (D.f[d0P0])[kn   ];
+      f_N    = (D.f[d0M0])[ks   ];
+      f_B    = (D.f[d00P])[kt   ];
+      f_T    = (D.f[d00M])[kb   ];
+      f_SW   = (D.f[dPP0])[kne  ];
+      f_NE   = (D.f[dMM0])[ksw  ];
+      f_NW   = (D.f[dPM0])[kse  ];
+      f_SE   = (D.f[dMP0])[knw  ];
+      f_BW   = (D.f[dP0P])[kte  ];
+      f_TE   = (D.f[dM0M])[kbw  ];
+      f_TW   = (D.f[dP0M])[kbe  ];
+      f_BE   = (D.f[dM0P])[ktw  ];
+      f_BS   = (D.f[d0PP])[ktn  ];
+      f_TN   = (D.f[d0MM])[kbs  ];
+      f_TS   = (D.f[d0PM])[kbn  ];
+      f_BN   = (D.f[d0MP])[kts  ];
+      f_BSW  = (D.f[dPPP])[ktne ];
+      f_BNE  = (D.f[dMMP])[ktsw ];
+      f_BNW  = (D.f[dPMP])[ktse ];
+      f_BSE  = (D.f[dMPP])[ktnw ];
+      f_TSW  = (D.f[dPPM])[kbne ];
+      f_TNE  = (D.f[dMMM])[kbsw ];
+      f_TNW  = (D.f[dPMM])[kbse ];
+      f_TSE  = (D.f[dMPM])[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[d000])[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); 
+         
+
+    //   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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (one + drho);
+
+	  real nu = c1o3 * (c1o1 / om1 - c1o2);
+	  real qw = c1o1;
+	  real uTau = sqrt(nu * (vx1 - VeloX) / qw);
+
+	  if (abs(uTau)/nu>11){
+	  uTau = vx1 * 0.41 / (log10(9.8 * uTau * qw / nu));
+	  
+
+	  
+	  vx[k] = vx1 - uTau * uTau * qw / nu;
+	  vx[k] = (vx[k]> 0.05) ? 0.05 : ((vx[k]< -0.05) ? -0.05 : vx[k] );  
+	  }
+	  else{ vx[k]=c0o1; }
+	  //vy[k] = 0.01;							//Test...muss wieder raus
+	  //vz[k] = 0.01;							//Test...muss wieder raus
+
+   //   //////////////////////////////////////////////////////////////////////////
+   //   if (isEvenTimestep==false)
+   //   {
+   //      D.f[dP00] = &DD[dP00 * size_Mat];
+   //      D.f[dM00] = &DD[dM00 * size_Mat];
+   //      D.f[d0P0] = &DD[d0P0 * size_Mat];
+   //      D.f[d0M0] = &DD[d0M0 * size_Mat];
+   //      D.f[d00P] = &DD[d00P * size_Mat];
+   //      D.f[d00M] = &DD[d00M * size_Mat];
+   //      D.f[dPP0] = &DD[dPP0 * size_Mat];
+   //      D.f[dMM0] = &DD[dMM0 * size_Mat];
+   //      D.f[dPM0] = &DD[dPM0 * size_Mat];
+   //      D.f[dMP0] = &DD[dMP0 * size_Mat];
+   //      D.f[dP0P] = &DD[dP0P * size_Mat];
+   //      D.f[dM0M] = &DD[dM0M * size_Mat];
+   //      D.f[dP0M] = &DD[dP0M * size_Mat];
+   //      D.f[dM0P] = &DD[dM0P * size_Mat];
+   //      D.f[d0PP] = &DD[d0PP * size_Mat];
+   //      D.f[d0MM] = &DD[d0MM * size_Mat];
+   //      D.f[d0PM] = &DD[d0PM * size_Mat];
+   //      D.f[d0MP] = &DD[d0MP * size_Mat];
+   //      D.f[d000] = &DD[d000 * size_Mat];
+   //      D.f[dPPP] = &DD[dPPP * size_Mat];
+   //      D.f[dMMP] = &DD[dMMP * size_Mat];
+   //      D.f[dPMP] = &DD[dPMP * size_Mat];
+   //      D.f[dMPP] = &DD[dMPP * size_Mat];
+   //      D.f[dPPM] = &DD[dPPM * size_Mat];
+   //      D.f[dMMM] = &DD[dMMM * size_Mat];
+   //      D.f[dPMM] = &DD[dPMM * size_Mat];
+   //      D.f[dMPM] = &DD[dMPM * size_Mat];
+   //   } 
+   //   else
+   //   {
+   //      D.f[dM00] = &DD[dP00 * size_Mat];
+   //      D.f[dP00] = &DD[dM00 * size_Mat];
+   //      D.f[d0M0] = &DD[d0P0 * size_Mat];
+   //      D.f[d0P0] = &DD[d0M0 * size_Mat];
+   //      D.f[d00M] = &DD[d00P * size_Mat];
+   //      D.f[d00P] = &DD[d00M * size_Mat];
+   //      D.f[dMM0] = &DD[dPP0 * size_Mat];
+   //      D.f[dPP0] = &DD[dMM0 * size_Mat];
+   //      D.f[dMP0] = &DD[dPM0 * size_Mat];
+   //      D.f[dPM0] = &DD[dMP0 * size_Mat];
+   //      D.f[dM0M] = &DD[dP0P * size_Mat];
+   //      D.f[dP0P] = &DD[dM0M * size_Mat];
+   //      D.f[dM0P] = &DD[dP0M * size_Mat];
+   //      D.f[dP0M] = &DD[dM0P * size_Mat];
+   //      D.f[d0MM] = &DD[d0PP * size_Mat];
+   //      D.f[d0PP] = &DD[d0MM * size_Mat];
+   //      D.f[d0MP] = &DD[d0PM * size_Mat];
+   //      D.f[d0PM] = &DD[d0MP * size_Mat];
+   //      D.f[d000] = &DD[d000 * size_Mat];
+   //      D.f[dPPP] = &DD[dMMM * size_Mat];
+   //      D.f[dMMP] = &DD[dPPM * size_Mat];
+   //      D.f[dPMP] = &DD[dMPM * size_Mat];
+   //      D.f[dMPP] = &DD[dPMM * size_Mat];
+   //      D.f[dPPM] = &DD[dMMP * size_Mat];
+   //      D.f[dMMM] = &DD[dPPP * size_Mat];
+   //      D.f[dPMM] = &DD[dMPP * size_Mat];
+   //      D.f[dMPM] = &DD[dPMP * size_Mat];
+   //   }
+   //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   //   //Test
+   //   //(D.f[d000])[k]=c1o10;
+   //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	  ////ToDo anders Klammern
+
+   //   q = q_dirE[k];
+   //   if (q>=zero && q<=one)
+   //   {
+   //      feq=c2over27* (drho/*+three*( vx1        )*/+c9over2*( vx1        )*( vx1        ) * (one + drho)-cu_sq); 
+   //      (D.f[dM00])[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[dM00])[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[dP00])[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[dP00])[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[d0M0])[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[d0M0])[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[d0P0])[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[d0P0])[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[d00M])[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[d00M])[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[d00P])[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[d00P])[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[dMM0])[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[dMM0])[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[dPP0])[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[dPP0])[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[dMP0])[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[dMP0])[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[dPM0])[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[dPM0])[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[dM0M])[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[dM0M])[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[dP0P])[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[dP0P])[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[dM0P])[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[dM0P])[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[dP0M])[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[dP0M])[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[d0MM])[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[d0MM])[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[d0PP])[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[d0PP])[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[d0MP])[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[d0MP])[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[d0PM])[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[d0PM])[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[dMMM])[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[dMMM])[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[dPPP])[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[dPPP])[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[dMMP])[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[dMMP])[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[dPPM])[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[dPPM])[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[dMPM])[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[dMPM])[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[dPMP])[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[dPMP])[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[dMPP])[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[dMPP])[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[dPMM])[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[dPMM])[kbse]=zero;
+   //   }
+   }
+}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+
+
+
diff --git a/src/gpu/VirtualFluids_GPU/Init/InitLattice.cpp b/src/gpu/core/Init/InitLattice.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Init/InitLattice.cpp
rename to src/gpu/core/Init/InitLattice.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Init/InitLattice.h b/src/gpu/core/Init/InitLattice.h
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/Init/InitLattice.h
rename to src/gpu/core/Init/InitLattice.h
index 512543348fae69ea9dfe03ca5300e45a650b7099..8de22f321899ba7f8a08f8809fbd904c2d9ec1ec 100644
--- a/src/gpu/VirtualFluids_GPU/Init/InitLattice.h
+++ b/src/gpu/core/Init/InitLattice.h
@@ -33,7 +33,7 @@
 #ifndef INIT_LATTICE_H
 #define INIT_LATTICE_H
 
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 
 class Parameter;
 class PreProcessor;
diff --git a/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp b/src/gpu/core/Init/PositionReader.cpp
similarity index 80%
rename from src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp
rename to src/gpu/core/Init/PositionReader.cpp
index 6eaa0b17653aaf5257c00e674c87e2844c26cf5d..2863ce419e1e74a94f9e65ea2546a7bb143241b6 100644
--- a/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp
+++ b/src/gpu/core/Init/PositionReader.cpp
@@ -140,41 +140,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[DIR_P00   ] = &QQ[DIR_P00   *sizeQ];
-	Q.q27[DIR_M00   ] = &QQ[DIR_M00   *sizeQ];
-	Q.q27[DIR_0P0   ] = &QQ[DIR_0P0   *sizeQ];
-	Q.q27[DIR_0M0   ] = &QQ[DIR_0M0   *sizeQ];
-	Q.q27[DIR_00P   ] = &QQ[DIR_00P   *sizeQ];
-	Q.q27[DIR_00M   ] = &QQ[DIR_00M   *sizeQ];
-	Q.q27[DIR_PP0  ] = &QQ[DIR_PP0  *sizeQ];
-	Q.q27[DIR_MM0  ] = &QQ[DIR_MM0  *sizeQ];
-	Q.q27[DIR_PM0  ] = &QQ[DIR_PM0  *sizeQ];
-	Q.q27[DIR_MP0  ] = &QQ[DIR_MP0  *sizeQ];
-	Q.q27[DIR_P0P  ] = &QQ[DIR_P0P  *sizeQ];
-	Q.q27[DIR_M0M  ] = &QQ[DIR_M0M  *sizeQ];
-	Q.q27[DIR_P0M  ] = &QQ[DIR_P0M  *sizeQ];
-	Q.q27[DIR_M0P  ] = &QQ[DIR_M0P  *sizeQ];
-	Q.q27[DIR_0PP  ] = &QQ[DIR_0PP  *sizeQ];
-	Q.q27[DIR_0MM  ] = &QQ[DIR_0MM  *sizeQ];
-	Q.q27[DIR_0PM  ] = &QQ[DIR_0PM  *sizeQ];
-	Q.q27[DIR_0MP  ] = &QQ[DIR_0MP  *sizeQ];
-	Q.q27[DIR_000] = &QQ[DIR_000*sizeQ];
-	Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ];
-	Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ];
-	Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ];
-	Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ];
-	Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ];
-	Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ];
-	Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ];
-	Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ];
+	Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
+	Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
+	Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
+	Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
+	Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
+	Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
+	Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
+	Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
+	Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
+	Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
+	Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
+	Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
+	Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
+	Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
+	Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
+	Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
+	Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
+	Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
+	Q.q27[d000] = &QQ[d000*sizeQ];
+	Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
+	Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
+	Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
+	Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
+	Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
+	Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
+	Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
+	Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
 	//////////////////////////////////////////////////////////////////
 	for(uint u=0; u<para->getParH(para->getFine())->propellerBC.numberOfBCnodes; u++)
 	{
-		for (size_t dir = DIR_P00; dir<=DIR_MMM; dir++)
+		for (size_t dir = dP00; dir<=dMMM; dir++)
 		{
-			if ((dir==DIR_P00)  || 
-				(dir==DIR_PP0) || (dir==DIR_PM0) || (dir==DIR_P0P) || (dir==DIR_P0M) ||
-				(dir==DIR_PPP)|| (dir==DIR_PPM)|| (dir==DIR_PMP)|| (dir==DIR_PMM))
+			if ((dir==dP00)  || 
+				(dir==dPP0) || (dir==dPM0) || (dir==dP0P) || (dir==dP0M) ||
+				(dir==dPPP)|| (dir==dPPM)|| (dir==dPMP)|| (dir==dPMM))
 			{
 				Q.q27[dir][u] = 1.0f;
 			} 
diff --git a/src/gpu/VirtualFluids_GPU/Init/PositionReader.h b/src/gpu/core/Init/PositionReader.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Init/PositionReader.h
rename to src/gpu/core/Init/PositionReader.h
diff --git a/src/gpu/VirtualFluids_GPU/Init/VfReader.cpp b/src/gpu/core/Init/VfReader.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Init/VfReader.cpp
rename to src/gpu/core/Init/VfReader.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Init/VfReader.h b/src/gpu/core/Init/VfReader.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Init/VfReader.h
rename to src/gpu/core/Init/VfReader.h
diff --git a/src/gpu/core/Kernel/AdvectionDiffusionKernel.h b/src/gpu/core/Kernel/AdvectionDiffusionKernel.h
new file mode 100644
index 0000000000000000000000000000000000000000..b83cff408eb1538eb7ddfee6ce0b73e16c7eefb2
--- /dev/null
+++ b/src/gpu/core/Kernel/AdvectionDiffusionKernel.h
@@ -0,0 +1,10 @@
+#ifndef AdvectionDiffusionKernel_H
+#define AdvectionDiffusionKernel_H
+
+#include "Kernel/KernelImp.h"
+
+class AdvectionDiffusionKernel : public KernelImp
+{
+	virtual void run() = 0;
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.cu b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.cu
new file mode 100644
index 0000000000000000000000000000000000000000..5546da0323d140d9240e7cbbde7a6c82f49c534e
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.cu
@@ -0,0 +1,40 @@
+#include "F16CompressibleAdvectionDiffusion.h"
+
+#include "F16CompressibleAdvectionDiffusion_Device.cuh"
+#include "Parameter/Parameter.h"
+#include <cuda_helper/CudaGrid.h>
+
+std::shared_ptr<F16CompressibleAdvectionDiffusion> F16CompressibleAdvectionDiffusion::getNewInstance(std::shared_ptr<Parameter> para, int level)
+{
+	return std::shared_ptr<F16CompressibleAdvectionDiffusion>(new F16CompressibleAdvectionDiffusion(para, level));
+}
+
+void F16CompressibleAdvectionDiffusion::run()
+{
+    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
+
+    F16CompressibleAdvectionDiffusion_Device<<< grid.grid, grid.threads >>>(
+        para->getParD(level)->diffusivity,
+        para->getParD(level)->typeOfGridNode,
+        para->getParD(level)->neighborX,
+        para->getParD(level)->neighborY,
+        para->getParD(level)->neighborZ,
+        para->getParD(level)->distributions.f[0],
+        para->getParD(level)->distributionsAD.f[0],
+        para->getParD(level)->numberOfNodes,
+        para->getParD(level)->isEvenTimestep);
+    getLastCudaError("F16CompressibleAdvectionDiffusion_Device execution failed");
+}
+
+F16CompressibleAdvectionDiffusion::F16CompressibleAdvectionDiffusion(std::shared_ptr<Parameter> para, int level)
+{
+	this->para = para;
+	this->level = level;
+
+	myPreProcessorTypes.push_back(InitCompAD27);
+
+}
+
+F16CompressibleAdvectionDiffusion::F16CompressibleAdvectionDiffusion()
+{
+}
diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.h b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.h
new file mode 100644
index 0000000000000000000000000000000000000000..5eda04602ce24aa5f2bac5c6043aee7f7dcc47c6
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.h
@@ -0,0 +1,16 @@
+#ifndef F16CompressibleAdvectionDiffusion_H
+#define F16CompressibleAdvectionDiffusion_H
+
+#include "Kernel/AdvectionDiffusionKernel.h"
+
+class F16CompressibleAdvectionDiffusion : public AdvectionDiffusionKernel
+{
+public:
+	static std::shared_ptr<F16CompressibleAdvectionDiffusion> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	F16CompressibleAdvectionDiffusion();
+	F16CompressibleAdvectionDiffusion(std::shared_ptr< Parameter> para, int level);
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion_Device.cu
similarity index 75%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu
rename to src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion_Device.cu
index eb6c9814efdedb822ddc3052d6b577750be83b12..d11c715ad26230d95176990f84744d9c3faf145a 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
+__global__ void F16CompressibleAdvectionDiffusion_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
@@ -38,125 +38,125 @@ __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			Distributions27 D27;
 			if (EvenOrOdd == true)
 			{
-				D27.f[DIR_P00] = &DD27[DIR_P00 * size_Mat];
-				D27.f[DIR_M00] = &DD27[DIR_M00 * size_Mat];
-				D27.f[DIR_0P0] = &DD27[DIR_0P0 * size_Mat];
-				D27.f[DIR_0M0] = &DD27[DIR_0M0 * size_Mat];
-				D27.f[DIR_00P] = &DD27[DIR_00P * size_Mat];
-				D27.f[DIR_00M] = &DD27[DIR_00M * size_Mat];
-				D27.f[DIR_PP0] = &DD27[DIR_PP0 * size_Mat];
-				D27.f[DIR_MM0] = &DD27[DIR_MM0 * size_Mat];
-				D27.f[DIR_PM0] = &DD27[DIR_PM0 * size_Mat];
-				D27.f[DIR_MP0] = &DD27[DIR_MP0 * size_Mat];
-				D27.f[DIR_P0P] = &DD27[DIR_P0P * size_Mat];
-				D27.f[DIR_M0M] = &DD27[DIR_M0M * size_Mat];
-				D27.f[DIR_P0M] = &DD27[DIR_P0M * size_Mat];
-				D27.f[DIR_M0P] = &DD27[DIR_M0P * size_Mat];
-				D27.f[DIR_0PP] = &DD27[DIR_0PP * size_Mat];
-				D27.f[DIR_0MM] = &DD27[DIR_0MM * size_Mat];
-				D27.f[DIR_0PM] = &DD27[DIR_0PM * size_Mat];
-				D27.f[DIR_0MP] = &DD27[DIR_0MP * size_Mat];
-				D27.f[DIR_000] = &DD27[DIR_000 * size_Mat];
-				D27.f[DIR_PPP] = &DD27[DIR_PPP * size_Mat];
-				D27.f[DIR_MMP] = &DD27[DIR_MMP * size_Mat];
-				D27.f[DIR_PMP] = &DD27[DIR_PMP * size_Mat];
-				D27.f[DIR_MPP] = &DD27[DIR_MPP * size_Mat];
-				D27.f[DIR_PPM] = &DD27[DIR_PPM * size_Mat];
-				D27.f[DIR_MMM] = &DD27[DIR_MMM * size_Mat];
-				D27.f[DIR_PMM] = &DD27[DIR_PMM * size_Mat];
-				D27.f[DIR_MPM] = &DD27[DIR_MPM * size_Mat];
+				D27.f[dP00] = &DD27[dP00 * size_Mat];
+				D27.f[dM00] = &DD27[dM00 * size_Mat];
+				D27.f[d0P0] = &DD27[d0P0 * size_Mat];
+				D27.f[d0M0] = &DD27[d0M0 * size_Mat];
+				D27.f[d00P] = &DD27[d00P * size_Mat];
+				D27.f[d00M] = &DD27[d00M * size_Mat];
+				D27.f[dPP0] = &DD27[dPP0 * size_Mat];
+				D27.f[dMM0] = &DD27[dMM0 * size_Mat];
+				D27.f[dPM0] = &DD27[dPM0 * size_Mat];
+				D27.f[dMP0] = &DD27[dMP0 * size_Mat];
+				D27.f[dP0P] = &DD27[dP0P * size_Mat];
+				D27.f[dM0M] = &DD27[dM0M * size_Mat];
+				D27.f[dP0M] = &DD27[dP0M * size_Mat];
+				D27.f[dM0P] = &DD27[dM0P * size_Mat];
+				D27.f[d0PP] = &DD27[d0PP * size_Mat];
+				D27.f[d0MM] = &DD27[d0MM * size_Mat];
+				D27.f[d0PM] = &DD27[d0PM * size_Mat];
+				D27.f[d0MP] = &DD27[d0MP * size_Mat];
+				D27.f[d000] = &DD27[d000 * size_Mat];
+				D27.f[dPPP] = &DD27[dPPP * size_Mat];
+				D27.f[dMMP] = &DD27[dMMP * size_Mat];
+				D27.f[dPMP] = &DD27[dPMP * size_Mat];
+				D27.f[dMPP] = &DD27[dMPP * size_Mat];
+				D27.f[dPPM] = &DD27[dPPM * size_Mat];
+				D27.f[dMMM] = &DD27[dMMM * size_Mat];
+				D27.f[dPMM] = &DD27[dPMM * size_Mat];
+				D27.f[dMPM] = &DD27[dMPM * size_Mat];
 			}
 			else
 			{
-				D27.f[DIR_M00] = &DD27[DIR_P00 * size_Mat];
-				D27.f[DIR_P00] = &DD27[DIR_M00 * size_Mat];
-				D27.f[DIR_0M0] = &DD27[DIR_0P0 * size_Mat];
-				D27.f[DIR_0P0] = &DD27[DIR_0M0 * size_Mat];
-				D27.f[DIR_00M] = &DD27[DIR_00P * size_Mat];
-				D27.f[DIR_00P] = &DD27[DIR_00M * size_Mat];
-				D27.f[DIR_MM0] = &DD27[DIR_PP0 * size_Mat];
-				D27.f[DIR_PP0] = &DD27[DIR_MM0 * size_Mat];
-				D27.f[DIR_MP0] = &DD27[DIR_PM0 * size_Mat];
-				D27.f[DIR_PM0] = &DD27[DIR_MP0 * size_Mat];
-				D27.f[DIR_M0M] = &DD27[DIR_P0P * size_Mat];
-				D27.f[DIR_P0P] = &DD27[DIR_M0M * size_Mat];
-				D27.f[DIR_M0P] = &DD27[DIR_P0M * size_Mat];
-				D27.f[DIR_P0M] = &DD27[DIR_M0P * size_Mat];
-				D27.f[DIR_0MM] = &DD27[DIR_0PP * size_Mat];
-				D27.f[DIR_0PP] = &DD27[DIR_0MM * size_Mat];
-				D27.f[DIR_0MP] = &DD27[DIR_0PM * size_Mat];
-				D27.f[DIR_0PM] = &DD27[DIR_0MP * size_Mat];
-				D27.f[DIR_000] = &DD27[DIR_000 * size_Mat];
-				D27.f[DIR_MMM] = &DD27[DIR_PPP * size_Mat];
-				D27.f[DIR_PPM] = &DD27[DIR_MMP * size_Mat];
-				D27.f[DIR_MPM] = &DD27[DIR_PMP * size_Mat];
-				D27.f[DIR_PMM] = &DD27[DIR_MPP * size_Mat];
-				D27.f[DIR_MMP] = &DD27[DIR_PPM * size_Mat];
-				D27.f[DIR_PPP] = &DD27[DIR_MMM * size_Mat];
-				D27.f[DIR_MPP] = &DD27[DIR_PMM * size_Mat];
-				D27.f[DIR_PMP] = &DD27[DIR_MPM * size_Mat];
+				D27.f[dM00] = &DD27[dP00 * size_Mat];
+				D27.f[dP00] = &DD27[dM00 * size_Mat];
+				D27.f[d0M0] = &DD27[d0P0 * size_Mat];
+				D27.f[d0P0] = &DD27[d0M0 * size_Mat];
+				D27.f[d00M] = &DD27[d00P * size_Mat];
+				D27.f[d00P] = &DD27[d00M * size_Mat];
+				D27.f[dMM0] = &DD27[dPP0 * size_Mat];
+				D27.f[dPP0] = &DD27[dMM0 * size_Mat];
+				D27.f[dMP0] = &DD27[dPM0 * size_Mat];
+				D27.f[dPM0] = &DD27[dMP0 * size_Mat];
+				D27.f[dM0M] = &DD27[dP0P * size_Mat];
+				D27.f[dP0P] = &DD27[dM0M * size_Mat];
+				D27.f[dM0P] = &DD27[dP0M * size_Mat];
+				D27.f[dP0M] = &DD27[dM0P * size_Mat];
+				D27.f[d0MM] = &DD27[d0PP * size_Mat];
+				D27.f[d0PP] = &DD27[d0MM * size_Mat];
+				D27.f[d0MP] = &DD27[d0PM * size_Mat];
+				D27.f[d0PM] = &DD27[d0MP * size_Mat];
+				D27.f[d000] = &DD27[d000 * size_Mat];
+				D27.f[dMMM] = &DD27[dPPP * size_Mat];
+				D27.f[dPPM] = &DD27[dMMP * size_Mat];
+				D27.f[dMPM] = &DD27[dPMP * size_Mat];
+				D27.f[dPMM] = &DD27[dMPP * size_Mat];
+				D27.f[dMMP] = &DD27[dPPM * size_Mat];
+				D27.f[dPPP] = &DD27[dMMM * size_Mat];
+				D27.f[dMPP] = &DD27[dPMM * size_Mat];
+				D27.f[dPMP] = &DD27[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -169,61 +169,61 @@ __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[DIR_P00])[k];//ke
-			real fE = (D.f[DIR_M00])[kw];
-			real fS = (D.f[DIR_0P0])[k];//kn
-			real fN = (D.f[DIR_0M0])[ks];
-			real fB = (D.f[DIR_00P])[k];//kt
-			real fT = (D.f[DIR_00M])[kb];
-			real fSW = (D.f[DIR_PP0])[k];//kne
-			real fNE = (D.f[DIR_MM0])[ksw];
-			real fNW = (D.f[DIR_PM0])[ks];//kse
-			real fSE = (D.f[DIR_MP0])[kw];//knw
-			real fBW = (D.f[DIR_P0P])[k];//kte
-			real fTE = (D.f[DIR_M0M])[kbw];
-			real fTW = (D.f[DIR_P0M])[kb];//kbe
-			real fBE = (D.f[DIR_M0P])[kw];//ktw
-			real fBS = (D.f[DIR_0PP])[k];//ktn
-			real fTN = (D.f[DIR_0MM])[kbs];
-			real fTS = (D.f[DIR_0PM])[kb];//kbn
-			real fBN = (D.f[DIR_0MP])[ks];//kts
-			real fZERO = (D.f[DIR_000])[k];//kzero
-			real fBSW = (D.f[DIR_PPP])[k];//ktne
-			real fBNE = (D.f[DIR_MMP])[ksw];//ktsw
-			real fBNW = (D.f[DIR_PMP])[ks];//ktse
-			real fBSE = (D.f[DIR_MPP])[kw];//ktnw
-			real fTSW = (D.f[DIR_PPM])[kb];//kbne
-			real fTNE = (D.f[DIR_MMM])[kbsw];
-			real fTNW = (D.f[DIR_PMM])[kbs];//kbse
-			real fTSE = (D.f[DIR_MPM])[kbw];//kbnw
+			real fW = (D.f[dP00])[k];//ke
+			real fE = (D.f[dM00])[kw];
+			real fS = (D.f[d0P0])[k];//kn
+			real fN = (D.f[d0M0])[ks];
+			real fB = (D.f[d00P])[k];//kt
+			real fT = (D.f[d00M])[kb];
+			real fSW = (D.f[dPP0])[k];//kne
+			real fNE = (D.f[dMM0])[ksw];
+			real fNW = (D.f[dPM0])[ks];//kse
+			real fSE = (D.f[dMP0])[kw];//knw
+			real fBW = (D.f[dP0P])[k];//kte
+			real fTE = (D.f[dM0M])[kbw];
+			real fTW = (D.f[dP0M])[kb];//kbe
+			real fBE = (D.f[dM0P])[kw];//ktw
+			real fBS = (D.f[d0PP])[k];//ktn
+			real fTN = (D.f[d0MM])[kbs];
+			real fTS = (D.f[d0PM])[kb];//kbn
+			real fBN = (D.f[d0MP])[ks];//kts
+			real fZERO = (D.f[d000])[k];//kzero
+			real fBSW = (D.f[dPPP])[k];//ktne
+			real fBNE = (D.f[dMMP])[ksw];//ktsw
+			real fBNW = (D.f[dPMP])[ks];//ktse
+			real fBSE = (D.f[dMPP])[kw];//ktnw
+			real fTSW = (D.f[dPPM])[kb];//kbne
+			real fTNE = (D.f[dMMM])[kbsw];
+			real fTNW = (D.f[dPMM])[kbs];//kbse
+			real fTSE = (D.f[dMPM])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D27.f[DIR_P00])[k];
-			real mfabb = (D27.f[DIR_M00])[kw];
-			real mfbcb = (D27.f[DIR_0P0])[k];
-			real mfbab = (D27.f[DIR_0M0])[ks];
-			real mfbbc = (D27.f[DIR_00P])[k];
-			real mfbba = (D27.f[DIR_00M])[kb];
-			real mfccb = (D27.f[DIR_PP0])[k];
-			real mfaab = (D27.f[DIR_MM0])[ksw];
-			real mfcab = (D27.f[DIR_PM0])[ks];
-			real mfacb = (D27.f[DIR_MP0])[kw];
-			real mfcbc = (D27.f[DIR_P0P])[k];
-			real mfaba = (D27.f[DIR_M0M])[kbw];
-			real mfcba = (D27.f[DIR_P0M])[kb];
-			real mfabc = (D27.f[DIR_M0P])[kw];
-			real mfbcc = (D27.f[DIR_0PP])[k];
-			real mfbaa = (D27.f[DIR_0MM])[kbs];
-			real mfbca = (D27.f[DIR_0PM])[kb];
-			real mfbac = (D27.f[DIR_0MP])[ks];
-			real mfbbb = (D27.f[DIR_000])[k];
-			real mfccc = (D27.f[DIR_PPP])[k];
-			real mfaac = (D27.f[DIR_MMP])[ksw];
-			real mfcac = (D27.f[DIR_PMP])[ks];
-			real mfacc = (D27.f[DIR_MPP])[kw];
-			real mfcca = (D27.f[DIR_PPM])[kb];
-			real mfaaa = (D27.f[DIR_MMM])[kbsw];
-			real mfcaa = (D27.f[DIR_PMM])[kbs];
-			real mfaca = (D27.f[DIR_MPM])[kbw];
+			real mfcbb = (D27.f[dP00])[k];
+			real mfabb = (D27.f[dM00])[kw];
+			real mfbcb = (D27.f[d0P0])[k];
+			real mfbab = (D27.f[d0M0])[ks];
+			real mfbbc = (D27.f[d00P])[k];
+			real mfbba = (D27.f[d00M])[kb];
+			real mfccb = (D27.f[dPP0])[k];
+			real mfaab = (D27.f[dMM0])[ksw];
+			real mfcab = (D27.f[dPM0])[ks];
+			real mfacb = (D27.f[dMP0])[kw];
+			real mfcbc = (D27.f[dP0P])[k];
+			real mfaba = (D27.f[dM0M])[kbw];
+			real mfcba = (D27.f[dP0M])[kb];
+			real mfabc = (D27.f[dM0P])[kw];
+			real mfbcc = (D27.f[d0PP])[k];
+			real mfbaa = (D27.f[d0MM])[kbs];
+			real mfbca = (D27.f[d0PM])[kb];
+			real mfbac = (D27.f[d0MP])[ks];
+			real mfbbb = (D27.f[d000])[k];
+			real mfccc = (D27.f[dPPP])[k];
+			real mfaac = (D27.f[dMMP])[ksw];
+			real mfcac = (D27.f[dPMP])[ks];
+			real mfacc = (D27.f[dMPP])[kw];
+			real mfcca = (D27.f[dPPM])[kb];
+			real mfaaa = (D27.f[dMMM])[kbsw];
+			real mfcaa = (D27.f[dPMM])[kbs];
+			real mfaca = (D27.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			//Conc
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -773,33 +773,33 @@ __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D27.f[DIR_P00])[k] = mfabb;
-			(D27.f[DIR_M00])[kw] = mfcbb;
-			(D27.f[DIR_0P0])[k] = mfbab;
-			(D27.f[DIR_0M0])[ks] = mfbcb;
-			(D27.f[DIR_00P])[k] = mfbba;
-			(D27.f[DIR_00M])[kb] = mfbbc;
-			(D27.f[DIR_PP0])[k] = mfaab;
-			(D27.f[DIR_MM0])[ksw] = mfccb;
-			(D27.f[DIR_PM0])[ks] = mfacb;
-			(D27.f[DIR_MP0])[kw] = mfcab;
-			(D27.f[DIR_P0P])[k] = mfaba;
-			(D27.f[DIR_M0M])[kbw] = mfcbc;
-			(D27.f[DIR_P0M])[kb] = mfabc;
-			(D27.f[DIR_M0P])[kw] = mfcba;
-			(D27.f[DIR_0PP])[k] = mfbaa;
-			(D27.f[DIR_0MM])[kbs] = mfbcc;
-			(D27.f[DIR_0PM])[kb] = mfbac;
-			(D27.f[DIR_0MP])[ks] = mfbca;
-			(D27.f[DIR_000])[k] = mfbbb;
-			(D27.f[DIR_PPP])[k] = mfaaa;
-			(D27.f[DIR_PMP])[ks] = mfaca;
-			(D27.f[DIR_PPM])[kb] = mfaac;
-			(D27.f[DIR_PMM])[kbs] = mfacc;
-			(D27.f[DIR_MPP])[kw] = mfcaa;
-			(D27.f[DIR_MMP])[ksw] = mfcca;
-			(D27.f[DIR_MPM])[kbw] = mfcac;
-			(D27.f[DIR_MMM])[kbsw] = mfccc;
+			(D27.f[dP00])[k] = mfabb;
+			(D27.f[dM00])[kw] = mfcbb;
+			(D27.f[d0P0])[k] = mfbab;
+			(D27.f[d0M0])[ks] = mfbcb;
+			(D27.f[d00P])[k] = mfbba;
+			(D27.f[d00M])[kb] = mfbbc;
+			(D27.f[dPP0])[k] = mfaab;
+			(D27.f[dMM0])[ksw] = mfccb;
+			(D27.f[dPM0])[ks] = mfacb;
+			(D27.f[dMP0])[kw] = mfcab;
+			(D27.f[dP0P])[k] = mfaba;
+			(D27.f[dM0M])[kbw] = mfcbc;
+			(D27.f[dP0M])[kb] = mfabc;
+			(D27.f[dM0P])[kw] = mfcba;
+			(D27.f[d0PP])[k] = mfbaa;
+			(D27.f[d0MM])[kbs] = mfbcc;
+			(D27.f[d0PM])[kb] = mfbac;
+			(D27.f[d0MP])[ks] = mfbca;
+			(D27.f[d000])[k] = mfbbb;
+			(D27.f[dPPP])[k] = mfaaa;
+			(D27.f[dPMP])[ks] = mfaca;
+			(D27.f[dPPM])[kb] = mfaac;
+			(D27.f[dPMM])[kbs] = mfacc;
+			(D27.f[dMPP])[kw] = mfcaa;
+			(D27.f[dMMP])[ksw] = mfcca;
+			(D27.f[dMPM])[kbw] = mfcac;
+			(D27.f[dMMM])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cuh b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion_Device.cuh
similarity index 54%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cuh
rename to src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion_Device.cuh
index a5482a10ca15fc3f27245acbe8b47a06d9f917f0..603d623093a5e7da835c8d03e23c1441f0e673ba 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_AD_COMP_27_H
-#define LB_KERNEL_AD_COMP_27_H
+#ifndef F16CompressibleAdvectionDiffusion_Device_H
+#define F16CompressibleAdvectionDiffusion_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
+__global__ void F16CompressibleAdvectionDiffusion_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.cu b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.cu
new file mode 100644
index 0000000000000000000000000000000000000000..21b4a09320085086849f7b89782c44c582c20867
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.cu
@@ -0,0 +1,40 @@
+#include "B12CompressibleAdvectionDiffusionD3Q7.h"
+
+#include "B12CompressibleAdvectionDiffusionD3Q7_Device.cuh"
+#include "Parameter/Parameter.h"
+#include <cuda_helper/CudaGrid.h>
+
+std::shared_ptr<B12CompressibleAdvectionDiffusionD3Q7> B12CompressibleAdvectionDiffusionD3Q7::getNewInstance(std::shared_ptr<Parameter> para, int level)
+{
+	return std::shared_ptr<B12CompressibleAdvectionDiffusionD3Q7>(new B12CompressibleAdvectionDiffusionD3Q7(para, level));
+}
+
+void B12CompressibleAdvectionDiffusionD3Q7::run()
+{
+    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
+
+    B12CompressibleAdvectionDiffusionD3Q7_Device<<< grid.grid, grid.threads >>>(
+        para->getParD(level)->diffusivity,
+        para->getParD(level)->typeOfGridNode,
+        para->getParD(level)->neighborX,
+        para->getParD(level)->neighborY,
+        para->getParD(level)->neighborZ,
+        para->getParD(level)->distributions.f[0], 
+        para->getParD(level)->distributionsAD7.f[0], 
+        para->getParD(level)->numberOfNodes,
+        para->getParD(level)->isEvenTimestep);
+    getLastCudaError("B12CompressibleAdvectionDiffusionD3Q7_Device execution failed");
+}
+
+B12CompressibleAdvectionDiffusionD3Q7::B12CompressibleAdvectionDiffusionD3Q7(std::shared_ptr<Parameter> para, int level)
+{
+	this->para = para;
+	this->level = level;
+
+	myPreProcessorTypes.push_back(InitCompAD7);
+
+}
+
+B12CompressibleAdvectionDiffusionD3Q7::B12CompressibleAdvectionDiffusionD3Q7()
+{
+}
diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.h b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.h
new file mode 100644
index 0000000000000000000000000000000000000000..a54791dfd03201867120f3f885a201223fe4b151
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.h
@@ -0,0 +1,16 @@
+#ifndef B12CompressibleAdvectionDiffusionD3Q7_H
+#define B12CompressibleAdvectionDiffusionD3Q7_H
+
+#include "Kernel/AdvectionDiffusionKernel.h"
+
+class B12CompressibleAdvectionDiffusionD3Q7 : public AdvectionDiffusionKernel
+{
+public:
+	static std::shared_ptr<B12CompressibleAdvectionDiffusionD3Q7> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	B12CompressibleAdvectionDiffusionD3Q7();
+	B12CompressibleAdvectionDiffusionD3Q7(std::shared_ptr< Parameter> para, int level);
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7_Device.cu b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7_Device.cu
new file mode 100644
index 0000000000000000000000000000000000000000..d13c7d4f036c579d08192155811972061a2e7d96
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7_Device.cu
@@ -0,0 +1,222 @@
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+#include "math.h"
+
+__global__ void B12CompressibleAdvectionDiffusionD3Q7_Device(real diffusivity,
+	unsigned int* bcMatD,
+	unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	real* DDStart,
+	real* DD7,
+	int size_Mat,
+	bool EvenOrOdd)
+{
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if (k<size_Mat)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		unsigned int BC;
+		BC = bcMatD[k];
+
+		if ((BC != GEO_SOLID) && (BC != GEO_VOID))
+		{
+			Distributions27 D;
+			if (EvenOrOdd == true)
+			{
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
+			}
+			else
+			{
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
+			}
+
+			Distributions7 D7;
+			if (EvenOrOdd == true)
+			{
+				D7.f[0] = &DD7[0 * size_Mat];
+				D7.f[1] = &DD7[1 * size_Mat];
+				D7.f[2] = &DD7[2 * size_Mat];
+				D7.f[3] = &DD7[3 * size_Mat];
+				D7.f[4] = &DD7[4 * size_Mat];
+				D7.f[5] = &DD7[5 * size_Mat];
+				D7.f[6] = &DD7[6 * size_Mat];
+			}
+			else
+			{
+				D7.f[0] = &DD7[0 * size_Mat];
+				D7.f[2] = &DD7[1 * size_Mat];
+				D7.f[1] = &DD7[2 * size_Mat];
+				D7.f[4] = &DD7[3 * size_Mat];
+				D7.f[3] = &DD7[4 * size_Mat];
+				D7.f[6] = &DD7[5 * size_Mat];
+				D7.f[5] = &DD7[6 * size_Mat];
+			}
+
+			////////////////////////////////////////////////////////////////////////////////
+			//index
+			unsigned int kw = neighborX[k];
+			unsigned int ks = neighborY[k];
+			unsigned int kb = neighborZ[k];
+			unsigned int ksw = neighborY[kw];
+			unsigned int kbw = neighborZ[kw];
+			unsigned int kbs = neighborZ[ks];
+			unsigned int kbsw = neighborZ[ksw];
+			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			real fW = (D.f[dP00])[k];//ke
+			real fE = (D.f[dM00])[kw];
+			real fS = (D.f[d0P0])[k];//kn
+			real fN = (D.f[d0M0])[ks];
+			real fB = (D.f[d00P])[k];//kt
+			real fT = (D.f[d00M])[kb];
+			real fSW = (D.f[dPP0])[k];//kne
+			real fNE = (D.f[dMM0])[ksw];
+			real fNW = (D.f[dPM0])[ks];//kse
+			real fSE = (D.f[dMP0])[kw];//knw
+			real fBW = (D.f[dP0P])[k];//kte
+			real fTE = (D.f[dM0M])[kbw];
+			real fTW = (D.f[dP0M])[kb];//kbe
+			real fBE = (D.f[dM0P])[kw];//ktw
+			real fBS = (D.f[d0PP])[k];//ktn
+			real fTN = (D.f[d0MM])[kbs];
+			real fTS = (D.f[d0PM])[kb];//kbn
+			real fBN = (D.f[d0MP])[ks];//kts
+			real fZERO = (D.f[d000])[k];//kzero
+			real fBSW = (D.f[dPPP])[k];//ktne
+			real fBNE = (D.f[dMMP])[ksw];//ktsw
+			real fBNW = (D.f[dPMP])[ks];//ktse
+			real fBSE = (D.f[dMPP])[kw];//ktnw
+			real fTSW = (D.f[dPPM])[kb];//kbne
+			real fTNE = (D.f[dMMM])[kbsw];
+			real fTNW = (D.f[dPMM])[kbs];//kbse
+			real fTSE = (D.f[dMPM])[kbw];//kbnw
+										   //real fE    =  (D.f[dP00])[k  ];//ke
+										   //real fW    =  (D.f[dM00])[kw ];
+										   //real fN    =  (D.f[d0P0])[k  ];//kn
+										   //real fS    =  (D.f[d0M0])[ks ];
+										   //real fT    =  (D.f[d00P])[k  ];//kt
+										   //real fB    =  (D.f[d00M])[kb ];
+										   //real fNE   =  (D.f[dPP0])[k  ];//kne
+										   //real fSW   =  (D.f[dMM0])[ksw];
+										   //real fSE   =  (D.f[dPM0])[ks ];//kse
+										   //real fNW   =  (D.f[dMP0])[kw ];//knw
+										   //real fTE   =  (D.f[dP0P])[k  ];//kte
+										   //real fBW   =  (D.f[dM0M])[kbw];
+										   //real fBE   =  (D.f[dP0M])[kb ];//kbe
+										   //real fTW   =  (D.f[dM0P])[kw ];//ktw
+										   //real fTN   =  (D.f[d0PP])[k  ];//ktn
+										   //real fBS   =  (D.f[d0MM])[kbs];
+										   //real fBN   =  (D.f[d0PM])[kb ];//kbn
+										   //real fTS   =  (D.f[d0MP])[ks ];//kts
+										   //real fZERO =  (D.f[d000])[k  ];//kzero
+										   //real fTNE   = (D.f[dPPP])[k  ];//ktne
+										   //real fTSW   = (D.f[dMMP])[ksw];//ktsw
+										   //real fTSE   = (D.f[dPMP])[ks ];//ktse
+										   //real fTNW   = (D.f[dMPP])[kw ];//ktnw
+										   //real fBNE   = (D.f[dPPM])[kb ];//kbne
+										   //real fBSW   = (D.f[dMMM])[kbsw];
+										   //real fBSE   = (D.f[dPMM])[kbs];//kbse
+										   //real fBNW   = (D.f[dMPM])[kbw];//kbnw
+										   ////////////////////////////////////////////////////////////////////////////////
+			real f7ZERO = (D7.f[0])[k];
+			real f7E = (D7.f[1])[k];
+			real f7W = (D7.f[2])[kw];
+			real f7N = (D7.f[3])[k];
+			real f7S = (D7.f[4])[ks];
+			real f7T = (D7.f[5])[k];
+			real f7B = (D7.f[6])[kb];
+			////////////////////////////////////////////////////////////////////////////////
+			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;
+			real OORho = c1o1 / rho;
+			real vx = OORho*((fTNE - fBSW) + (fBNE - fTSW) + (fTSE - fBNW) + (fBSE - fTNW) + (fNE - fSW) + (fSE - fNW) + (fTE - fBW) + (fBE - fTW) + (fE - fW));
+			real vy = OORho*((fTNE - fBSW) + (fBNE - fTSW) + (fBNW - fTSE) + (fTNW - fBSE) + (fNE - fSW) + (fNW - fSE) + (fTN - fBS) + (fBN - fTS) + (fN - fS));
+			real vz = OORho*((fTNE - fBSW) + (fTSW - fBNE) + (fTSE - fBNW) + (fTNW - fBSE) + (fTE - fBW) + (fTW - fBE) + (fTN - fBS) + (fTS - fBN) + (fT - fB));
+			////////////////////////////////////////////////////////////////////////////////
+			real omegaD = -c3o1 + sqrt(c3o1);
+			real Lam = -(c1o2 + c1o1 / omegaD);
+			real nue_d = Lam / c3o1;
+			real ae = diffusivity / nue_d - c1o1;
+			real ux_sq = vx * vx;
+			real uy_sq = vy * vy;
+			real uz_sq = vz * vz;
+
+			real ConcD = f7ZERO + f7E + f7W + f7N + f7S + f7T + f7B;
+
+			(D7.f[0])[k] = f7ZERO*(c1o1 + omegaD) - omegaD*ConcD*(c1o3*(ae*(-c3o1)) - (ux_sq + uy_sq + uz_sq));
+			(D7.f[2])[kw] = f7E   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)+vx*c1o2);
+			(D7.f[1])[k] = f7W   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)-vx*c1o2);
+			(D7.f[4])[ks] = f7N   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)+vy*c1o2);
+			(D7.f[3])[k] = f7S   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)-vy*c1o2);
+			(D7.f[6])[kb] = f7T   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)+vz*c1o2);
+			(D7.f[5])[k] = f7B   *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)-vz*c1o2);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cuh b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7_Device.cuh
similarity index 53%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cuh
rename to src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7_Device.cuh
index bea40443ab619fb08b4c5656105c7792c4f11bd1..1d7dd2f9815981c2912f175ea12533d6888f8883 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_AD_COMP_7_H
-#define LB_KERNEL_AD_COMP_7_H
+#ifndef B12CompressibleAdvectionDiffusionD3Q7_Device_H
+#define B12CompressibleAdvectionDiffusionD3Q7_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_AD_Comp_7(real diffusivity,
+__global__ void B12CompressibleAdvectionDiffusionD3Q7_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.h b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cu
similarity index 82%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cu
index b21213bf58fd786a4006faf485f18e5c18694e2e..11ae68e4d5e14d89599573765295b65463fad712 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cu
@@ -38,63 +38,63 @@ __global__ void B15CompressibleNavierStokesBGKplus_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -127,33 +127,33 @@ __global__ void B15CompressibleNavierStokesBGKplus_Device(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -793,33 +793,33 @@ __global__ void B15CompressibleNavierStokesBGKplus_Device(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cu
similarity index 62%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cu
index d032936a96f77304071d014590e35512c1ca7771..415634bb4749fb4307419ce58ca96c0c0d0d3862 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cu
@@ -38,63 +38,63 @@ __global__ void B92CompressibleNavierStokes_Device(	real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -127,33 +127,33 @@ __global__ void B92CompressibleNavierStokes_Device(	real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fE = (D.f[DIR_P00])[k];//ke
-			real fW = (D.f[DIR_M00])[kw];
-			real fN = (D.f[DIR_0P0])[k];//kn
-			real fS = (D.f[DIR_0M0])[ks];
-			real fT = (D.f[DIR_00P])[k];//kt
-			real fB = (D.f[DIR_00M])[kb];
-			real fNE = (D.f[DIR_PP0])[k];//kne
-			real fSW = (D.f[DIR_MM0])[ksw];
-			real fSE = (D.f[DIR_PM0])[ks];//kse
-			real fNW = (D.f[DIR_MP0])[kw];//knw
-			real fTE = (D.f[DIR_P0P])[k];//kte
-			real fBW = (D.f[DIR_M0M])[kbw];
-			real fBE = (D.f[DIR_P0M])[kb];//kbe
-			real fTW = (D.f[DIR_M0P])[kw];//ktw
-			real fTN = (D.f[DIR_0PP])[k];//ktn
-			real fBS = (D.f[DIR_0MM])[kbs];
-			real fBN = (D.f[DIR_0PM])[kb];//kbn
-			real fTS = (D.f[DIR_0MP])[ks];//kts
-			real fZERO = (D.f[DIR_000])[k];//kzero
-			real fTNE = (D.f[DIR_PPP])[k];//ktne
-			real fTSW = (D.f[DIR_MMP])[ksw];//ktsw
-			real fTSE = (D.f[DIR_PMP])[ks];//ktse
-			real fTNW = (D.f[DIR_MPP])[kw];//ktnw
-			real fBNE = (D.f[DIR_PPM])[kb];//kbne
-			real fBSW = (D.f[DIR_MMM])[kbsw];
-			real fBSE = (D.f[DIR_PMM])[kbs];//kbse
-			real fBNW = (D.f[DIR_MPM])[kbw];//kbnw
+			real fE = (D.f[dP00])[k];//ke
+			real fW = (D.f[dM00])[kw];
+			real fN = (D.f[d0P0])[k];//kn
+			real fS = (D.f[d0M0])[ks];
+			real fT = (D.f[d00P])[k];//kt
+			real fB = (D.f[d00M])[kb];
+			real fNE = (D.f[dPP0])[k];//kne
+			real fSW = (D.f[dMM0])[ksw];
+			real fSE = (D.f[dPM0])[ks];//kse
+			real fNW = (D.f[dMP0])[kw];//knw
+			real fTE = (D.f[dP0P])[k];//kte
+			real fBW = (D.f[dM0M])[kbw];
+			real fBE = (D.f[dP0M])[kb];//kbe
+			real fTW = (D.f[dM0P])[kw];//ktw
+			real fTN = (D.f[d0PP])[k];//ktn
+			real fBS = (D.f[d0MM])[kbs];
+			real fBN = (D.f[d0PM])[kb];//kbn
+			real fTS = (D.f[d0MP])[ks];//kts
+			real fZERO = (D.f[d000])[k];//kzero
+			real fTNE = (D.f[dPPP])[k];//ktne
+			real fTSW = (D.f[dMMP])[ksw];//ktsw
+			real fTSE = (D.f[dPMP])[ks];//ktse
+			real fTNW = (D.f[dMPP])[kw];//ktnw
+			real fBNE = (D.f[dPPM])[kb];//kbne
+			real fBSW = (D.f[dMMM])[kbsw];
+			real fBSE = (D.f[dPMM])[kbs];//kbse
+			real fBNW = (D.f[dMPM])[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;
@@ -210,33 +210,33 @@ __global__ void B92CompressibleNavierStokes_Device(	real omega,
 
 
 			//////////////////////////////////////////////////////////////////////////                            
-			(D.f[DIR_P00])[k] = fW;
-			(D.f[DIR_M00])[kw] = fE;
-			(D.f[DIR_0P0])[k] = fS;
-			(D.f[DIR_0M0])[ks] = fN;
-			(D.f[DIR_00P])[k] = fB;
-			(D.f[DIR_00M])[kb] = fT;
-			(D.f[DIR_PP0])[k] = fSW;
-			(D.f[DIR_MM0])[ksw] = fNE;
-			(D.f[DIR_PM0])[ks] = fNW;
-			(D.f[DIR_MP0])[kw] = fSE;
-			(D.f[DIR_P0P])[k] = fBW;
-			(D.f[DIR_M0M])[kbw] = fTE;
-			(D.f[DIR_P0M])[kb] = fTW;
-			(D.f[DIR_M0P])[kw] = fBE;
-			(D.f[DIR_0PP])[k] = fBS;
-			(D.f[DIR_0MM])[kbs] = fTN;
-			(D.f[DIR_0PM])[kb] = fTS;
-			(D.f[DIR_0MP])[ks] = fBN;
-			(D.f[DIR_000])[k] = fZERO;
-			(D.f[DIR_PPP])[k] = fBSW;
-			(D.f[DIR_PMP])[ks] = fBNW;
-			(D.f[DIR_PPM])[kb] = fTSW;
-			(D.f[DIR_PMM])[kbs] = fTNW;
-			(D.f[DIR_MPP])[kw] = fBSE;
-			(D.f[DIR_MMP])[ksw] = fBNE;
-			(D.f[DIR_MPM])[kbw] = fTSE;
-			(D.f[DIR_MMM])[kbsw] = fTNE;
+			(D.f[dP00])[k] = fW;
+			(D.f[dM00])[kw] = fE;
+			(D.f[d0P0])[k] = fS;
+			(D.f[d0M0])[ks] = fN;
+			(D.f[d00P])[k] = fB;
+			(D.f[d00M])[kb] = fT;
+			(D.f[dPP0])[k] = fSW;
+			(D.f[dMM0])[ksw] = fNE;
+			(D.f[dPM0])[ks] = fNW;
+			(D.f[dMP0])[kw] = fSE;
+			(D.f[dP0P])[k] = fBW;
+			(D.f[dM0M])[kbw] = fTE;
+			(D.f[dP0M])[kb] = fTW;
+			(D.f[dM0P])[kw] = fBE;
+			(D.f[d0PP])[k] = fBS;
+			(D.f[d0MM])[kbs] = fTN;
+			(D.f[d0PM])[kb] = fTS;
+			(D.f[d0MP])[ks] = fBN;
+			(D.f[d000])[k] = fZERO;
+			(D.f[dPPP])[k] = fBSW;
+			(D.f[dPMP])[ks] = fBNW;
+			(D.f[dPPM])[kb] = fTSW;
+			(D.f[dPMM])[kbs] = fTNW;
+			(D.f[dMPP])[kw] = fBSE;
+			(D.f[dMMP])[ksw] = fBNE;
+			(D.f[dMPM])[kbw] = fTSE;
+			(D.f[dMMM])[kbsw] = fTNE;
 			//////////////////////////////////////////////////////////////////////////                            
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes_Device.cu
similarity index 85%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes_Device.cu
index 6cf0fd639523d4cef8290f860f03b4bc75e3252c..444a575d7add0f5d33acc779f627195e7180e81a 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes_Device.cu
@@ -37,63 +37,63 @@ __global__ void C06CompressibleNavierStokes_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +126,33 @@ __global__ void C06CompressibleNavierStokes_Device(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];//[ke   ];
-			real mfabb = (D.f[DIR_M00])[kw ];//[kw   ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];//[kn   ];
-			real mfbab = (D.f[DIR_0M0])[ks ];//[ks   ];
-			real mfbbc = (D.f[DIR_00P])[k  ];//[kt   ];
-			real mfbba = (D.f[DIR_00M])[kb ];//[kb   ];
-			real mfccb = (D.f[DIR_PP0])[k  ];//[kne  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];
-			real mfcab = (D.f[DIR_PM0])[ks ];//[kse  ];
-			real mfacb = (D.f[DIR_MP0])[kw ];//[knw  ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];//[kte  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];
-			real mfcba = (D.f[DIR_P0M])[kb ];//[kbe  ];
-			real mfabc = (D.f[DIR_M0P])[kw ];//[ktw  ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];//[ktn  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];
-			real mfbca = (D.f[DIR_0PM])[kb ];//[kbn  ];
-			real mfbac = (D.f[DIR_0MP])[ks ];//[kts  ];
-			real mfbbb = (D.f[DIR_000])[k  ];//[kzero];
-			real mfccc = (D.f[DIR_PPP])[k  ];//[ktne ];
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];
-			real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];
-			real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ]
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];
+			real mfcbb = (D.f[dP00])[k  ];//[ke   ];
+			real mfabb = (D.f[dM00])[kw ];//[kw   ];
+			real mfbcb = (D.f[d0P0])[k  ];//[kn   ];
+			real mfbab = (D.f[d0M0])[ks ];//[ks   ];
+			real mfbbc = (D.f[d00P])[k  ];//[kt   ];
+			real mfbba = (D.f[d00M])[kb ];//[kb   ];
+			real mfccb = (D.f[dPP0])[k  ];//[kne  ];
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];
+			real mfcab = (D.f[dPM0])[ks ];//[kse  ];
+			real mfacb = (D.f[dMP0])[kw ];//[knw  ];
+			real mfcbc = (D.f[dP0P])[k  ];//[kte  ];
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];
+			real mfcba = (D.f[dP0M])[kb ];//[kbe  ];
+			real mfabc = (D.f[dM0P])[kw ];//[ktw  ];
+			real mfbcc = (D.f[d0PP])[k  ];//[ktn  ];
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];
+			real mfbca = (D.f[d0PM])[kb ];//[kbn  ];
+			real mfbac = (D.f[d0MP])[ks ];//[kts  ];
+			real mfbbb = (D.f[d000])[k  ];//[kzero];
+			real mfccc = (D.f[dPPP])[k  ];//[ktne ];
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];
+			real mfcac = (D.f[dPMP])[ks ];//[ktse ];
+			real mfacc = (D.f[dMPP])[kw ];//[ktnw ];
+			real mfcca = (D.f[dPPM])[kb ];//[kbne ];
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ]
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];
 			////////////////////////////////////////////////////////////////////////////////////
 			real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
 						   mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
@@ -733,33 +733,33 @@ __global__ void C06CompressibleNavierStokes_Device(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;                                                                     
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;                                                                   
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;
-			(D.f[ DIR_00P   ])[k   ] = mfbba;
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;
-			(D.f[ DIR_000])[k   ] = mfbbb;
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;
+			(D.f[ dP00   ])[k   ] = mfabb;                                                                     
+			(D.f[ dM00   ])[kw  ] = mfcbb;                                                                   
+			(D.f[ d0P0   ])[k   ] = mfbab;
+			(D.f[ d0M0   ])[ks  ] = mfbcb;
+			(D.f[ d00P   ])[k   ] = mfbba;
+			(D.f[ d00M   ])[kb  ] = mfbbc;
+			(D.f[ dPP0  ])[k   ] = mfaab;
+			(D.f[ dMM0  ])[ksw ] = mfccb;
+			(D.f[ dPM0  ])[ks  ] = mfacb;
+			(D.f[ dMP0  ])[kw  ] = mfcab;
+			(D.f[ dP0P  ])[k   ] = mfaba;
+			(D.f[ dM0M  ])[kbw ] = mfcbc;
+			(D.f[ dP0M  ])[kb  ] = mfabc;
+			(D.f[ dM0P  ])[kw  ] = mfcba;
+			(D.f[ d0PP  ])[k   ] = mfbaa;
+			(D.f[ d0MM  ])[kbs ] = mfbcc;
+			(D.f[ d0PM  ])[kb  ] = mfbac;
+			(D.f[ d0MP  ])[ks  ] = mfbca;
+			(D.f[ d000])[k   ] = mfbbb;
+			(D.f[ dPPP ])[k   ] = mfaaa;
+			(D.f[ dPMP ])[ks  ] = mfaca;
+			(D.f[ dPPM ])[kb  ] = mfaac;
+			(D.f[ dPMM ])[kbs ] = mfacc;
+			(D.f[ dMPP ])[kw  ] = mfcaa;
+			(D.f[ dMMP ])[ksw ] = mfcca;
+			(D.f[ dMPM ])[kbw ] = mfcac;
+			(D.f[ dMMM ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes_Device.cu
similarity index 86%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes_Device.cu
index 021ec25f3d70802402bb2d96ca6a462e60774982..4c1b2979d9c38ab9a229d826ede1e0e33acc2337 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes_Device.cu
@@ -37,63 +37,63 @@ __global__ void K08CompressibleNavierStokes_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +126,33 @@ __global__ void K08CompressibleNavierStokes_Device(real omega,
 			unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real f_E = (D.f[DIR_P00])[ke];// +  c2over27 ;
-			real f_W = (D.f[DIR_M00])[kw];// +  c2over27 ;
-			real f_N = (D.f[DIR_0P0])[kn];// +  c2over27 ;
-			real f_S = (D.f[DIR_0M0])[ks];// +  c2over27 ;
-			real f_T = (D.f[DIR_00P])[kt];// +  c2over27 ;
-			real f_B = (D.f[DIR_00M])[kb];// +  c2over27 ;
-			real f_NE = (D.f[DIR_PP0])[kne];// +  c1over54 ;
-			real f_SS = (D.f[DIR_MM0])[ksw];// +  c1over54 ;
-			real f_SE = (D.f[DIR_PM0])[kse];// +  c1over54 ;
-			real f_NW = (D.f[DIR_MP0])[knw];// +  c1over54 ;
-			real f_TE = (D.f[DIR_P0P])[kte];// +  c1over54 ;
-			real f_BW = (D.f[DIR_M0M])[kbw];// +  c1over54 ;
-			real f_EB = (D.f[DIR_P0M])[kbe];// +  c1over54 ;
-			real f_TW = (D.f[DIR_M0P])[ktw];// +  c1over54 ;
-			real f_TN = (D.f[DIR_0PP])[ktn];// +  c1over54 ;
-			real f_BS = (D.f[DIR_0MM])[kbs];// +  c1over54 ;
-			real f_BN = (D.f[DIR_0PM])[kbn];// +  c1over54 ;
-			real f_TS = (D.f[DIR_0MP])[kts];// +  c1over54 ;
-			real f_R = (D.f[DIR_000])[kzero];// +  c8over27 ;
-			real f_TNE = (D.f[DIR_PPP])[ktne];// +  c1over216;
-			real f_TSW = (D.f[DIR_MMP])[ktsw];// +  c1over216;
-			real f_TSE = (D.f[DIR_PMP])[ktse];// +  c1over216;
-			real f_TNW = (D.f[DIR_MPP])[ktnw];// +  c1over216;
-			real f_BNE = (D.f[DIR_PPM])[kbne];// +  c1over216;
-			real f_BSW = (D.f[DIR_MMM])[kbsw];// +  c1over216;
-			real f_BSE = (D.f[DIR_PMM])[kbse];// +  c1over216;
-			real f_BNW = (D.f[DIR_MPM])[kbnw];// +  c1over216;
+			real f_E = (D.f[dP00])[ke];// +  c2over27 ;
+			real f_W = (D.f[dM00])[kw];// +  c2over27 ;
+			real f_N = (D.f[d0P0])[kn];// +  c2over27 ;
+			real f_S = (D.f[d0M0])[ks];// +  c2over27 ;
+			real f_T = (D.f[d00P])[kt];// +  c2over27 ;
+			real f_B = (D.f[d00M])[kb];// +  c2over27 ;
+			real f_NE = (D.f[dPP0])[kne];// +  c1over54 ;
+			real f_SS = (D.f[dMM0])[ksw];// +  c1over54 ;
+			real f_SE = (D.f[dPM0])[kse];// +  c1over54 ;
+			real f_NW = (D.f[dMP0])[knw];// +  c1over54 ;
+			real f_TE = (D.f[dP0P])[kte];// +  c1over54 ;
+			real f_BW = (D.f[dM0M])[kbw];// +  c1over54 ;
+			real f_EB = (D.f[dP0M])[kbe];// +  c1over54 ;
+			real f_TW = (D.f[dM0P])[ktw];// +  c1over54 ;
+			real f_TN = (D.f[d0PP])[ktn];// +  c1over54 ;
+			real f_BS = (D.f[d0MM])[kbs];// +  c1over54 ;
+			real f_BN = (D.f[d0PM])[kbn];// +  c1over54 ;
+			real f_TS = (D.f[d0MP])[kts];// +  c1over54 ;
+			real f_R = (D.f[d000])[kzero];// +  c8over27 ;
+			real f_TNE = (D.f[dPPP])[ktne];// +  c1over216;
+			real f_TSW = (D.f[dMMP])[ktsw];// +  c1over216;
+			real f_TSE = (D.f[dPMP])[ktse];// +  c1over216;
+			real f_TNW = (D.f[dMPP])[ktnw];// +  c1over216;
+			real f_BNE = (D.f[dPPM])[kbne];// +  c1over216;
+			real f_BSW = (D.f[dMMM])[kbsw];// +  c1over216;
+			real f_BSE = (D.f[dPMM])[kbse];// +  c1over216;
+			real f_BNW = (D.f[dMPM])[kbnw];// +  c1over216;
 										   ////////////////////////////////////////////////////////////////////////////////////
 			real fx = c0o1;
 			real fy = c0o1;
@@ -874,33 +874,33 @@ __global__ void K08CompressibleNavierStokes_Device(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[ke] = mfabb;// -  c2over27 ;//                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;// -  c2over27 ;                                                                     
-			(D.f[DIR_0P0])[kn] = mfbab;// -  c2over27 ;
-			(D.f[DIR_0M0])[ks] = mfbcb;// -  c2over27 ;
-			(D.f[DIR_00P])[kt] = mfbba;// -  c2over27 ;
-			(D.f[DIR_00M])[kb] = mfbbc;// -  c2over27 ;
-			(D.f[DIR_PP0])[kne] = mfaab;// -  c1over54 ;
-			(D.f[DIR_MM0])[ksw] = mfccb;// -  c1over54 ;
-			(D.f[DIR_PM0])[kse] = mfacb;// -  c1over54 ;
-			(D.f[DIR_MP0])[knw] = mfcab;// -  c1over54 ;
-			(D.f[DIR_P0P])[kte] = mfaba;// -  c1over54 ;
-			(D.f[DIR_M0M])[kbw] = mfcbc;// -  c1over54 ;
-			(D.f[DIR_P0M])[kbe] = mfabc;// -  c1over54 ;
-			(D.f[DIR_M0P])[ktw] = mfcba;// -  c1over54 ;
-			(D.f[DIR_0PP])[ktn] = mfbaa;// -  c1over54 ;
-			(D.f[DIR_0MM])[kbs] = mfbcc;// -  c1over54 ;
-			(D.f[DIR_0PM])[kbn] = mfbac;// -  c1over54 ;
-			(D.f[DIR_0MP])[kts] = mfbca;// -  c1over54 ;
-			(D.f[DIR_000])[kzero] = mfbbb;// -  c8over27 ;
-			(D.f[DIR_PPP])[ktne] = mfaaa;// -  c1over216;
-			(D.f[DIR_PMP])[ktse] = mfaca;// -  c1over216;
-			(D.f[DIR_PPM])[kbne] = mfaac;// -  c1over216;
-			(D.f[DIR_PMM])[kbse] = mfacc;// -  c1over216;
-			(D.f[DIR_MPP])[ktnw] = mfcaa;// -  c1over216;
-			(D.f[DIR_MMP])[ktsw] = mfcca;// -  c1over216;
-			(D.f[DIR_MPM])[kbnw] = mfcac;// -  c1over216;
-			(D.f[DIR_MMM])[kbsw] = mfccc;// -  c1over216;
+			(D.f[dP00])[ke] = mfabb;// -  c2over27 ;//                                                                     
+			(D.f[dM00])[kw] = mfcbb;// -  c2over27 ;                                                                     
+			(D.f[d0P0])[kn] = mfbab;// -  c2over27 ;
+			(D.f[d0M0])[ks] = mfbcb;// -  c2over27 ;
+			(D.f[d00P])[kt] = mfbba;// -  c2over27 ;
+			(D.f[d00M])[kb] = mfbbc;// -  c2over27 ;
+			(D.f[dPP0])[kne] = mfaab;// -  c1over54 ;
+			(D.f[dMM0])[ksw] = mfccb;// -  c1over54 ;
+			(D.f[dPM0])[kse] = mfacb;// -  c1over54 ;
+			(D.f[dMP0])[knw] = mfcab;// -  c1over54 ;
+			(D.f[dP0P])[kte] = mfaba;// -  c1over54 ;
+			(D.f[dM0M])[kbw] = mfcbc;// -  c1over54 ;
+			(D.f[dP0M])[kbe] = mfabc;// -  c1over54 ;
+			(D.f[dM0P])[ktw] = mfcba;// -  c1over54 ;
+			(D.f[d0PP])[ktn] = mfbaa;// -  c1over54 ;
+			(D.f[d0MM])[kbs] = mfbcc;// -  c1over54 ;
+			(D.f[d0PM])[kbn] = mfbac;// -  c1over54 ;
+			(D.f[d0MP])[kts] = mfbca;// -  c1over54 ;
+			(D.f[d000])[kzero] = mfbbb;// -  c8over27 ;
+			(D.f[dPPP])[ktne] = mfaaa;// -  c1over216;
+			(D.f[dPMP])[ktse] = mfaca;// -  c1over216;
+			(D.f[dPPM])[kbne] = mfaac;// -  c1over216;
+			(D.f[dPMM])[kbse] = mfacc;// -  c1over216;
+			(D.f[dMPP])[ktnw] = mfcaa;// -  c1over216;
+			(D.f[dMMP])[ktsw] = mfcca;// -  c1over216;
+			(D.f[dMPM])[kbnw] = mfcac;// -  c1over216;
+			(D.f[dMMM])[kbsw] = mfccc;// -  c1over216;
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu
similarity index 82%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu
index 91716f420dbff6aeb6d6505e1ff6fbc76dfbf92c..8f693f37696a3d9808a08fdfe771b53ffef7db89 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu
@@ -39,63 +39,63 @@ __global__ void K15CompressibleNavierStokesBulkViscosity_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -156,33 +156,33 @@ __global__ void K15CompressibleNavierStokesBulkViscosity_Device(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -912,33 +912,33 @@ __global__ void K15CompressibleNavierStokesBulkViscosity_Device(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge_Device.cu
similarity index 89%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge_Device.cu
index 6b3a06614a1bec560e8d361c3610f9a00a0cdaf3..db530f8bb26fbf118cc1025e97294db4ef2a2a9e 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge_Device.cu
@@ -40,63 +40,63 @@ __global__ void K15CompressibleNavierStokesSponge_Device(real omegaIn,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -129,33 +129,33 @@ __global__ void K15CompressibleNavierStokesSponge_Device(real omegaIn,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];
-			real mfabb = (D.f[DIR_M00])[kw];
-			real mfbcb = (D.f[DIR_0P0])[k];
-			real mfbab = (D.f[DIR_0M0])[ks];
-			real mfbbc = (D.f[DIR_00P])[k];
-			real mfbba = (D.f[DIR_00M])[kb];
-			real mfccb = (D.f[DIR_PP0])[k];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];
-			real mfacb = (D.f[DIR_MP0])[kw];
-			real mfcbc = (D.f[DIR_P0P])[k];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];
-			real mfabc = (D.f[DIR_M0P])[kw];
-			real mfbcc = (D.f[DIR_0PP])[k];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];
-			real mfbac = (D.f[DIR_0MP])[ks];
-			real mfbbb = (D.f[DIR_000])[k];
-			real mfccc = (D.f[DIR_PPP])[k];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks];
-			real mfacc = (D.f[DIR_MPP])[kw];
-			real mfcca = (D.f[DIR_PPM])[kb];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k];
+			real mfabb = (D.f[dM00])[kw];
+			real mfbcb = (D.f[d0P0])[k];
+			real mfbab = (D.f[d0M0])[ks];
+			real mfbbc = (D.f[d00P])[k];
+			real mfbba = (D.f[d00M])[kb];
+			real mfccb = (D.f[dPP0])[k];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];
+			real mfacb = (D.f[dMP0])[kw];
+			real mfcbc = (D.f[dP0P])[k];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];
+			real mfabc = (D.f[dM0P])[kw];
+			real mfbcc = (D.f[d0PP])[k];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];
+			real mfbac = (D.f[d0MP])[ks];
+			real mfbbb = (D.f[d000])[k];
+			real mfccc = (D.f[dPPP])[k];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks];
+			real mfacc = (D.f[dMPP])[kw];
+			real mfcca = (D.f[dPPM])[kb];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -893,33 +893,33 @@ __global__ void K15CompressibleNavierStokesSponge_Device(real omegaIn,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;
-			(D.f[DIR_M00])[kw] = mfcbb;
-			(D.f[DIR_0P0])[k] = mfbab;
-			(D.f[DIR_0M0])[ks] = mfbcb;
-			(D.f[DIR_00P])[k] = mfbba;
-			(D.f[DIR_00M])[kb] = mfbbc;
-			(D.f[DIR_PP0])[k] = mfaab;
-			(D.f[DIR_MM0])[ksw] = mfccb;
-			(D.f[DIR_PM0])[ks] = mfacb;
-			(D.f[DIR_MP0])[kw] = mfcab;
-			(D.f[DIR_P0P])[k] = mfaba;
-			(D.f[DIR_M0M])[kbw] = mfcbc;
-			(D.f[DIR_P0M])[kb] = mfabc;
-			(D.f[DIR_M0P])[kw] = mfcba;
-			(D.f[DIR_0PP])[k] = mfbaa;
-			(D.f[DIR_0MM])[kbs] = mfbcc;
-			(D.f[DIR_0PM])[kb] = mfbac;
-			(D.f[DIR_0MP])[ks] = mfbca;
-			(D.f[DIR_000])[k] = mfbbb;
-			(D.f[DIR_PPP])[k] = mfaaa;
-			(D.f[DIR_PMP])[ks] = mfaca;
-			(D.f[DIR_PPM])[kb] = mfaac;
-			(D.f[DIR_PMM])[kbs] = mfacc;
-			(D.f[DIR_MPP])[kw] = mfcaa;
-			(D.f[DIR_MMP])[ksw] = mfcca;
-			(D.f[DIR_MPM])[kbw] = mfcac;
-			(D.f[DIR_MMM])[kbsw] = mfccc;
+			(D.f[dP00])[k] = mfabb;
+			(D.f[dM00])[kw] = mfcbb;
+			(D.f[d0P0])[k] = mfbab;
+			(D.f[d0M0])[ks] = mfbcb;
+			(D.f[d00P])[k] = mfbba;
+			(D.f[d00M])[kb] = mfbbc;
+			(D.f[dPP0])[k] = mfaab;
+			(D.f[dMM0])[ksw] = mfccb;
+			(D.f[dPM0])[ks] = mfacb;
+			(D.f[dMP0])[kw] = mfcab;
+			(D.f[dP0P])[k] = mfaba;
+			(D.f[dM0M])[kbw] = mfcbc;
+			(D.f[dP0M])[kb] = mfabc;
+			(D.f[dM0P])[kw] = mfcba;
+			(D.f[d0PP])[k] = mfbaa;
+			(D.f[d0MM])[kbs] = mfbcc;
+			(D.f[d0PM])[kb] = mfbac;
+			(D.f[d0MP])[ks] = mfbca;
+			(D.f[d000])[k] = mfbbb;
+			(D.f[dPPP])[k] = mfaaa;
+			(D.f[dPMP])[ks] = mfaca;
+			(D.f[dPPM])[kb] = mfaac;
+			(D.f[dPMM])[kbs] = mfacc;
+			(D.f[dMPP])[kw] = mfcaa;
+			(D.f[dMMP])[ksw] = mfcca;
+			(D.f[dMPM])[kbw] = mfcac;
+			(D.f[dMMM])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cu
similarity index 86%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cu
index e38c24d6557c0abc64681a71fc63c51b866fb25a..c3be0a4e23b009e0c8d5b523b0a34da0c8551294 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cu
@@ -39,63 +39,63 @@ __global__ void K15CompressibleNavierStokes_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -156,33 +156,33 @@ __global__ void K15CompressibleNavierStokes_Device(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1242,33 +1242,33 @@ __global__ void K15CompressibleNavierStokes_Device(real omega,
 					((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
 			mfbbb += drho - drhoPost;
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.cu
similarity index 53%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.cu
index a8c1af64ebd4641a755bf9fed7e9fafa18e9cad7..70ae05f6f093fb933f03dc59190051a397c8975b 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.cu
@@ -1,15 +1,15 @@
-#include "PMCumulantOneCompSP27.h"
+#include "K15CompressibleNavierStokesPorousMedia.h"
 
-#include "PMCumulantOneCompSP27_Device.cuh"
+#include "K15CompressibleNavierStokesPorousMedia_Device.cuh"
 #include "Parameter/Parameter.h"
 #include "Calculation/PorousMedia.h"
 
-std::shared_ptr<PMCumulantOneCompSP27> PMCumulantOneCompSP27::getNewInstance(std::shared_ptr<Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level)
+std::shared_ptr<K15CompressibleNavierStokesPorousMedia> K15CompressibleNavierStokesPorousMedia::getNewInstance(std::shared_ptr<Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level)
 {
-	return std::shared_ptr<PMCumulantOneCompSP27>(new PMCumulantOneCompSP27(para, pm, level));
+	return std::shared_ptr<K15CompressibleNavierStokesPorousMedia>(new K15CompressibleNavierStokesPorousMedia(para, pm, level));
 }
 
-void PMCumulantOneCompSP27::run()
+void K15CompressibleNavierStokesPorousMedia::run()
 {
 	int size_Mat = (int)para->getParD(level)->numberOfNodes;
 	int numberOfThreads = para->getParD(level)->numberofthreads;
@@ -30,7 +30,7 @@ void PMCumulantOneCompSP27::run()
 	dim3 threads(numberOfThreads, 1, 1);
 
 	for (int i = 0; i < pm.size(); i++) {
-		LB_Kernel_PM_Cum_One_Comp_SP_27 <<< grid, threads >>>(
+		K15CompressibleNavierStokesPorousMedia_Device <<< grid, threads >>>(
 			para->getParD(level)->omega,
 			para->getParD(level)->neighborX,
 			para->getParD(level)->neighborY,
@@ -45,11 +45,11 @@ void PMCumulantOneCompSP27::run()
 			pm[i]->getSizePM(),
 			pm[i]->getHostNodeIDsPM(),
 			para->getParD(level)->isEvenTimestep);
-		getLastCudaError("LB_Kernel_PM_Cum_One_Comp_SP_27 execution failed");
+		getLastCudaError("K15CompressibleNavierStokesPorousMedia_Device execution failed");
 	}
 }
 
-PMCumulantOneCompSP27::PMCumulantOneCompSP27(std::shared_ptr<Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level)
+K15CompressibleNavierStokesPorousMedia::K15CompressibleNavierStokesPorousMedia(std::shared_ptr<Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level)
 {
 	this->para = para;
 	this->pm = pm;
@@ -60,6 +60,6 @@ PMCumulantOneCompSP27::PMCumulantOneCompSP27(std::shared_ptr<Parameter> para, st
 	
 }
 
-PMCumulantOneCompSP27::PMCumulantOneCompSP27()
+K15CompressibleNavierStokesPorousMedia::K15CompressibleNavierStokesPorousMedia()
 {
 }
diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.h
new file mode 100644
index 0000000000000000000000000000000000000000..4bda2ecdde646b14ba82d6e1e0c2df630986226f
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.h
@@ -0,0 +1,21 @@
+#ifndef K15CompressibleNavierStokesPorousMedia_H
+#define K15CompressibleNavierStokesPorousMedia_H
+
+#include "Kernel/KernelImp.h"
+
+class PorousMedia;
+
+class K15CompressibleNavierStokesPorousMedia : public KernelImp
+{
+public:
+	static std::shared_ptr<K15CompressibleNavierStokesPorousMedia> getNewInstance(std::shared_ptr< Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level);
+	void run();
+
+private:
+	K15CompressibleNavierStokesPorousMedia();
+	K15CompressibleNavierStokesPorousMedia(std::shared_ptr< Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level);
+
+	std::vector<std::shared_ptr<PorousMedia>> pm;
+};
+
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia_Device.cu
similarity index 88%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia_Device.cu
index 1ed7cf3af37251550d38affe512f841a3779b918..479415d9c150cf508ed7f4747290692a89755766 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
+__global__ void K15CompressibleNavierStokesPorousMedia_Device(real omega,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
 	unsigned int* neighborZ,
@@ -24,63 +24,63 @@ __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
 	Distributions27 D;
 	if (EvenOrOdd == true)
 	{
-		D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-		D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-		D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+		D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+		D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+		D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+		D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+		D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+		D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+		D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+		D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+		D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+		D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+		D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+		D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+		D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+		D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+		D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+		D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+		D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+		D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+		D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+		D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+		D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+		D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+		D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+		D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+		D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+		D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+		D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 	}
 	else
 	{
-		D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-		D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-		D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-		D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-		D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-		D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-		D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-		D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-		D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-		D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-		D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-		D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-		D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-		D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-		D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-		D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-		D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-		D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-		D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-		D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-		D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-		D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-		D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-		D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-		D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-		D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-		D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+		D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+		D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+		D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+		D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+		D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+		D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+		D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+		D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+		D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+		D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+		D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+		D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+		D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+		D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+		D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+		D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+		D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+		D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+		D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+		D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+		D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+		D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+		D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+		D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+		D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+		D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+		D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
@@ -107,33 +107,33 @@ __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[DIR_P00])[k];
-		real mfabb = (D.f[DIR_M00])[kw];
-		real mfbcb = (D.f[DIR_0P0])[k];
-		real mfbab = (D.f[DIR_0M0])[ks];
-		real mfbbc = (D.f[DIR_00P])[k];
-		real mfbba = (D.f[DIR_00M])[kb];
-		real mfccb = (D.f[DIR_PP0])[k];
-		real mfaab = (D.f[DIR_MM0])[ksw];
-		real mfcab = (D.f[DIR_PM0])[ks];
-		real mfacb = (D.f[DIR_MP0])[kw];
-		real mfcbc = (D.f[DIR_P0P])[k];
-		real mfaba = (D.f[DIR_M0M])[kbw];
-		real mfcba = (D.f[DIR_P0M])[kb];
-		real mfabc = (D.f[DIR_M0P])[kw];
-		real mfbcc = (D.f[DIR_0PP])[k];
-		real mfbaa = (D.f[DIR_0MM])[kbs];
-		real mfbca = (D.f[DIR_0PM])[kb];
-		real mfbac = (D.f[DIR_0MP])[ks];
-		real mfbbb = (D.f[DIR_000])[k];
-		real mfccc = (D.f[DIR_PPP])[k];
-		real mfaac = (D.f[DIR_MMP])[ksw];
-		real mfcac = (D.f[DIR_PMP])[ks];
-		real mfacc = (D.f[DIR_MPP])[kw];
-		real mfcca = (D.f[DIR_PPM])[kb];
-		real mfaaa = (D.f[DIR_MMM])[kbsw];
-		real mfcaa = (D.f[DIR_PMM])[kbs];
-		real mfaca = (D.f[DIR_MPM])[kbw];
+		real mfcbb = (D.f[dP00])[k];
+		real mfabb = (D.f[dM00])[kw];
+		real mfbcb = (D.f[d0P0])[k];
+		real mfbab = (D.f[d0M0])[ks];
+		real mfbbc = (D.f[d00P])[k];
+		real mfbba = (D.f[d00M])[kb];
+		real mfccb = (D.f[dPP0])[k];
+		real mfaab = (D.f[dMM0])[ksw];
+		real mfcab = (D.f[dPM0])[ks];
+		real mfacb = (D.f[dMP0])[kw];
+		real mfcbc = (D.f[dP0P])[k];
+		real mfaba = (D.f[dM0M])[kbw];
+		real mfcba = (D.f[dP0M])[kb];
+		real mfabc = (D.f[dM0P])[kw];
+		real mfbcc = (D.f[d0PP])[k];
+		real mfbaa = (D.f[d0MM])[kbs];
+		real mfbca = (D.f[d0PM])[kb];
+		real mfbac = (D.f[d0MP])[ks];
+		real mfbbb = (D.f[d000])[k];
+		real mfccc = (D.f[dPPP])[k];
+		real mfaac = (D.f[dMMP])[ksw];
+		real mfcac = (D.f[dPMP])[ks];
+		real mfacc = (D.f[dMPP])[kw];
+		real mfcca = (D.f[dPPM])[kb];
+		real mfaaa = (D.f[dMMM])[kbsw];
+		real mfcaa = (D.f[dPMM])[kbs];
+		real mfaca = (D.f[dMPM])[kbw];
 		////////////////////////////////////////////////////////////////////////////////////
 		real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 			(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -904,33 +904,33 @@ __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
 		////////////////////////////////////////////////////////////////////////////////////
 
 		////////////////////////////////////////////////////////////////////////////////////
-		(D.f[DIR_P00])[k] = mfabb;
-		(D.f[DIR_M00])[kw] = mfcbb;
-		(D.f[DIR_0P0])[k] = mfbab;
-		(D.f[DIR_0M0])[ks] = mfbcb;
-		(D.f[DIR_00P])[k] = mfbba;
-		(D.f[DIR_00M])[kb] = mfbbc;
-		(D.f[DIR_PP0])[k] = mfaab;
-		(D.f[DIR_MM0])[ksw] = mfccb;
-		(D.f[DIR_PM0])[ks] = mfacb;
-		(D.f[DIR_MP0])[kw] = mfcab;
-		(D.f[DIR_P0P])[k] = mfaba;
-		(D.f[DIR_M0M])[kbw] = mfcbc;
-		(D.f[DIR_P0M])[kb] = mfabc;
-		(D.f[DIR_M0P])[kw] = mfcba;
-		(D.f[DIR_0PP])[k] = mfbaa;
-		(D.f[DIR_0MM])[kbs] = mfbcc;
-		(D.f[DIR_0PM])[kb] = mfbac;
-		(D.f[DIR_0MP])[ks] = mfbca;
-		(D.f[DIR_000])[k] = mfbbb;
-		(D.f[DIR_PPP])[k] = mfaaa;
-		(D.f[DIR_PMP])[ks] = mfaca;
-		(D.f[DIR_PPM])[kb] = mfaac;
-		(D.f[DIR_PMM])[kbs] = mfacc;
-		(D.f[DIR_MPP])[kw] = mfcaa;
-		(D.f[DIR_MMP])[ksw] = mfcca;
-		(D.f[DIR_MPM])[kbw] = mfcac;
-		(D.f[DIR_MMM])[kbsw] = mfccc;
+		(D.f[dP00])[k] = mfabb;
+		(D.f[dM00])[kw] = mfcbb;
+		(D.f[d0P0])[k] = mfbab;
+		(D.f[d0M0])[ks] = mfbcb;
+		(D.f[d00P])[k] = mfbba;
+		(D.f[d00M])[kb] = mfbbc;
+		(D.f[dPP0])[k] = mfaab;
+		(D.f[dMM0])[ksw] = mfccb;
+		(D.f[dPM0])[ks] = mfacb;
+		(D.f[dMP0])[kw] = mfcab;
+		(D.f[dP0P])[k] = mfaba;
+		(D.f[dM0M])[kbw] = mfcbc;
+		(D.f[dP0M])[kb] = mfabc;
+		(D.f[dM0P])[kw] = mfcba;
+		(D.f[d0PP])[k] = mfbaa;
+		(D.f[d0MM])[kbs] = mfbcc;
+		(D.f[d0PM])[kb] = mfbac;
+		(D.f[d0MP])[ks] = mfbca;
+		(D.f[d000])[k] = mfbbb;
+		(D.f[dPPP])[k] = mfaaa;
+		(D.f[dPMP])[ks] = mfaca;
+		(D.f[dPPM])[kb] = mfaac;
+		(D.f[dPMM])[kbs] = mfacc;
+		(D.f[dMPP])[kw] = mfcaa;
+		(D.f[dMMP])[ksw] = mfcca;
+		(D.f[dMPM])[kbw] = mfcac;
+		(D.f[dMMM])[kbsw] = mfccc;
 		////////////////////////////////////////////////////////////////////////////////////
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia_Device.cuh
similarity index 64%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia_Device.cuh
index f2cf530b5d331c71d4a13bd5882a3657a3bbddea..853c22145f401afd31c86cc4aa2996f13984cdf0 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_PM_CUM_ONE_COMP_SP_27_H
-#define LB_KERNEL_PM_CUM_ONE_COMP_SP_27_H
+#ifndef K15CompressibleNavierStokesPorousMedia_Device_H
+#define K15CompressibleNavierStokesPorousMedia_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
+__global__ void K15CompressibleNavierStokesPorousMedia_Device(real omega,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
 	unsigned int* neighborZ,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.cu
similarity index 59%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.cu
index cfcc544aac2172cef2f4d58600931db8ccfa0189..b3fd5bebd5483aa66d9ee6b0af36d55d7cc08ead 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.cu
@@ -1,14 +1,14 @@
-#include "WaleCumulantK15Comp.h"
+#include "K15CompressibleNavierStokesWale.h"
 
-#include "WaleCumulantK15Comp_Device.cuh"
+#include "K15CompressibleNavierStokesWale_Device.cuh"
 #include "Parameter/Parameter.h"
 
-std::shared_ptr<WaleCumulantK15Comp> WaleCumulantK15Comp::getNewInstance(std::shared_ptr<Parameter> para, int level)
+std::shared_ptr<K15CompressibleNavierStokesWale> K15CompressibleNavierStokesWale::getNewInstance(std::shared_ptr<Parameter> para, int level)
 {
-	return std::shared_ptr<WaleCumulantK15Comp>(new WaleCumulantK15Comp(para, level));
+	return std::shared_ptr<K15CompressibleNavierStokesWale>(new K15CompressibleNavierStokesWale(para, level));
 }
 
-void WaleCumulantK15Comp::run()
+void K15CompressibleNavierStokesWale::run()
 {
 	int size_Mat = (int)para->getParD(level)->numberOfNodes;
 	int numberOfThreads = para->getParD(level)->numberofthreads;
@@ -28,7 +28,7 @@ void WaleCumulantK15Comp::run()
 	dim3 grid(Grid1, Grid2, 1);
 	dim3 threads(numberOfThreads, 1, 1);
 
-	LB_Kernel_WaleCumulantK15Comp <<< grid, threads >>>(
+	K15CompressibleNavierStokesWale_Device <<< grid, threads >>>(
 		para->getParD(level)->omega,
 		para->getParD(level)->typeOfGridNode,
 		para->getParD(level)->neighborX,
@@ -45,10 +45,10 @@ void WaleCumulantK15Comp::run()
 		para->getTimestepOfCoarseLevel(),
 		para->getForcesDev(),
 		para->getParD(level)->isEvenTimestep);
-	getLastCudaError("LB_Kernel_WaleCumulantK15Comp execution failed");
+	getLastCudaError("K15CompressibleNavierStokesWale_Device execution failed");
 }
 
-WaleCumulantK15Comp::WaleCumulantK15Comp(std::shared_ptr<Parameter> para, int level)
+K15CompressibleNavierStokesWale::K15CompressibleNavierStokesWale(std::shared_ptr<Parameter> para, int level)
 {
 	this->para = para;
 	this->level = level;
@@ -58,6 +58,6 @@ WaleCumulantK15Comp::WaleCumulantK15Comp(std::shared_ptr<Parameter> para, int le
 	
 }
 
-WaleCumulantK15Comp::WaleCumulantK15Comp()
+K15CompressibleNavierStokesWale::K15CompressibleNavierStokesWale()
 {
 }
diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.h
new file mode 100644
index 0000000000000000000000000000000000000000..c8b9c04caafbb2e692c36d91d1b89dbc3ad0f103
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.h
@@ -0,0 +1,17 @@
+#ifndef K15CompressibleNavierStokesWale_H
+#define K15CompressibleNavierStokesWale_H
+
+#include "Kernel/KernelImp.h"
+
+class K15CompressibleNavierStokesWale : public KernelImp
+{
+public:
+	static std::shared_ptr<K15CompressibleNavierStokesWale> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	K15CompressibleNavierStokesWale();
+	K15CompressibleNavierStokesWale(std::shared_ptr< Parameter> para, int level);
+
+};
+#endif 
\ 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/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale_Device.cu
similarity index 90%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale_Device.cu
index 62658ccbdcead27f77d3b72d2daa311ade5baa59..97c2bcfbad3677255b738312a4cfb5805c38e511 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_WaleCumulantK15Comp(
+__global__ void K15CompressibleNavierStokesWale_Device(
 	real omega_in,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
@@ -46,63 +46,63 @@ __global__ void LB_Kernel_WaleCumulantK15Comp(
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -136,33 +136,33 @@ __global__ void LB_Kernel_WaleCumulantK15Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -420,9 +420,9 @@ __global__ void LB_Kernel_WaleCumulantK15Comp(
 				//real SumSDsq = SumSd * SumSd;
 				real SumSsq = SumS;
 				real SumSDsq = SumSd;
-				//nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + smallSingle); //powf
-				//nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + smallSingle);     //pow
-				//nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + smallSingle); //SMversion//
+				//nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + cSmallSingle); //powf
+				//nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + cSmallSingle);     //pow
+				//nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + cSmallSingle); //SMversion//
 				nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 0.25) /
 					((real)pow(((double)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + c1o1); //SMversion2//
 																																	  /////////////////////////////////
@@ -1180,33 +1180,33 @@ __global__ void LB_Kernel_WaleCumulantK15Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;                                                                    
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;                                                                  
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;
-			(D.f[ DIR_00P   ])[k   ] = mfbba;
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;
-			(D.f[ DIR_000])[k   ] = mfbbb;
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;
+			(D.f[ dP00   ])[k   ] = mfabb;                                                                    
+			(D.f[ dM00   ])[kw  ] = mfcbb;                                                                  
+			(D.f[ d0P0   ])[k   ] = mfbab;
+			(D.f[ d0M0   ])[ks  ] = mfbcb;
+			(D.f[ d00P   ])[k   ] = mfbba;
+			(D.f[ d00M   ])[kb  ] = mfbbc;
+			(D.f[ dPP0  ])[k   ] = mfaab;
+			(D.f[ dMM0  ])[ksw ] = mfccb;
+			(D.f[ dPM0  ])[ks  ] = mfacb;
+			(D.f[ dMP0  ])[kw  ] = mfcab;
+			(D.f[ dP0P  ])[k   ] = mfaba;
+			(D.f[ dM0M  ])[kbw ] = mfcbc;
+			(D.f[ dP0M  ])[kb  ] = mfabc;
+			(D.f[ dM0P  ])[kw  ] = mfcba;
+			(D.f[ d0PP  ])[k   ] = mfbaa;
+			(D.f[ d0MM  ])[kbs ] = mfbcc;
+			(D.f[ d0PM  ])[kb  ] = mfbac;
+			(D.f[ d0MP  ])[ks  ] = mfbca;
+			(D.f[ d000])[k   ] = mfbbb;
+			(D.f[ dPPP ])[k   ] = mfaaa;
+			(D.f[ dPMP ])[ks  ] = mfaca;
+			(D.f[ dPPM ])[kb  ] = mfaac;
+			(D.f[ dPMM ])[kbs ] = mfacc;
+			(D.f[ dMPP ])[kw  ] = mfcaa;
+			(D.f[ dMMP ])[ksw ] = mfcca;
+			(D.f[ dMPM ])[kbw ] = mfcac;
+			(D.f[ dMMM ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale_Device.cuh
similarity index 67%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale_Device.cuh
index fad3eb11434b9c3fd216a7698b9275d4af43245c..aa113e116cd2dd50658dd8c393ea83cee17ce208 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_WALE_CUMULANT_K15_COMP_H
-#define LB_KERNEL_WALE_CUMULANT_K15_COMP_H
+#ifndef K15CompressibleNavierStokesWale_Device_H
+#define K15CompressibleNavierStokesWale_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_WaleCumulantK15Comp(real omega,
+__global__ void K15CompressibleNavierStokesWale_Device(real omega,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.cu
similarity index 57%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.cu
index 05e257a52b38e2c31badcb1fb739de3ab0239f6e..ae7765280309e15b5052778f158936b88cd68fd2 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.cu
@@ -1,14 +1,14 @@
-#include "WaleBySoniMalavCumulantK15Comp.h"
+#include "K15CompressibleNavierStokesWaleBySoniMalav.h"
 
-#include "WaleBySoniMalavCumulantK15Comp_Device.cuh"
+#include "K15CompressibleNavierStokesWaleBySoniMalav_Device.cuh"
 #include "Parameter/Parameter.h"
 
-std::shared_ptr<WaleBySoniMalavCumulantK15Comp> WaleBySoniMalavCumulantK15Comp::getNewInstance(std::shared_ptr<Parameter> para, int level)
+std::shared_ptr<K15CompressibleNavierStokesWaleBySoniMalav> K15CompressibleNavierStokesWaleBySoniMalav::getNewInstance(std::shared_ptr<Parameter> para, int level)
 {
-	return std::shared_ptr<WaleBySoniMalavCumulantK15Comp>(new WaleBySoniMalavCumulantK15Comp(para, level));
+	return std::shared_ptr<K15CompressibleNavierStokesWaleBySoniMalav>(new K15CompressibleNavierStokesWaleBySoniMalav(para, level));
 }
 
-void WaleBySoniMalavCumulantK15Comp::run()
+void K15CompressibleNavierStokesWaleBySoniMalav::run()
 {
 	int size_Mat = (int)para->getParD(level)->numberOfNodes;
 	int numberOfThreads = para->getParD(level)->numberofthreads;
@@ -32,7 +32,7 @@ void WaleBySoniMalavCumulantK15Comp::run()
 	dim3 grid(Grid1, Grid2, 1);
 	dim3 threads(numberOfThreads, 1, 1);
 
-	LB_Kernel_WaleBySoniMalavCumulantK15Comp <<< grid, threads >>>(
+	K15CompressibleNavierStokesWaleBySoniMalav_Device <<< grid, threads >>>(
 		para->getParD(level)->omega,
 		para->getParD(level)->typeOfGridNode,
 		para->getParD(level)->neighborX,
@@ -48,10 +48,10 @@ void WaleBySoniMalavCumulantK15Comp::run()
 		level,
 		para->getForcesDev(),
 		para->getParD(level)->isEvenTimestep);
-	getLastCudaError("LB_Kernel_WaleBySoniMalavCumulantK15Comp execution failed");
+	getLastCudaError("K15CompressibleNavierStokesWaleBySoniMalav_Device execution failed");
 }
 
-WaleBySoniMalavCumulantK15Comp::WaleBySoniMalavCumulantK15Comp(std::shared_ptr<Parameter> para, int level)
+K15CompressibleNavierStokesWaleBySoniMalav::K15CompressibleNavierStokesWaleBySoniMalav(std::shared_ptr<Parameter> para, int level)
 {
 	this->para = para;
 	this->level = level;
@@ -61,6 +61,6 @@ WaleBySoniMalavCumulantK15Comp::WaleBySoniMalavCumulantK15Comp(std::shared_ptr<P
 	
 }
 
-WaleBySoniMalavCumulantK15Comp::WaleBySoniMalavCumulantK15Comp()
+K15CompressibleNavierStokesWaleBySoniMalav::K15CompressibleNavierStokesWaleBySoniMalav()
 {
 }
diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.h
new file mode 100644
index 0000000000000000000000000000000000000000..f446af208a634ca6d0e276f96450328dfdc0a7c6
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.h
@@ -0,0 +1,17 @@
+#ifndef K15CompressibleNavierStokesWaleBySoniMalav_H
+#define K15CompressibleNavierStokesWaleBySoniMalav_H
+
+#include "Kernel/KernelImp.h"
+
+class K15CompressibleNavierStokesWaleBySoniMalav : public KernelImp
+{
+public:
+	static std::shared_ptr<K15CompressibleNavierStokesWaleBySoniMalav> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	K15CompressibleNavierStokesWaleBySoniMalav();
+	K15CompressibleNavierStokesWaleBySoniMalav(std::shared_ptr< Parameter> para, int level);
+
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav_Device.cu
similarity index 89%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav_Device.cu
index d266aac648c6163fb24764879f391304f32aba87..1e086df36eef085b25747bd83f21f46cbfaa0425 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
+__global__ void K15CompressibleNavierStokesWaleBySoniMalav_Device(
 	real omega_in,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
@@ -45,63 +45,63 @@ __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -115,33 +115,33 @@ __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -296,7 +296,7 @@ __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			real SdSd = S1d*S1d + S2d*S2d + S3d*S3d + S4d*S4d + S5d*S5d + S6d*S6d + S7d*S7d + S8d*S8d + S9d*S9d;
 			/////////////// Computing turbulent viscosity ///////////////////////
 
-			//wOper = (real)pow((double)SdSd, 1.5) / ((real)pow((double)S2, 2.5) + (real)pow((double)SdSd, 1.25) + smallSingle);// 1e-26f);
+			//wOper = (real)pow((double)SdSd, 1.5) / ((real)pow((double)S2, 2.5) + (real)pow((double)SdSd, 1.25) + cSmallSingle);// 1e-26f);
 			wOper = (float)pow((double)SdSd, 0.25) / ((float)pow((double)((float)pow((double)S2, 0.5) / ((float)pow((double)SdSd, 0.25) + 1e-10)), 5.0) + 1);
 
 			nuTurb = (Cw*Cw * DelX*DelX) * wOper;
@@ -1004,33 +1004,33 @@ __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00   ])[k   ] = mfabb;                                                                    
-			(D.f[ DIR_M00   ])[kw  ] = mfcbb;                                                                  
-			(D.f[ DIR_0P0   ])[k   ] = mfbab;
-			(D.f[ DIR_0M0   ])[ks  ] = mfbcb;
-			(D.f[ DIR_00P   ])[k   ] = mfbba;
-			(D.f[ DIR_00M   ])[kb  ] = mfbbc;
-			(D.f[ DIR_PP0  ])[k   ] = mfaab;
-			(D.f[ DIR_MM0  ])[ksw ] = mfccb;
-			(D.f[ DIR_PM0  ])[ks  ] = mfacb;
-			(D.f[ DIR_MP0  ])[kw  ] = mfcab;
-			(D.f[ DIR_P0P  ])[k   ] = mfaba;
-			(D.f[ DIR_M0M  ])[kbw ] = mfcbc;
-			(D.f[ DIR_P0M  ])[kb  ] = mfabc;
-			(D.f[ DIR_M0P  ])[kw  ] = mfcba;
-			(D.f[ DIR_0PP  ])[k   ] = mfbaa;
-			(D.f[ DIR_0MM  ])[kbs ] = mfbcc;
-			(D.f[ DIR_0PM  ])[kb  ] = mfbac;
-			(D.f[ DIR_0MP  ])[ks  ] = mfbca;
-			(D.f[ DIR_000])[k   ] = mfbbb;
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;
+			(D.f[ dP00   ])[k   ] = mfabb;                                                                    
+			(D.f[ dM00   ])[kw  ] = mfcbb;                                                                  
+			(D.f[ d0P0   ])[k   ] = mfbab;
+			(D.f[ d0M0   ])[ks  ] = mfbcb;
+			(D.f[ d00P   ])[k   ] = mfbba;
+			(D.f[ d00M   ])[kb  ] = mfbbc;
+			(D.f[ dPP0  ])[k   ] = mfaab;
+			(D.f[ dMM0  ])[ksw ] = mfccb;
+			(D.f[ dPM0  ])[ks  ] = mfacb;
+			(D.f[ dMP0  ])[kw  ] = mfcab;
+			(D.f[ dP0P  ])[k   ] = mfaba;
+			(D.f[ dM0M  ])[kbw ] = mfcbc;
+			(D.f[ dP0M  ])[kb  ] = mfabc;
+			(D.f[ dM0P  ])[kw  ] = mfcba;
+			(D.f[ d0PP  ])[k   ] = mfbaa;
+			(D.f[ d0MM  ])[kbs ] = mfbcc;
+			(D.f[ d0PM  ])[kb  ] = mfbac;
+			(D.f[ d0MP  ])[ks  ] = mfbca;
+			(D.f[ d000])[k   ] = mfbbb;
+			(D.f[ dPPP ])[k   ] = mfaaa;
+			(D.f[ dPMP ])[ks  ] = mfaca;
+			(D.f[ dPPM ])[kb  ] = mfaac;
+			(D.f[ dPMM ])[kbs ] = mfacc;
+			(D.f[ dMPP ])[kw  ] = mfcaa;
+			(D.f[ dMMP ])[ksw ] = mfcca;
+			(D.f[ dMPM ])[kbw ] = mfcac;
+			(D.f[ dMMM ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav_Device.cuh
similarity index 61%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav_Device.cuh
index 4297404073aacc0acd01b84c35cbae3d1081ed5b..998adc4d3d6a134b362f8f9d2a0b610c215730ec 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_WALE_BY_SONI_MALAV_CUMULANT_K15_COMP_H
-#define LB_KERNEL_WALE_BY_SONI_MALAV_CUMULANT_K15_COMP_H
+#ifndef K15CompressibleNavierStokesWaleBySoniMalav_Device_H
+#define K15CompressibleNavierStokesWaleBySoniMalav_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(real omega_in,
+__global__ void K15CompressibleNavierStokesWaleBySoniMalav_Device(real omega_in,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu
similarity index 83%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu
index 1803c083f8f04182cbe1556c33936fc052499596..171921fa8a468bd54d14edec7c3b8e386e1a3fd1 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu
@@ -40,63 +40,63 @@ __global__ void K17CompressibleNavierStokesBulkViscosity_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -129,33 +129,33 @@ __global__ void K17CompressibleNavierStokesBulkViscosity_Device(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -886,33 +886,33 @@ __global__ void K17CompressibleNavierStokesBulkViscosity_Device(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu
similarity index 83%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu
index d796f38bca8b7c70940515db78160fe460a702f9..b54575fcc1ffe05ee82d7c9c60604cec5bffb90e 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu
@@ -89,61 +89,61 @@ __global__ void K17CompressibleNavierStokesChimeraLegacy_Device(
         //!
         Distributions27 dist;
         if (isEvenTimestep) {
-            dist.f[DIR_P00]    = &distributions[DIR_P00 * size_Mat];
-            dist.f[DIR_M00]    = &distributions[DIR_M00 * size_Mat];
-            dist.f[DIR_0P0]    = &distributions[DIR_0P0 * size_Mat];
-            dist.f[DIR_0M0]    = &distributions[DIR_0M0 * size_Mat];
-            dist.f[DIR_00P]    = &distributions[DIR_00P * size_Mat];
-            dist.f[DIR_00M]    = &distributions[DIR_00M * size_Mat];
-            dist.f[DIR_PP0]   = &distributions[DIR_PP0 * size_Mat];
-            dist.f[DIR_MM0]   = &distributions[DIR_MM0 * size_Mat];
-            dist.f[DIR_PM0]   = &distributions[DIR_PM0 * size_Mat];
-            dist.f[DIR_MP0]   = &distributions[DIR_MP0 * size_Mat];
-            dist.f[DIR_P0P]   = &distributions[DIR_P0P * size_Mat];
-            dist.f[DIR_M0M]   = &distributions[DIR_M0M * size_Mat];
-            dist.f[DIR_P0M]   = &distributions[DIR_P0M * size_Mat];
-            dist.f[DIR_M0P]   = &distributions[DIR_M0P * size_Mat];
-            dist.f[DIR_0PP]   = &distributions[DIR_0PP * size_Mat];
-            dist.f[DIR_0MM]   = &distributions[DIR_0MM * size_Mat];
-            dist.f[DIR_0PM]   = &distributions[DIR_0PM * size_Mat];
-            dist.f[DIR_0MP]   = &distributions[DIR_0MP * size_Mat];
-            dist.f[DIR_000] = &distributions[DIR_000 * size_Mat];
-            dist.f[DIR_PPP]  = &distributions[DIR_PPP * size_Mat];
-            dist.f[DIR_MMP]  = &distributions[DIR_MMP * size_Mat];
-            dist.f[DIR_PMP]  = &distributions[DIR_PMP * size_Mat];
-            dist.f[DIR_MPP]  = &distributions[DIR_MPP * size_Mat];
-            dist.f[DIR_PPM]  = &distributions[DIR_PPM * size_Mat];
-            dist.f[DIR_MMM]  = &distributions[DIR_MMM * size_Mat];
-            dist.f[DIR_PMM]  = &distributions[DIR_PMM * size_Mat];
-            dist.f[DIR_MPM]  = &distributions[DIR_MPM * size_Mat];
+            dist.f[dP00]    = &distributions[dP00 * size_Mat];
+            dist.f[dM00]    = &distributions[dM00 * size_Mat];
+            dist.f[d0P0]    = &distributions[d0P0 * size_Mat];
+            dist.f[d0M0]    = &distributions[d0M0 * size_Mat];
+            dist.f[d00P]    = &distributions[d00P * size_Mat];
+            dist.f[d00M]    = &distributions[d00M * size_Mat];
+            dist.f[dPP0]   = &distributions[dPP0 * size_Mat];
+            dist.f[dMM0]   = &distributions[dMM0 * size_Mat];
+            dist.f[dPM0]   = &distributions[dPM0 * size_Mat];
+            dist.f[dMP0]   = &distributions[dMP0 * size_Mat];
+            dist.f[dP0P]   = &distributions[dP0P * size_Mat];
+            dist.f[dM0M]   = &distributions[dM0M * size_Mat];
+            dist.f[dP0M]   = &distributions[dP0M * size_Mat];
+            dist.f[dM0P]   = &distributions[dM0P * size_Mat];
+            dist.f[d0PP]   = &distributions[d0PP * size_Mat];
+            dist.f[d0MM]   = &distributions[d0MM * size_Mat];
+            dist.f[d0PM]   = &distributions[d0PM * size_Mat];
+            dist.f[d0MP]   = &distributions[d0MP * size_Mat];
+            dist.f[d000] = &distributions[d000 * size_Mat];
+            dist.f[dPPP]  = &distributions[dPPP * size_Mat];
+            dist.f[dMMP]  = &distributions[dMMP * size_Mat];
+            dist.f[dPMP]  = &distributions[dPMP * size_Mat];
+            dist.f[dMPP]  = &distributions[dMPP * size_Mat];
+            dist.f[dPPM]  = &distributions[dPPM * size_Mat];
+            dist.f[dMMM]  = &distributions[dMMM * size_Mat];
+            dist.f[dPMM]  = &distributions[dPMM * size_Mat];
+            dist.f[dMPM]  = &distributions[dMPM * size_Mat];
         } else {
-            dist.f[DIR_M00]    = &distributions[DIR_P00 * size_Mat];
-            dist.f[DIR_P00]    = &distributions[DIR_M00 * size_Mat];
-            dist.f[DIR_0M0]    = &distributions[DIR_0P0 * size_Mat];
-            dist.f[DIR_0P0]    = &distributions[DIR_0M0 * size_Mat];
-            dist.f[DIR_00M]    = &distributions[DIR_00P * size_Mat];
-            dist.f[DIR_00P]    = &distributions[DIR_00M * size_Mat];
-            dist.f[DIR_MM0]   = &distributions[DIR_PP0 * size_Mat];
-            dist.f[DIR_PP0]   = &distributions[DIR_MM0 * size_Mat];
-            dist.f[DIR_MP0]   = &distributions[DIR_PM0 * size_Mat];
-            dist.f[DIR_PM0]   = &distributions[DIR_MP0 * size_Mat];
-            dist.f[DIR_M0M]   = &distributions[DIR_P0P * size_Mat];
-            dist.f[DIR_P0P]   = &distributions[DIR_M0M * size_Mat];
-            dist.f[DIR_M0P]   = &distributions[DIR_P0M * size_Mat];
-            dist.f[DIR_P0M]   = &distributions[DIR_M0P * size_Mat];
-            dist.f[DIR_0MM]   = &distributions[DIR_0PP * size_Mat];
-            dist.f[DIR_0PP]   = &distributions[DIR_0MM * size_Mat];
-            dist.f[DIR_0MP]   = &distributions[DIR_0PM * size_Mat];
-            dist.f[DIR_0PM]   = &distributions[DIR_0MP * size_Mat];
-            dist.f[DIR_000] = &distributions[DIR_000 * size_Mat];
-            dist.f[DIR_MMM]  = &distributions[DIR_PPP * size_Mat];
-            dist.f[DIR_PPM]  = &distributions[DIR_MMP * size_Mat];
-            dist.f[DIR_MPM]  = &distributions[DIR_PMP * size_Mat];
-            dist.f[DIR_PMM]  = &distributions[DIR_MPP * size_Mat];
-            dist.f[DIR_MMP]  = &distributions[DIR_PPM * size_Mat];
-            dist.f[DIR_PPP]  = &distributions[DIR_MMM * size_Mat];
-            dist.f[DIR_MPP]  = &distributions[DIR_PMM * size_Mat];
-            dist.f[DIR_PMP]  = &distributions[DIR_MPM * size_Mat];
+            dist.f[dM00]    = &distributions[dP00 * size_Mat];
+            dist.f[dP00]    = &distributions[dM00 * size_Mat];
+            dist.f[d0M0]    = &distributions[d0P0 * size_Mat];
+            dist.f[d0P0]    = &distributions[d0M0 * size_Mat];
+            dist.f[d00M]    = &distributions[d00P * size_Mat];
+            dist.f[d00P]    = &distributions[d00M * size_Mat];
+            dist.f[dMM0]   = &distributions[dPP0 * size_Mat];
+            dist.f[dPP0]   = &distributions[dMM0 * size_Mat];
+            dist.f[dMP0]   = &distributions[dPM0 * size_Mat];
+            dist.f[dPM0]   = &distributions[dMP0 * size_Mat];
+            dist.f[dM0M]   = &distributions[dP0P * size_Mat];
+            dist.f[dP0P]   = &distributions[dM0M * size_Mat];
+            dist.f[dM0P]   = &distributions[dP0M * size_Mat];
+            dist.f[dP0M]   = &distributions[dM0P * size_Mat];
+            dist.f[d0MM]   = &distributions[d0PP * size_Mat];
+            dist.f[d0PP]   = &distributions[d0MM * size_Mat];
+            dist.f[d0MP]   = &distributions[d0PM * size_Mat];
+            dist.f[d0PM]   = &distributions[d0MP * size_Mat];
+            dist.f[d000] = &distributions[d000 * size_Mat];
+            dist.f[dMMM]  = &distributions[dPPP * size_Mat];
+            dist.f[dPPM]  = &distributions[dMMP * size_Mat];
+            dist.f[dMPM]  = &distributions[dPMP * size_Mat];
+            dist.f[dPMM]  = &distributions[dMPP * size_Mat];
+            dist.f[dMMP]  = &distributions[dPPM * size_Mat];
+            dist.f[dPPP]  = &distributions[dMMM * size_Mat];
+            dist.f[dMPP]  = &distributions[dPMM * size_Mat];
+            dist.f[dPMP]  = &distributions[dMPM * size_Mat];
         }
         ////////////////////////////////////////////////////////////////////////////////
         //! - Set neighbor indices (necessary for indirect addressing)
@@ -157,33 +157,33 @@ __global__ void K17CompressibleNavierStokesChimeraLegacy_Device(
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Set local distributions
         //!
-        real mfcbb = (dist.f[DIR_P00])[k];
-        real mfabb = (dist.f[DIR_M00])[kw];
-        real mfbcb = (dist.f[DIR_0P0])[k];
-        real mfbab = (dist.f[DIR_0M0])[ks];
-        real mfbbc = (dist.f[DIR_00P])[k];
-        real mfbba = (dist.f[DIR_00M])[kb];
-        real mfccb = (dist.f[DIR_PP0])[k];
-        real mfaab = (dist.f[DIR_MM0])[ksw];
-        real mfcab = (dist.f[DIR_PM0])[ks];
-        real mfacb = (dist.f[DIR_MP0])[kw];
-        real mfcbc = (dist.f[DIR_P0P])[k];
-        real mfaba = (dist.f[DIR_M0M])[kbw];
-        real mfcba = (dist.f[DIR_P0M])[kb];
-        real mfabc = (dist.f[DIR_M0P])[kw];
-        real mfbcc = (dist.f[DIR_0PP])[k];
-        real mfbaa = (dist.f[DIR_0MM])[kbs];
-        real mfbca = (dist.f[DIR_0PM])[kb];
-        real mfbac = (dist.f[DIR_0MP])[ks];
-        real mfbbb = (dist.f[DIR_000])[k];
-        real mfccc = (dist.f[DIR_PPP])[k];
-        real mfaac = (dist.f[DIR_MMP])[ksw];
-        real mfcac = (dist.f[DIR_PMP])[ks];
-        real mfacc = (dist.f[DIR_MPP])[kw];
-        real mfcca = (dist.f[DIR_PPM])[kb];
-        real mfaaa = (dist.f[DIR_MMM])[kbsw];
-        real mfcaa = (dist.f[DIR_PMM])[kbs];
-        real mfaca = (dist.f[DIR_MPM])[kbw];
+        real mfcbb = (dist.f[dP00])[k];
+        real mfabb = (dist.f[dM00])[kw];
+        real mfbcb = (dist.f[d0P0])[k];
+        real mfbab = (dist.f[d0M0])[ks];
+        real mfbbc = (dist.f[d00P])[k];
+        real mfbba = (dist.f[d00M])[kb];
+        real mfccb = (dist.f[dPP0])[k];
+        real mfaab = (dist.f[dMM0])[ksw];
+        real mfcab = (dist.f[dPM0])[ks];
+        real mfacb = (dist.f[dMP0])[kw];
+        real mfcbc = (dist.f[dP0P])[k];
+        real mfaba = (dist.f[dM0M])[kbw];
+        real mfcba = (dist.f[dP0M])[kb];
+        real mfabc = (dist.f[dM0P])[kw];
+        real mfbcc = (dist.f[d0PP])[k];
+        real mfbaa = (dist.f[d0MM])[kbs];
+        real mfbca = (dist.f[d0PM])[kb];
+        real mfbac = (dist.f[d0MP])[ks];
+        real mfbbb = (dist.f[d000])[k];
+        real mfccc = (dist.f[dPPP])[k];
+        real mfaac = (dist.f[dMMP])[ksw];
+        real mfcac = (dist.f[dPMP])[ks];
+        real mfacc = (dist.f[dMPP])[kw];
+        real mfcca = (dist.f[dPPM])[kb];
+        real mfaaa = (dist.f[dMMM])[kbsw];
+        real mfcaa = (dist.f[dPMM])[kbs];
+        real mfaca = (dist.f[dMPM])[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),
@@ -331,7 +331,7 @@ __global__ void K17CompressibleNavierStokesChimeraLegacy_Device(
         real O6 = c1o1;
 
         ////////////////////////////////////////////////////////////////////////////////////
-        //! - A and DIR_00M: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
+        //! - A and d00M: 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).
@@ -624,32 +624,32 @@ __global__ void K17CompressibleNavierStokesChimeraLegacy_Device(
         //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017),
         //! DOI:10.3390/computation5020019 ]</b></a>
         //!
-        (dist.f[DIR_P00])[k]      = mfabb;
-        (dist.f[DIR_M00])[kw]     = mfcbb;
-        (dist.f[DIR_0P0])[k]      = mfbab;
-        (dist.f[DIR_0M0])[ks]     = mfbcb;
-        (dist.f[DIR_00P])[k]      = mfbba;
-        (dist.f[DIR_00M])[kb]     = mfbbc;
-        (dist.f[DIR_PP0])[k]     = mfaab;
-        (dist.f[DIR_MM0])[ksw]   = mfccb;
-        (dist.f[DIR_PM0])[ks]    = mfacb;
-        (dist.f[DIR_MP0])[kw]    = mfcab;
-        (dist.f[DIR_P0P])[k]     = mfaba;
-        (dist.f[DIR_M0M])[kbw]   = mfcbc;
-        (dist.f[DIR_P0M])[kb]    = mfabc;
-        (dist.f[DIR_M0P])[kw]    = mfcba;
-        (dist.f[DIR_0PP])[k]     = mfbaa;
-        (dist.f[DIR_0MM])[kbs]   = mfbcc;
-        (dist.f[DIR_0PM])[kb]    = mfbac;
-        (dist.f[DIR_0MP])[ks]    = mfbca;
-        (dist.f[DIR_000])[k]   = mfbbb;
-        (dist.f[DIR_PPP])[k]    = mfaaa;
-        (dist.f[DIR_PMP])[ks]   = mfaca;
-        (dist.f[DIR_PPM])[kb]   = mfaac;
-        (dist.f[DIR_PMM])[kbs]  = mfacc;
-        (dist.f[DIR_MPP])[kw]   = mfcaa;
-        (dist.f[DIR_MMP])[ksw]  = mfcca;
-        (dist.f[DIR_MPM])[kbw]  = mfcac;
-        (dist.f[DIR_MMM])[kbsw] = mfccc;
+        (dist.f[dP00])[k]      = mfabb;
+        (dist.f[dM00])[kw]     = mfcbb;
+        (dist.f[d0P0])[k]      = mfbab;
+        (dist.f[d0M0])[ks]     = mfbcb;
+        (dist.f[d00P])[k]      = mfbba;
+        (dist.f[d00M])[kb]     = mfbbc;
+        (dist.f[dPP0])[k]     = mfaab;
+        (dist.f[dMM0])[ksw]   = mfccb;
+        (dist.f[dPM0])[ks]    = mfacb;
+        (dist.f[dMP0])[kw]    = mfcab;
+        (dist.f[dP0P])[k]     = mfaba;
+        (dist.f[dM0M])[kbw]   = mfcbc;
+        (dist.f[dP0M])[kb]    = mfabc;
+        (dist.f[dM0P])[kw]    = mfcba;
+        (dist.f[d0PP])[k]     = mfbaa;
+        (dist.f[d0MM])[kbs]   = mfbcc;
+        (dist.f[d0PM])[kb]    = mfbac;
+        (dist.f[d0MP])[ks]    = mfbca;
+        (dist.f[d000])[k]   = mfbbb;
+        (dist.f[dPPP])[k]    = mfaaa;
+        (dist.f[dPMP])[ks]   = mfaca;
+        (dist.f[dPPM])[kb]   = mfaac;
+        (dist.f[dPMM])[kbs]  = mfacc;
+        (dist.f[dMPP])[kw]   = mfcaa;
+        (dist.f[dMMP])[ksw]  = mfcca;
+        (dist.f[dMPM])[kbw]  = mfcac;
+        (dist.f[dMMM])[kbsw] = mfccc;
     }
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu
similarity index 85%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu
index 4919f56979ef004d3d74049feadc43895ad7cf28..54361f0a560cc4125767a9965413c2959e0b3b34 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu
@@ -43,63 +43,63 @@ __global__ void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Devic
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -161,33 +161,33 @@ __global__ void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Devic
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1062,33 +1062,33 @@ __global__ void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Devic
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.cu
similarity index 63%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.cu
index b7f4038c6b67cc4d1cf521bc7a904801650d1e8d..58de3b738d5dfba9f3a4ef7a83f239f9976d1ee9 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.cu
@@ -1,14 +1,14 @@
-#include "WaleCumulantK17Comp.h"
+#include "K17CompressibleNavierStokesWale.h"
 
-#include "WaleCumulantK17Comp_Device.cuh"
+#include "K17CompressibleNavierStokesWale_Device.cuh"
 #include "Parameter/Parameter.h"
 
-std::shared_ptr<WaleCumulantK17Comp> WaleCumulantK17Comp::getNewInstance(std::shared_ptr<Parameter> para, int level)
+std::shared_ptr<K17CompressibleNavierStokesWale> K17CompressibleNavierStokesWale::getNewInstance(std::shared_ptr<Parameter> para, int level)
 {
-	return std::shared_ptr<WaleCumulantK17Comp>(new WaleCumulantK17Comp(para, level));
+	return std::shared_ptr<K17CompressibleNavierStokesWale>(new K17CompressibleNavierStokesWale(para, level));
 }
 
-void WaleCumulantK17Comp::run()
+void K17CompressibleNavierStokesWale::run()
 {
 	int size_Mat = (int)para->getParD(level)->numberOfNodes;
 	int numberOfThreads = para->getParD(level)->numberofthreads;
@@ -32,7 +32,7 @@ void WaleCumulantK17Comp::run()
 	dim3 grid(Grid1, Grid2, 1);
 	dim3 threads(numberOfThreads, 1, 1);
 
-	LB_Kernel_WaleCumulantK17Comp <<< grid, threads >>>(
+	K17CompressibleNavierStokesWale_Device <<< grid, threads >>>(
 		para->getParD(level)->omega,
 		para->getParD(level)->typeOfGridNode,
 		para->getParD(level)->neighborX,
@@ -50,10 +50,10 @@ void WaleCumulantK17Comp::run()
 		para->getForcesDev(),
         para->getQuadricLimitersDev(),
 		para->getParD(level)->isEvenTimestep);
-	getLastCudaError("LB_Kernel_WaleCumulantK17Comp execution failed");
+	getLastCudaError("K17CompressibleNavierStokesWale_Device execution failed");
 }
 
-WaleCumulantK17Comp::WaleCumulantK17Comp(std::shared_ptr<Parameter> para, int level)
+K17CompressibleNavierStokesWale::K17CompressibleNavierStokesWale(std::shared_ptr<Parameter> para, int level)
 {
 	this->para = para;
 	this->level = level;
@@ -63,6 +63,6 @@ WaleCumulantK17Comp::WaleCumulantK17Comp(std::shared_ptr<Parameter> para, int le
 	
 }
 
-WaleCumulantK17Comp::WaleCumulantK17Comp()
+K17CompressibleNavierStokesWale::K17CompressibleNavierStokesWale()
 {
 }
diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.h
new file mode 100644
index 0000000000000000000000000000000000000000..2aa010e83c52392a8326b22ac658774d51cf7a42
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.h
@@ -0,0 +1,17 @@
+#ifndef K17CompressibleNavierStokesWale_H
+#define K17CompressibleNavierStokesWale_H
+
+#include "Kernel/KernelImp.h"
+
+class K17CompressibleNavierStokesWale : public KernelImp
+{
+public:
+	static std::shared_ptr<K17CompressibleNavierStokesWale> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	K17CompressibleNavierStokesWale();
+	K17CompressibleNavierStokesWale(std::shared_ptr< Parameter> para, int level);
+
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale_Device.cu
similarity index 90%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale_Device.cu
index 71d3ed0604feb43422e3e738bb2ca9bca147ab17..c51f047aeb4de412d4001e8dee8337c072dea743 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_WaleCumulantK17Comp(
+__global__ void K17CompressibleNavierStokesWale_Device(
 	real omega_in,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
@@ -47,63 +47,63 @@ __global__ void LB_Kernel_WaleCumulantK17Comp(
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -137,33 +137,33 @@ __global__ void LB_Kernel_WaleCumulantK17Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k  ];
-			real mfabb = (D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k  ];
-			real mfbab = (D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k  ];
-			real mfbba = (D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k  ];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks ];
-			real mfacb = (D.f[DIR_MP0])[kw ];
-			real mfcbc = (D.f[DIR_P0P])[k  ];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb ];
-			real mfabc = (D.f[DIR_M0P])[kw ];
-			real mfbcc = (D.f[DIR_0PP])[k  ];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb ];
-			real mfbac = (D.f[DIR_0MP])[ks ];
-			real mfbbb = (D.f[DIR_000])[k  ];
-			real mfccc = (D.f[DIR_PPP])[k  ];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks ];
-			real mfacc = (D.f[DIR_MPP])[kw ];
-			real mfcca = (D.f[DIR_PPM])[kb ];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k  ];
+			real mfabb = (D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k  ];
+			real mfbab = (D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k  ];
+			real mfbba = (D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k  ];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks ];
+			real mfacb = (D.f[dMP0])[kw ];
+			real mfcbc = (D.f[dP0P])[k  ];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb ];
+			real mfabc = (D.f[dM0P])[kw ];
+			real mfbcc = (D.f[d0PP])[k  ];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb ];
+			real mfbac = (D.f[d0MP])[ks ];
+			real mfbbb = (D.f[d000])[k  ];
+			real mfccc = (D.f[dPPP])[k  ];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks ];
+			real mfacc = (D.f[dMPP])[kw ];
+			real mfcca = (D.f[dPPM])[kb ];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -421,9 +421,9 @@ __global__ void LB_Kernel_WaleCumulantK17Comp(
 				//real SumSDsq = SumSd * SumSd;
 				real SumSsq = SumS;
 				real SumSDsq = SumSd;
-				//nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + smallSingle); //powf
-				//nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + smallSingle);     //pow
-				//nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + smallSingle); //SMversion//
+				//nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + cSmallSingle); //powf
+				//nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + cSmallSingle);     //pow
+				//nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + cSmallSingle); //SMversion//
 				nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 0.25) /
 					((real)pow(((double)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + c1o1); //SMversion2//
 																																	  /////////////////////////////////
@@ -1142,33 +1142,33 @@ __global__ void LB_Kernel_WaleCumulantK17Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ DIR_P00 ])[k   ] = mfabb;
-			(D.f[ DIR_M00 ])[kw  ] = mfcbb;
-			(D.f[ DIR_0P0 ])[k   ] = mfbab;
-			(D.f[ DIR_0M0 ])[ks  ] = mfbcb;
-			(D.f[ DIR_00P ])[k   ] = mfbba;
-			(D.f[ DIR_00M ])[kb  ] = mfbbc;
-			(D.f[ DIR_PP0 ])[k   ] = mfaab;
-			(D.f[ DIR_MM0 ])[ksw ] = mfccb;
-			(D.f[ DIR_PM0 ])[ks  ] = mfacb;
-			(D.f[ DIR_MP0 ])[kw  ] = mfcab;
-			(D.f[ DIR_P0P ])[k   ] = mfaba;
-			(D.f[ DIR_M0M ])[kbw ] = mfcbc;
-			(D.f[ DIR_P0M ])[kb  ] = mfabc;
-			(D.f[ DIR_M0P ])[kw  ] = mfcba;
-			(D.f[ DIR_0PP ])[k   ] = mfbaa;
-			(D.f[ DIR_0MM ])[kbs ] = mfbcc;
-			(D.f[ DIR_0PM ])[kb  ] = mfbac;
-			(D.f[ DIR_0MP ])[ks  ] = mfbca;
-			(D.f[ DIR_000 ])[k   ] = mfbbb;
-			(D.f[ DIR_PPP ])[k   ] = mfaaa;
-			(D.f[ DIR_PMP ])[ks  ] = mfaca;
-			(D.f[ DIR_PPM ])[kb  ] = mfaac;
-			(D.f[ DIR_PMM ])[kbs ] = mfacc;
-			(D.f[ DIR_MPP ])[kw  ] = mfcaa;	
-			(D.f[ DIR_MMP ])[ksw ] = mfcca;
-			(D.f[ DIR_MPM ])[kbw ] = mfcac;
-			(D.f[ DIR_MMM ])[kbsw] = mfccc;
+			(D.f[ dP00 ])[k   ] = mfabb;
+			(D.f[ dM00 ])[kw  ] = mfcbb;
+			(D.f[ d0P0 ])[k   ] = mfbab;
+			(D.f[ d0M0 ])[ks  ] = mfbcb;
+			(D.f[ d00P ])[k   ] = mfbba;
+			(D.f[ d00M ])[kb  ] = mfbbc;
+			(D.f[ dPP0 ])[k   ] = mfaab;
+			(D.f[ dMM0 ])[ksw ] = mfccb;
+			(D.f[ dPM0 ])[ks  ] = mfacb;
+			(D.f[ dMP0 ])[kw  ] = mfcab;
+			(D.f[ dP0P ])[k   ] = mfaba;
+			(D.f[ dM0M ])[kbw ] = mfcbc;
+			(D.f[ dP0M ])[kb  ] = mfabc;
+			(D.f[ dM0P ])[kw  ] = mfcba;
+			(D.f[ d0PP ])[k   ] = mfbaa;
+			(D.f[ d0MM ])[kbs ] = mfbcc;
+			(D.f[ d0PM ])[kb  ] = mfbac;
+			(D.f[ d0MP ])[ks  ] = mfbca;
+			(D.f[ d000 ])[k   ] = mfbbb;
+			(D.f[ dPPP ])[k   ] = mfaaa;
+			(D.f[ dPMP ])[ks  ] = mfaca;
+			(D.f[ dPPM ])[kb  ] = mfaac;
+			(D.f[ dPMM ])[kbs ] = mfacc;
+			(D.f[ dMPP ])[kw  ] = mfcaa;	
+			(D.f[ dMMP ])[ksw ] = mfcca;
+			(D.f[ dMPM ])[kbw ] = mfcac;
+			(D.f[ dMMM ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale_Device.cuh
similarity index 71%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale_Device.cuh
index 459c833e2bd3f0bfd2a0c214a9d366bcfb3a4b49..6f6cc80f498d707e97876b350ff7e53d8c713f32 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_WALE_CUMULANT_K17_COMP_H
-#define LB_KERNEL_WALE_CUMULANT_K17_COMP_H
+#ifndef K17CompressibleNavierStokesWale_Device_H
+#define K17CompressibleNavierStokesWale_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_WaleCumulantK17Comp(
+__global__ void K17CompressibleNavierStokesWale_Device(
 	real omega,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.cu
similarity index 66%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.cu
index 5fe0284e675785691e51a58e7e0869ba4164ad5f..5a39c27d51d0888918e43cb8f132a79d64bbca33 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.cu
@@ -1,14 +1,14 @@
-#include "WaleCumulantK17DebugComp.h"
+#include "K17CompressibleNavierStokesWaleDebug.h"
 
-#include "WaleCumulantK17DebugComp_Device.cuh"
+#include "K17CompressibleNavierStokesWaleDebug_Device.cuh"
 #include "Parameter/Parameter.h"
 
-std::shared_ptr<WaleCumulantK17DebugComp> WaleCumulantK17DebugComp::getNewInstance(std::shared_ptr<Parameter> para, int level)
+std::shared_ptr<K17CompressibleNavierStokesWaleDebug> K17CompressibleNavierStokesWaleDebug::getNewInstance(std::shared_ptr<Parameter> para, int level)
 {
-	return std::shared_ptr<WaleCumulantK17DebugComp>(new WaleCumulantK17DebugComp(para, level));
+	return std::shared_ptr<K17CompressibleNavierStokesWaleDebug>(new K17CompressibleNavierStokesWaleDebug(para, level));
 }
 
-void WaleCumulantK17DebugComp::run()
+void K17CompressibleNavierStokesWaleDebug::run()
 {
 	int size_Mat = (int)para->getParD(level)->numberOfNodes;
 	int numberOfThreads = para->getParD(level)->numberofthreads;
@@ -32,7 +32,7 @@ void WaleCumulantK17DebugComp::run()
 	dim3 grid(Grid1, Grid2, 1);
 	dim3 threads(numberOfThreads, 1, 1);
 
-	LB_Kernel_WaleCumulantK17DebugComp <<< grid, threads >>>(
+	K17CompressibleNavierStokesWaleDebug_Device <<< grid, threads >>>(
 		para->getParD(level)->omega,
 		para->getParD(level)->typeOfGridNode,
 		para->getParD(level)->neighborX,
@@ -60,10 +60,10 @@ void WaleCumulantK17DebugComp::run()
 		para->getForcesDev(),
         para->getQuadricLimitersDev(),
 		para->getParD(level)->isEvenTimestep);
-	getLastCudaError("LB_Kernel_WaleCumulantK17DebugComp execution failed");
+	getLastCudaError("K17CompressibleNavierStokesWaleDebug_Device execution failed");
 }
 
-WaleCumulantK17DebugComp::WaleCumulantK17DebugComp(std::shared_ptr<Parameter> para, int level)
+K17CompressibleNavierStokesWaleDebug::K17CompressibleNavierStokesWaleDebug(std::shared_ptr<Parameter> para, int level)
 {
 	this->para = para;
 	this->level = level;
@@ -73,6 +73,6 @@ WaleCumulantK17DebugComp::WaleCumulantK17DebugComp(std::shared_ptr<Parameter> pa
 	
 }
 
-WaleCumulantK17DebugComp::WaleCumulantK17DebugComp()
+K17CompressibleNavierStokesWaleDebug::K17CompressibleNavierStokesWaleDebug()
 {
 }
diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.h
new file mode 100644
index 0000000000000000000000000000000000000000..675d7f6b40db91a8b757a543c3997092023fbb6b
--- /dev/null
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.h
@@ -0,0 +1,17 @@
+#ifndef K17CompressibleNavierStokesWaleDebug_H
+#define K17CompressibleNavierStokesWaleDebug_H
+
+#include "Kernel/KernelImp.h"
+
+class K17CompressibleNavierStokesWaleDebug : public KernelImp
+{
+public:
+	static std::shared_ptr<K17CompressibleNavierStokesWaleDebug> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	K17CompressibleNavierStokesWaleDebug();
+	K17CompressibleNavierStokesWaleDebug(std::shared_ptr< Parameter> para, int level);
+
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug_Device.cu
similarity index 90%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug_Device.cu
index 0a48c68059d794ddd7aed85c266604d51809d978..6d1a0d219990fb53e190e47caa6b033062714247 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_WaleCumulantK17DebugComp(
+__global__ void K17CompressibleNavierStokesWaleDebug_Device(
 	real omega_in,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
@@ -57,63 +57,63 @@ __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM]= &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM]= &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM]= &DDStart[dPMM * size_Mat];
+				D.f[dMPM]= &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM]= &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM]= &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM]= &DDStart[dPMP * size_Mat];
+				D.f[dPMM]= &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -147,33 +147,33 @@ __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];
-			real mfabb = (D.f[DIR_M00])[kw];
-			real mfbcb = (D.f[DIR_0P0])[k];
-			real mfbab = (D.f[DIR_0M0])[ks];
-			real mfbbc = (D.f[DIR_00P])[k];
-			real mfbba = (D.f[DIR_00M])[kb];
-			real mfccb = (D.f[DIR_PP0])[k];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];
-			real mfacb = (D.f[DIR_MP0])[kw];
-			real mfcbc = (D.f[DIR_P0P])[k];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];
-			real mfabc = (D.f[DIR_M0P])[kw];
-			real mfbcc = (D.f[DIR_0PP])[k];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];
-			real mfbac = (D.f[DIR_0MP])[ks];
-			real mfbbb = (D.f[DIR_000])[k];
-			real mfccc = (D.f[DIR_PPP])[k];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks];
-			real mfacc = (D.f[DIR_MPP])[kw];
-			real mfcca = (D.f[DIR_PPM])[kb];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k];
+			real mfabb = (D.f[dM00])[kw];
+			real mfbcb = (D.f[d0P0])[k];
+			real mfbab = (D.f[d0M0])[ks];
+			real mfbbc = (D.f[d00P])[k];
+			real mfbba = (D.f[d00M])[kb];
+			real mfccb = (D.f[dPP0])[k];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];
+			real mfacb = (D.f[dMP0])[kw];
+			real mfcbc = (D.f[dP0P])[k];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];
+			real mfabc = (D.f[dM0P])[kw];
+			real mfbcc = (D.f[d0PP])[k];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];
+			real mfbac = (D.f[d0MP])[ks];
+			real mfbbb = (D.f[d000])[k];
+			real mfccc = (D.f[dPPP])[k];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks];
+			real mfacc = (D.f[dMPP])[kw];
+			real mfcca = (D.f[dPPM])[kb];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -430,9 +430,9 @@ __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 				//real SumSDsq = SumSd * SumSd;
 				real SumSsq = SumS;
 				real SumSDsq = SumSd;
-				//nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + smallSingle); //powf
-				//nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + smallSingle);     //pow
-				nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + smallSingle); //SMversion//
+				//nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + cSmallSingle); //powf
+				//nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + cSmallSingle);     //pow
+				nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + cSmallSingle); //SMversion//
 																																								/////////////////////////////////
 																																								//nuTurb = rho * powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4));
 																																								//nuTurb = powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4));
@@ -1158,33 +1158,33 @@ __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;
-			(D.f[DIR_M00])[kw] = mfcbb;
-			(D.f[DIR_0P0])[k] = mfbab;
-			(D.f[DIR_0M0])[ks] = mfbcb;
-			(D.f[DIR_00P])[k] = mfbba;
-			(D.f[DIR_00M])[kb] = mfbbc;
-			(D.f[DIR_PP0])[k] = mfaab;
-			(D.f[DIR_MM0])[ksw] = mfccb;
-			(D.f[DIR_PM0])[ks] = mfacb;
-			(D.f[DIR_MP0])[kw] = mfcab;
-			(D.f[DIR_P0P])[k] = mfaba;
-			(D.f[DIR_M0M])[kbw] = mfcbc;
-			(D.f[DIR_P0M])[kb] = mfabc;
-			(D.f[DIR_M0P])[kw] = mfcba;
-			(D.f[DIR_0PP])[k] = mfbaa;
-			(D.f[DIR_0MM])[kbs] = mfbcc;
-			(D.f[DIR_0PM])[kb] = mfbac;
-			(D.f[DIR_0MP])[ks] = mfbca;
-			(D.f[DIR_000])[k] = mfbbb;
-			(D.f[DIR_PPP])[k] = mfaaa;
-			(D.f[DIR_PMP])[ks] = mfaca;
-			(D.f[DIR_PPM])[kb] = mfaac;
-			(D.f[DIR_PMM])[kbs] = mfacc;
-			(D.f[DIR_MPP])[kw] = mfcaa;
-			(D.f[DIR_MMP])[ksw] = mfcca;
-			(D.f[DIR_MPM])[kbw] = mfcac;
-			(D.f[DIR_MMM])[kbsw] = mfccc;
+			(D.f[dP00])[k] = mfabb;
+			(D.f[dM00])[kw] = mfcbb;
+			(D.f[d0P0])[k] = mfbab;
+			(D.f[d0M0])[ks] = mfbcb;
+			(D.f[d00P])[k] = mfbba;
+			(D.f[d00M])[kb] = mfbbc;
+			(D.f[dPP0])[k] = mfaab;
+			(D.f[dMM0])[ksw] = mfccb;
+			(D.f[dPM0])[ks] = mfacb;
+			(D.f[dMP0])[kw] = mfcab;
+			(D.f[dP0P])[k] = mfaba;
+			(D.f[dM0M])[kbw] = mfcbc;
+			(D.f[dP0M])[kb] = mfabc;
+			(D.f[dM0P])[kw] = mfcba;
+			(D.f[d0PP])[k] = mfbaa;
+			(D.f[d0MM])[kbs] = mfbcc;
+			(D.f[d0PM])[kb] = mfbac;
+			(D.f[d0MP])[ks] = mfbca;
+			(D.f[d000])[k] = mfbbb;
+			(D.f[dPPP])[k] = mfaaa;
+			(D.f[dPMP])[ks] = mfaca;
+			(D.f[dPPM])[kb] = mfaac;
+			(D.f[dPMM])[kbs] = mfacc;
+			(D.f[dMPP])[kw] = mfcaa;
+			(D.f[dMMP])[ksw] = mfcca;
+			(D.f[dMPM])[kbw] = mfcac;
+			(D.f[dMMM])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug_Device.cuh
similarity index 75%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug_Device.cuh
index 50da48fa702862b71dc13b8b21b34cd1e2b39250..b8321b5c05e4c8e79321d2cc37b92020b9b159f8 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cuh
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_WALE_CUMULANT_K17_DEBUG_COMP_H
-#define LB_KERNEL_WALE_CUMULANT_K17_DEBUG_COMP_H
+#ifndef K17CompressibleNavierStokesWaleDebug_Device_H
+#define K17CompressibleNavierStokesWaleDebug_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_WaleCumulantK17DebugComp(
+__global__ void K17CompressibleNavierStokesWaleDebug_Device(
 	real omega_in,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes_Device.cu
similarity index 87%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes_Device.cu
index 169dedd3660ba9fc3c5e15bdfb60941bad2856c3..0388bd4e15fa12f465e3d534231b012f6f081790 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes_Device.cu
@@ -42,83 +42,83 @@ __global__ void K18CompressibleNavierStokes_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			Distributions6 G;
 			if (EvenOrOdd == true)
 			{
-				G.g[DIR_P00] = &G6[DIR_P00 * size_Mat];
-				G.g[DIR_M00] = &G6[DIR_M00 * size_Mat];
-				G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat];
-				G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat];
-				G.g[DIR_00P] = &G6[DIR_00P * size_Mat];
-				G.g[DIR_00M] = &G6[DIR_00M * size_Mat];
+				G.g[dP00] = &G6[dP00 * size_Mat];
+				G.g[dM00] = &G6[dM00 * size_Mat];
+				G.g[d0P0] = &G6[d0P0 * size_Mat];
+				G.g[d0M0] = &G6[d0M0 * size_Mat];
+				G.g[d00P] = &G6[d00P * size_Mat];
+				G.g[d00M] = &G6[d00M * size_Mat];
 			}
 			else
 			{
-				G.g[DIR_M00] = &G6[DIR_P00 * size_Mat];
-				G.g[DIR_P00] = &G6[DIR_M00 * size_Mat];
-				G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat];
-				G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat];
-				G.g[DIR_00M] = &G6[DIR_00P * size_Mat];
-				G.g[DIR_00P] = &G6[DIR_00M * size_Mat];
+				G.g[dM00] = &G6[dP00 * size_Mat];
+				G.g[dP00] = &G6[dM00 * size_Mat];
+				G.g[d0M0] = &G6[d0P0 * size_Mat];
+				G.g[d0P0] = &G6[d0M0 * size_Mat];
+				G.g[d00M] = &G6[d00P * size_Mat];
+				G.g[d00P] = &G6[d00M * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -152,43 +152,43 @@ __global__ void K18CompressibleNavierStokes_Device(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mgcbb = (G.g[DIR_P00])[k];
-			real mgabb = (G.g[DIR_M00])[kw];
-			real mgbcb = (G.g[DIR_0P0])[k];
-			real mgbab = (G.g[DIR_0M0])[ks];
-			real mgbbc = (G.g[DIR_00P])[k];
-			real mgbba = (G.g[DIR_00M])[kb];
+			real mgcbb = (G.g[dP00])[k];
+			real mgabb = (G.g[dM00])[kw];
+			real mgbcb = (G.g[d0P0])[k];
+			real mgbab = (G.g[d0M0])[ks];
+			real mgbbc = (G.g[d00P])[k];
+			real mgbba = (G.g[d00M])[kb];
 			real dxxux = c1o2 * (-mgcbb + mgabb);
 			real dyyuy = c1o2 * (-mgbcb + mgbab);
 			real dzzuz = c1o2 * (-mgbbc + mgbba);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];
-			real mfabb = (D.f[DIR_M00])[kw];
-			real mfbcb = (D.f[DIR_0P0])[k];
-			real mfbab = (D.f[DIR_0M0])[ks];
-			real mfbbc = (D.f[DIR_00P])[k];
-			real mfbba = (D.f[DIR_00M])[kb];
-			real mfccb = (D.f[DIR_PP0])[k];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];
-			real mfacb = (D.f[DIR_MP0])[kw];
-			real mfcbc = (D.f[DIR_P0P])[k];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];
-			real mfabc = (D.f[DIR_M0P])[kw];
-			real mfbcc = (D.f[DIR_0PP])[k];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];
-			real mfbac = (D.f[DIR_0MP])[ks];
-			real mfbbb = (D.f[DIR_000])[k];
-			real mfccc = (D.f[DIR_PPP])[k];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks];
-			real mfacc = (D.f[DIR_MPP])[kw];
-			real mfcca = (D.f[DIR_PPM])[kb];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k];
+			real mfabb = (D.f[dM00])[kw];
+			real mfbcb = (D.f[d0P0])[k];
+			real mfbab = (D.f[d0M0])[ks];
+			real mfbbc = (D.f[d00P])[k];
+			real mfbba = (D.f[d00M])[kb];
+			real mfccb = (D.f[dPP0])[k];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];
+			real mfacb = (D.f[dMP0])[kw];
+			real mfcbc = (D.f[dP0P])[k];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];
+			real mfabc = (D.f[dM0P])[kw];
+			real mfbcc = (D.f[d0PP])[k];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];
+			real mfbac = (D.f[d0MP])[ks];
+			real mfbbb = (D.f[d000])[k];
+			real mfccc = (D.f[dPPP])[k];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks];
+			real mfacc = (D.f[dMPP])[kw];
+			real mfcca = (D.f[dPPM])[kb];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -915,41 +915,41 @@ __global__ void K18CompressibleNavierStokes_Device(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;
-			(D.f[DIR_M00])[kw] = mfcbb;
-			(D.f[DIR_0P0])[k] = mfbab;
-			(D.f[DIR_0M0])[ks] = mfbcb;
-			(D.f[DIR_00P])[k] = mfbba;
-			(D.f[DIR_00M])[kb] = mfbbc;
-			(D.f[DIR_PP0])[k] = mfaab;
-			(D.f[DIR_MM0])[ksw] = mfccb;
-			(D.f[DIR_PM0])[ks] = mfacb;
-			(D.f[DIR_MP0])[kw] = mfcab;
-			(D.f[DIR_P0P])[k] = mfaba;
-			(D.f[DIR_M0M])[kbw] = mfcbc;
-			(D.f[DIR_P0M])[kb] = mfabc;
-			(D.f[DIR_M0P])[kw] = mfcba;
-			(D.f[DIR_0PP])[k] = mfbaa;
-			(D.f[DIR_0MM])[kbs] = mfbcc;
-			(D.f[DIR_0PM])[kb] = mfbac;
-			(D.f[DIR_0MP])[ks] = mfbca;
-			(D.f[DIR_000])[k] = mfbbb;
-			(D.f[DIR_PPP])[k] = mfaaa;
-			(D.f[DIR_PMP])[ks] = mfaca;
-			(D.f[DIR_PPM])[kb] = mfaac;
-			(D.f[DIR_PMM])[kbs] = mfacc;
-			(D.f[DIR_MPP])[kw] = mfcaa;
-			(D.f[DIR_MMP])[ksw] = mfcca;
-			(D.f[DIR_MPM])[kbw] = mfcac;
-			(D.f[DIR_MMM])[kbsw] = mfccc;
-			////////////////////////////////////////////////////////////////////////////////////
-
-			(G.g[DIR_P00])[k] = mgabb;
-			(G.g[DIR_M00])[kw] = mgcbb;
-			(G.g[DIR_0P0])[k] = mgbab;
-			(G.g[DIR_0M0])[ks] = mgbcb;
-			(G.g[DIR_00P])[k] = mgbba;
-			(G.g[DIR_00M])[kb] = mgbbc;
+			(D.f[dP00])[k] = mfabb;
+			(D.f[dM00])[kw] = mfcbb;
+			(D.f[d0P0])[k] = mfbab;
+			(D.f[d0M0])[ks] = mfbcb;
+			(D.f[d00P])[k] = mfbba;
+			(D.f[d00M])[kb] = mfbbc;
+			(D.f[dPP0])[k] = mfaab;
+			(D.f[dMM0])[ksw] = mfccb;
+			(D.f[dPM0])[ks] = mfacb;
+			(D.f[dMP0])[kw] = mfcab;
+			(D.f[dP0P])[k] = mfaba;
+			(D.f[dM0M])[kbw] = mfcbc;
+			(D.f[dP0M])[kb] = mfabc;
+			(D.f[dM0P])[kw] = mfcba;
+			(D.f[d0PP])[k] = mfbaa;
+			(D.f[d0MM])[kbs] = mfbcc;
+			(D.f[d0PM])[kb] = mfbac;
+			(D.f[d0MP])[ks] = mfbca;
+			(D.f[d000])[k] = mfbbb;
+			(D.f[dPPP])[k] = mfaaa;
+			(D.f[dPMP])[ks] = mfaca;
+			(D.f[dPPM])[kb] = mfaac;
+			(D.f[dPMM])[kbs] = mfacc;
+			(D.f[dMPP])[kw] = mfcaa;
+			(D.f[dMMP])[ksw] = mfcca;
+			(D.f[dMPM])[kbw] = mfcac;
+			(D.f[dMMM])[kbsw] = mfccc;
+			////////////////////////////////////////////////////////////////////////////////////
+
+			(G.g[dP00])[k] = mgabb;
+			(G.g[dM00])[kw] = mgcbb;
+			(G.g[d0P0])[k] = mgbab;
+			(G.g[d0M0])[ks] = mgbcb;
+			(G.g[d00P])[k] = mgbba;
+			(G.g[d00M])[kb] = mgbbc;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes_Device.cu
similarity index 87%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes_Device.cu
index d722baa512dea2d7cc01ebf4f986f3239345fb40..083692388f5607a4d47ad73feb09797db0f93f01 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes_Device.cu
@@ -42,83 +42,83 @@ __global__ void K20CompressibleNavierStokes_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			Distributions6 G;
 			if (EvenOrOdd == true)
 			{
-				G.g[DIR_P00] = &G6[DIR_P00 * size_Mat];
-				G.g[DIR_M00] = &G6[DIR_M00 * size_Mat];
-				G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat];
-				G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat];
-				G.g[DIR_00P] = &G6[DIR_00P * size_Mat];
-				G.g[DIR_00M] = &G6[DIR_00M * size_Mat];
+				G.g[dP00] = &G6[dP00 * size_Mat];
+				G.g[dM00] = &G6[dM00 * size_Mat];
+				G.g[d0P0] = &G6[d0P0 * size_Mat];
+				G.g[d0M0] = &G6[d0M0 * size_Mat];
+				G.g[d00P] = &G6[d00P * size_Mat];
+				G.g[d00M] = &G6[d00M * size_Mat];
 			}
 			else
 			{
-				G.g[DIR_M00] = &G6[DIR_P00 * size_Mat];
-				G.g[DIR_P00] = &G6[DIR_M00 * size_Mat];
-				G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat];
-				G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat];
-				G.g[DIR_00M] = &G6[DIR_00P * size_Mat];
-				G.g[DIR_00P] = &G6[DIR_00M * size_Mat];
+				G.g[dM00] = &G6[dP00 * size_Mat];
+				G.g[dP00] = &G6[dM00 * size_Mat];
+				G.g[d0M0] = &G6[d0P0 * size_Mat];
+				G.g[d0P0] = &G6[d0M0 * size_Mat];
+				G.g[d00M] = &G6[d00P * size_Mat];
+				G.g[d00P] = &G6[d00M * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -151,43 +151,43 @@ __global__ void K20CompressibleNavierStokes_Device(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mgcbb = (G.g[DIR_P00])[k];
-			real mgabb = (G.g[DIR_M00])[kw];
-			real mgbcb = (G.g[DIR_0P0])[k];
-			real mgbab = (G.g[DIR_0M0])[ks];
-			real mgbbc = (G.g[DIR_00P])[k];
-			real mgbba = (G.g[DIR_00M])[kb];
+			real mgcbb = (G.g[dP00])[k];
+			real mgabb = (G.g[dM00])[kw];
+			real mgbcb = (G.g[d0P0])[k];
+			real mgbab = (G.g[d0M0])[ks];
+			real mgbbc = (G.g[d00P])[k];
+			real mgbba = (G.g[d00M])[kb];
 			real dxuxdxux = c1o2 * (-mgcbb + mgabb);
 			real dyuydyuy = c1o2 * (-mgbcb + mgbab);
 			real dzuzdzuz = c1o2 * (-mgbbc + mgbba);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];
-			real mfabb = (D.f[DIR_M00])[kw];
-			real mfbcb = (D.f[DIR_0P0])[k];
-			real mfbab = (D.f[DIR_0M0])[ks];
-			real mfbbc = (D.f[DIR_00P])[k];
-			real mfbba = (D.f[DIR_00M])[kb];
-			real mfccb = (D.f[DIR_PP0])[k];
-			real mfaab = (D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];
-			real mfacb = (D.f[DIR_MP0])[kw];
-			real mfcbc = (D.f[DIR_P0P])[k];
-			real mfaba = (D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];
-			real mfabc = (D.f[DIR_M0P])[kw];
-			real mfbcc = (D.f[DIR_0PP])[k];
-			real mfbaa = (D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];
-			real mfbac = (D.f[DIR_0MP])[ks];
-			real mfbbb = (D.f[DIR_000])[k];
-			real mfccc = (D.f[DIR_PPP])[k];
-			real mfaac = (D.f[DIR_MMP])[ksw];
-			real mfcac = (D.f[DIR_PMP])[ks];
-			real mfacc = (D.f[DIR_MPP])[kw];
-			real mfcca = (D.f[DIR_PPM])[kb];
-			real mfaaa = (D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];
-			real mfaca = (D.f[DIR_MPM])[kbw];
+			real mfcbb = (D.f[dP00])[k];
+			real mfabb = (D.f[dM00])[kw];
+			real mfbcb = (D.f[d0P0])[k];
+			real mfbab = (D.f[d0M0])[ks];
+			real mfbbc = (D.f[d00P])[k];
+			real mfbba = (D.f[d00M])[kb];
+			real mfccb = (D.f[dPP0])[k];
+			real mfaab = (D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];
+			real mfacb = (D.f[dMP0])[kw];
+			real mfcbc = (D.f[dP0P])[k];
+			real mfaba = (D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];
+			real mfabc = (D.f[dM0P])[kw];
+			real mfbcc = (D.f[d0PP])[k];
+			real mfbaa = (D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];
+			real mfbac = (D.f[d0MP])[ks];
+			real mfbbb = (D.f[d000])[k];
+			real mfccc = (D.f[dPPP])[k];
+			real mfaac = (D.f[dMMP])[ksw];
+			real mfcac = (D.f[dPMP])[ks];
+			real mfacc = (D.f[dMPP])[kw];
+			real mfcca = (D.f[dPPM])[kb];
+			real mfaaa = (D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];
+			real mfaca = (D.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -919,41 +919,41 @@ __global__ void K20CompressibleNavierStokes_Device(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;
-			(D.f[DIR_M00])[kw] = mfcbb;
-			(D.f[DIR_0P0])[k] = mfbab;
-			(D.f[DIR_0M0])[ks] = mfbcb;
-			(D.f[DIR_00P])[k] = mfbba;
-			(D.f[DIR_00M])[kb] = mfbbc;
-			(D.f[DIR_PP0])[k] = mfaab;
-			(D.f[DIR_MM0])[ksw] = mfccb;
-			(D.f[DIR_PM0])[ks] = mfacb;
-			(D.f[DIR_MP0])[kw] = mfcab;
-			(D.f[DIR_P0P])[k] = mfaba;
-			(D.f[DIR_M0M])[kbw] = mfcbc;
-			(D.f[DIR_P0M])[kb] = mfabc;
-			(D.f[DIR_M0P])[kw] = mfcba;
-			(D.f[DIR_0PP])[k] = mfbaa;
-			(D.f[DIR_0MM])[kbs] = mfbcc;
-			(D.f[DIR_0PM])[kb] = mfbac;
-			(D.f[DIR_0MP])[ks] = mfbca;
-			(D.f[DIR_000])[k] = mfbbb;
-			(D.f[DIR_PPP])[k] = mfaaa;
-			(D.f[DIR_PMP])[ks] = mfaca;
-			(D.f[DIR_PPM])[kb] = mfaac;
-			(D.f[DIR_PMM])[kbs] = mfacc;
-			(D.f[DIR_MPP])[kw] = mfcaa;
-			(D.f[DIR_MMP])[ksw] = mfcca;
-			(D.f[DIR_MPM])[kbw] = mfcac;
-			(D.f[DIR_MMM])[kbsw] = mfccc;
-			////////////////////////////////////////////////////////////////////////////////////
-
-			(G.g[DIR_P00])[k] = mgabb;
-			(G.g[DIR_M00])[kw] = mgcbb;
-			(G.g[DIR_0P0])[k] = mgbab;
-			(G.g[DIR_0M0])[ks] = mgbcb;
-			(G.g[DIR_00P])[k] = mgbba;
-			(G.g[DIR_00M])[kb] = mgbbc;
+			(D.f[dP00])[k] = mfabb;
+			(D.f[dM00])[kw] = mfcbb;
+			(D.f[d0P0])[k] = mfbab;
+			(D.f[d0M0])[ks] = mfbcb;
+			(D.f[d00P])[k] = mfbba;
+			(D.f[d00M])[kb] = mfbbc;
+			(D.f[dPP0])[k] = mfaab;
+			(D.f[dMM0])[ksw] = mfccb;
+			(D.f[dPM0])[ks] = mfacb;
+			(D.f[dMP0])[kw] = mfcab;
+			(D.f[dP0P])[k] = mfaba;
+			(D.f[dM0M])[kbw] = mfcbc;
+			(D.f[dP0M])[kb] = mfabc;
+			(D.f[dM0P])[kw] = mfcba;
+			(D.f[d0PP])[k] = mfbaa;
+			(D.f[d0MM])[kbs] = mfbcc;
+			(D.f[d0PM])[kb] = mfbac;
+			(D.f[d0MP])[ks] = mfbca;
+			(D.f[d000])[k] = mfbbb;
+			(D.f[dPPP])[k] = mfaaa;
+			(D.f[dPMP])[ks] = mfaca;
+			(D.f[dPPM])[kb] = mfaac;
+			(D.f[dPMM])[kbs] = mfacc;
+			(D.f[dMPP])[kw] = mfcaa;
+			(D.f[dMMP])[ksw] = mfcca;
+			(D.f[dMPM])[kbw] = mfcac;
+			(D.f[dMMM])[kbsw] = mfccc;
+			////////////////////////////////////////////////////////////////////////////////////
+
+			(G.g[dP00])[k] = mgabb;
+			(G.g[dM00])[kw] = mgcbb;
+			(G.g[d0P0])[k] = mgbab;
+			(G.g[d0M0])[ks] = mgbcb;
+			(G.g[d00P])[k] = mgbba;
+			(G.g[d00M])[kb] = mgbbc;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes_Device.cu
similarity index 78%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes_Device.cu
index ae0f67fdb44884ffbcdf555fd48b275b64499c85..a9af77511b03a44858b23991375c6a947c39692b 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes_Device.cu
@@ -37,63 +37,63 @@ __global__ void M02CompressibleNavierStokes_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +126,33 @@ __global__ void M02CompressibleNavierStokes_Device(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real rho = (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca +
 				mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb +
@@ -739,33 +739,33 @@ __global__ void M02CompressibleNavierStokes_Device(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.cu b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.cu
new file mode 100644
index 0000000000000000000000000000000000000000..7d7211a97ee7988abbda78e3c1e054bba2b1bd73
--- /dev/null
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.cu
@@ -0,0 +1,40 @@
+#include "F16IncompressibleAdvectionDiffusion.h"
+
+#include "F16IncompressibleAdvectionDiffusion_Device.cuh"
+#include "Parameter/Parameter.h"
+#include <cuda_helper/CudaGrid.h>
+
+std::shared_ptr<F16IncompressibleAdvectionDiffusion> F16IncompressibleAdvectionDiffusion::getNewInstance(std::shared_ptr<Parameter> para, int level)
+{
+	return std::shared_ptr<F16IncompressibleAdvectionDiffusion>(new F16IncompressibleAdvectionDiffusion(para, level));
+}
+
+void F16IncompressibleAdvectionDiffusion::run()
+{
+    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
+
+    F16IncompressibleAdvectionDiffusion_Device<<< grid.grid, grid.threads >>>(
+        para->getParD(level)->diffusivity, 
+        para->getParD(level)->typeOfGridNode,
+        para->getParD(level)->neighborX, 
+        para->getParD(level)->neighborY, 
+        para->getParD(level)->neighborZ,
+        para->getParD(level)->distributions.f[0], 
+        para->getParD(level)->distributionsAD.f[0], 
+        para->getParD(level)->numberOfNodes,
+        para->getParD(level)->isEvenTimestep);
+    getLastCudaError("F16IncompressibleAdvectionDiffusion_Device execution failed");
+}
+
+F16IncompressibleAdvectionDiffusion::F16IncompressibleAdvectionDiffusion(std::shared_ptr<Parameter> para, int level)
+{
+	this->para = para;
+	this->level = level;
+
+	myPreProcessorTypes.push_back(InitIncompAD27);
+
+}
+
+F16IncompressibleAdvectionDiffusion::F16IncompressibleAdvectionDiffusion()
+{
+}
diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.h b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.h
new file mode 100644
index 0000000000000000000000000000000000000000..e7ebfac181a4f1cbeca97dc9349ef6107560730d
--- /dev/null
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.h
@@ -0,0 +1,17 @@
+#ifndef F16IncompressibleAdvectionDiffusion_H
+#define F16IncompressibleAdvectionDiffusion_H
+
+#include "Kernel/AdvectionDiffusionKernel.h"
+
+
+class F16IncompressibleAdvectionDiffusion : public AdvectionDiffusionKernel
+{
+public:
+	static std::shared_ptr<F16IncompressibleAdvectionDiffusion> getNewInstance(std::shared_ptr<Parameter> para, int level);
+	void run();
+
+private:
+	F16IncompressibleAdvectionDiffusion();
+	F16IncompressibleAdvectionDiffusion(std::shared_ptr< Parameter> para, int level);
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion_Device.cu
similarity index 65%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu
rename to src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion_Device.cu
index 4a5cbb1168940bd6bfc9d9a48568b5964b736ae4..a144744a7d5ead1e4fef12f35d5cc43b7620fa0f 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
+__global__ void F16IncompressibleAdvectionDiffusion_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
@@ -38,125 +38,125 @@ __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			Distributions27 D27;
 			if (EvenOrOdd == true)
 			{
-				D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes];
-				D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes];
-				D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes];
-				D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes];
-				D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes];
-				D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes];
-				D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes];
-				D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes];
-				D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes];
-				D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes];
-				D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes];
-				D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes];
-				D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes];
-				D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes];
-				D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes];
-				D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes];
-				D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes];
-				D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes];
-				D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-				D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes];
-				D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes];
-				D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes];
-				D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes];
-				D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes];
-				D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes];
-				D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes];
-				D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes];
+				D27.f[dP00] = &DD27[dP00 * numberOfLBnodes];
+				D27.f[dM00] = &DD27[dM00 * numberOfLBnodes];
+				D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes];
+				D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes];
+				D27.f[d00P] = &DD27[d00P * numberOfLBnodes];
+				D27.f[d00M] = &DD27[d00M * numberOfLBnodes];
+				D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes];
+				D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes];
+				D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes];
+				D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes];
+				D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes];
+				D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes];
+				D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes];
+				D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes];
+				D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes];
+				D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes];
+				D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes];
+				D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes];
+				D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+				D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes];
+				D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes];
+				D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes];
+				D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes];
+				D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes];
+				D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes];
+				D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes];
+				D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes];
-				D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes];
-				D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes];
-				D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes];
-				D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes];
-				D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes];
-				D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes];
-				D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes];
-				D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes];
-				D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes];
-				D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes];
-				D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes];
-				D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes];
-				D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes];
-				D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes];
-				D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes];
-				D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes];
-				D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes];
-				D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes];
-				D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes];
-				D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes];
-				D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes];
-				D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes];
-				D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes];
-				D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes];
-				D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes];
-				D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes];
+				D27.f[dM00] = &DD27[dP00 * numberOfLBnodes];
+				D27.f[dP00] = &DD27[dM00 * numberOfLBnodes];
+				D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes];
+				D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes];
+				D27.f[d00M] = &DD27[d00P * numberOfLBnodes];
+				D27.f[d00P] = &DD27[d00M * numberOfLBnodes];
+				D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes];
+				D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes];
+				D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes];
+				D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes];
+				D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes];
+				D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes];
+				D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes];
+				D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes];
+				D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes];
+				D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes];
+				D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes];
+				D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes];
+				D27.f[d000] = &DD27[d000 * numberOfLBnodes];
+				D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes];
+				D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes];
+				D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes];
+				D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes];
+				D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes];
+				D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes];
+				D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes];
+				D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -169,61 +169,61 @@ __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[DIR_P00])[k];//ke
-			real fE = (D.f[DIR_M00])[kw];
-			real fS = (D.f[DIR_0P0])[k];//kn
-			real fN = (D.f[DIR_0M0])[ks];
-			real fB = (D.f[DIR_00P])[k];//kt
-			real fT = (D.f[DIR_00M])[kb];
-			real fSW = (D.f[DIR_PP0])[k];//kne
-			real fNE = (D.f[DIR_MM0])[ksw];
-			real fNW = (D.f[DIR_PM0])[ks];//kse
-			real fSE = (D.f[DIR_MP0])[kw];//knw
-			real fBW = (D.f[DIR_P0P])[k];//kte
-			real fTE = (D.f[DIR_M0M])[kbw];
-			real fTW = (D.f[DIR_P0M])[kb];//kbe
-			real fBE = (D.f[DIR_M0P])[kw];//ktw
-			real fBS = (D.f[DIR_0PP])[k];//ktn
-			real fTN = (D.f[DIR_0MM])[kbs];
-			real fTS = (D.f[DIR_0PM])[kb];//kbn
-			real fBN = (D.f[DIR_0MP])[ks];//kts
-			//real fZERO = (D.f[DIR_000])[k];//kzero
-			real fBSW = (D.f[DIR_PPP])[k];//ktne
-			real fBNE = (D.f[DIR_MMP])[ksw];//ktsw
-			real fBNW = (D.f[DIR_PMP])[ks];//ktse
-			real fBSE = (D.f[DIR_MPP])[kw];//ktnw
-			real fTSW = (D.f[DIR_PPM])[kb];//kbne
-			real fTNE = (D.f[DIR_MMM])[kbsw];
-			real fTNW = (D.f[DIR_PMM])[kbs];//kbse
-			real fTSE = (D.f[DIR_MPM])[kbw];//kbnw
+			real fW = (D.f[dP00])[k];//ke
+			real fE = (D.f[dM00])[kw];
+			real fS = (D.f[d0P0])[k];//kn
+			real fN = (D.f[d0M0])[ks];
+			real fB = (D.f[d00P])[k];//kt
+			real fT = (D.f[d00M])[kb];
+			real fSW = (D.f[dPP0])[k];//kne
+			real fNE = (D.f[dMM0])[ksw];
+			real fNW = (D.f[dPM0])[ks];//kse
+			real fSE = (D.f[dMP0])[kw];//knw
+			real fBW = (D.f[dP0P])[k];//kte
+			real fTE = (D.f[dM0M])[kbw];
+			real fTW = (D.f[dP0M])[kb];//kbe
+			real fBE = (D.f[dM0P])[kw];//ktw
+			real fBS = (D.f[d0PP])[k];//ktn
+			real fTN = (D.f[d0MM])[kbs];
+			real fTS = (D.f[d0PM])[kb];//kbn
+			real fBN = (D.f[d0MP])[ks];//kts
+			//real fZERO = (D.f[d000])[k];//kzero
+			real fBSW = (D.f[dPPP])[k];//ktne
+			real fBNE = (D.f[dMMP])[ksw];//ktsw
+			real fBNW = (D.f[dPMP])[ks];//ktse
+			real fBSE = (D.f[dMPP])[kw];//ktnw
+			real fTSW = (D.f[dPPM])[kb];//kbne
+			real fTNE = (D.f[dMMM])[kbsw];
+			real fTNW = (D.f[dPMM])[kbs];//kbse
+			real fTSE = (D.f[dMPM])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
-										   //real f27E    =  (D27.f[DIR_P00])[k  ];//ke
-										   //real f27W    =  (D27.f[DIR_M00])[kw ];
-										   //real f27N    =  (D27.f[DIR_0P0])[k  ];//kn
-										   //real f27S    =  (D27.f[DIR_0M0])[ks ];
-										   //real f27T    =  (D27.f[DIR_00P])[k  ];//kt
-										   //real f27B    =  (D27.f[DIR_00M])[kb ];
-										   //real f27NE   =  (D27.f[DIR_PP0])[k  ];//kne
-										   //real f27SW   =  (D27.f[DIR_MM0])[ksw];
-										   //real f27SE   =  (D27.f[DIR_PM0])[ks ];//kse
-										   //real f27NW   =  (D27.f[DIR_MP0])[kw ];//knw
-										   //real f27TE   =  (D27.f[DIR_P0P])[k  ];//kte
-										   //real f27BW   =  (D27.f[DIR_M0M])[kbw];
-										   //real f27BE   =  (D27.f[DIR_P0M])[kb ];//kbe
-										   //real f27TW   =  (D27.f[DIR_M0P])[kw ];//ktw
-										   //real f27TN   =  (D27.f[DIR_0PP])[k  ];//ktn
-										   //real f27BS   =  (D27.f[DIR_0MM])[kbs];
-										   //real f27BN   =  (D27.f[DIR_0PM])[kb ];//kbn
-										   //real f27TS   =  (D27.f[DIR_0MP])[ks ];//kts
-										   //real f27ZERO =  (D27.f[DIR_000])[k  ];//kzero
-										   //real f27TNE  =  (D27.f[DIR_PPP])[k  ];//ktne
-										   //real f27TSW  =  (D27.f[DIR_MMP])[ksw];//ktsw
-										   //real f27TSE  =  (D27.f[DIR_PMP])[ks ];//ktse
-										   //real f27TNW  =  (D27.f[DIR_MPP])[kw ];//ktnw
-										   //real f27BNE  =  (D27.f[DIR_PPM])[kb ];//kbne
-										   //real f27BSW  =  (D27.f[DIR_MMM])[kbsw];
-										   //real f27BSE  =  (D27.f[DIR_PMM])[kbs];//kbse
-										   //real f27BNW  =  (D27.f[DIR_MPM])[kbw];//kbnw
+										   //real f27E    =  (D27.f[dP00])[k  ];//ke
+										   //real f27W    =  (D27.f[dM00])[kw ];
+										   //real f27N    =  (D27.f[d0P0])[k  ];//kn
+										   //real f27S    =  (D27.f[d0M0])[ks ];
+										   //real f27T    =  (D27.f[d00P])[k  ];//kt
+										   //real f27B    =  (D27.f[d00M])[kb ];
+										   //real f27NE   =  (D27.f[dPP0])[k  ];//kne
+										   //real f27SW   =  (D27.f[dMM0])[ksw];
+										   //real f27SE   =  (D27.f[dPM0])[ks ];//kse
+										   //real f27NW   =  (D27.f[dMP0])[kw ];//knw
+										   //real f27TE   =  (D27.f[dP0P])[k  ];//kte
+										   //real f27BW   =  (D27.f[dM0M])[kbw];
+										   //real f27BE   =  (D27.f[dP0M])[kb ];//kbe
+										   //real f27TW   =  (D27.f[dM0P])[kw ];//ktw
+										   //real f27TN   =  (D27.f[d0PP])[k  ];//ktn
+										   //real f27BS   =  (D27.f[d0MM])[kbs];
+										   //real f27BN   =  (D27.f[d0PM])[kb ];//kbn
+										   //real f27TS   =  (D27.f[d0MP])[ks ];//kts
+										   //real f27ZERO =  (D27.f[d000])[k  ];//kzero
+										   //real f27TNE  =  (D27.f[dPPP])[k  ];//ktne
+										   //real f27TSW  =  (D27.f[dMMP])[ksw];//ktsw
+										   //real f27TSE  =  (D27.f[dPMP])[ks ];//ktse
+										   //real f27TNW  =  (D27.f[dMPP])[kw ];//ktnw
+										   //real f27BNE  =  (D27.f[dPPM])[kb ];//kbne
+										   //real f27BSW  =  (D27.f[dMMM])[kbsw];
+										   //real f27BSE  =  (D27.f[dPMM])[kbs];//kbse
+										   //real f27BNW  =  (D27.f[dMPM])[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));
@@ -231,33 +231,33 @@ __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 										   ////////////////////////////////////////////////////////////////////////////////
 
 
-			real mfcbb = (D27.f[DIR_P00])[k];
-			real mfabb = (D27.f[DIR_M00])[kw];
-			real mfbcb = (D27.f[DIR_0P0])[k];
-			real mfbab = (D27.f[DIR_0M0])[ks];
-			real mfbbc = (D27.f[DIR_00P])[k];
-			real mfbba = (D27.f[DIR_00M])[kb];
-			real mfccb = (D27.f[DIR_PP0])[k];
-			real mfaab = (D27.f[DIR_MM0])[ksw];
-			real mfcab = (D27.f[DIR_PM0])[ks];
-			real mfacb = (D27.f[DIR_MP0])[kw];
-			real mfcbc = (D27.f[DIR_P0P])[k];
-			real mfaba = (D27.f[DIR_M0M])[kbw];
-			real mfcba = (D27.f[DIR_P0M])[kb];
-			real mfabc = (D27.f[DIR_M0P])[kw];
-			real mfbcc = (D27.f[DIR_0PP])[k];
-			real mfbaa = (D27.f[DIR_0MM])[kbs];
-			real mfbca = (D27.f[DIR_0PM])[kb];
-			real mfbac = (D27.f[DIR_0MP])[ks];
-			real mfbbb = (D27.f[DIR_000])[k];
-			real mfccc = (D27.f[DIR_PPP])[k];
-			real mfaac = (D27.f[DIR_MMP])[ksw];
-			real mfcac = (D27.f[DIR_PMP])[ks];
-			real mfacc = (D27.f[DIR_MPP])[kw];
-			real mfcca = (D27.f[DIR_PPM])[kb];
-			real mfaaa = (D27.f[DIR_MMM])[kbsw];
-			real mfcaa = (D27.f[DIR_PMM])[kbs];
-			real mfaca = (D27.f[DIR_MPM])[kbw];
+			real mfcbb = (D27.f[dP00])[k];
+			real mfabb = (D27.f[dM00])[kw];
+			real mfbcb = (D27.f[d0P0])[k];
+			real mfbab = (D27.f[d0M0])[ks];
+			real mfbbc = (D27.f[d00P])[k];
+			real mfbba = (D27.f[d00M])[kb];
+			real mfccb = (D27.f[dPP0])[k];
+			real mfaab = (D27.f[dMM0])[ksw];
+			real mfcab = (D27.f[dPM0])[ks];
+			real mfacb = (D27.f[dMP0])[kw];
+			real mfcbc = (D27.f[dP0P])[k];
+			real mfaba = (D27.f[dM0M])[kbw];
+			real mfcba = (D27.f[dP0M])[kb];
+			real mfabc = (D27.f[dM0P])[kw];
+			real mfbcc = (D27.f[d0PP])[k];
+			real mfbaa = (D27.f[d0MM])[kbs];
+			real mfbca = (D27.f[d0PM])[kb];
+			real mfbac = (D27.f[d0MP])[ks];
+			real mfbbb = (D27.f[d000])[k];
+			real mfccc = (D27.f[dPPP])[k];
+			real mfaac = (D27.f[dMMP])[ksw];
+			real mfcac = (D27.f[dPMP])[ks];
+			real mfacc = (D27.f[dMPP])[kw];
+			real mfcca = (D27.f[dPPM])[kb];
+			real mfaaa = (D27.f[dMMM])[kbsw];
+			real mfcaa = (D27.f[dPMM])[kbs];
+			real mfaca = (D27.f[dMPM])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			//Conc
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -301,33 +301,33 @@ __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[ DIR_P00   ])[k   ] = f27W    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);                                                                     
-			//(D27.f[ DIR_M00   ])[kw  ] = f27E    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);                                                                     
-			//(D27.f[ DIR_0P0   ])[k   ] = f27S    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
-			//(D27.f[ DIR_0M0   ])[ks  ] = f27N    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
-			//(D27.f[ DIR_00P   ])[k   ] = f27B    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
-			//(D27.f[ DIR_00M   ])[kb  ] = f27T    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
-			//(D27.f[ DIR_PP0  ])[k   ] = f27SW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
-			//(D27.f[ DIR_MM0  ])[ksw ] = f27NE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
-			//(D27.f[ DIR_PM0  ])[ks  ] = f27NW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
-			//(D27.f[ DIR_MP0  ])[kw  ] = f27SE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
-			//(D27.f[ DIR_P0P  ])[k   ] = f27BW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
-			//(D27.f[ DIR_M0M  ])[kbw ] = f27TE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
-			//(D27.f[ DIR_P0M  ])[kb  ] = f27TW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
-			//(D27.f[ DIR_M0P  ])[kw  ] = f27BE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
-			//(D27.f[ DIR_0PP  ])[k   ] = f27BS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
-			//(D27.f[ DIR_0MM  ])[kbs ] = f27TN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
-			//(D27.f[ DIR_0PM  ])[kb  ] = f27TS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
-			//(D27.f[ DIR_0MP  ])[ks  ] = f27BN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
-			//(D27.f[ DIR_000])[k   ] = f27ZERO *(one-omegaD)+omegaD* c8over27* ConcD*(one-cusq);
-			//(D27.f[ DIR_PPP ])[k   ] = f27BSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
-			//(D27.f[ DIR_PMP ])[ks  ] = f27BNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
-			//(D27.f[ DIR_PPM ])[kb  ] = f27TSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
-			//(D27.f[ DIR_PMM ])[kbs ] = f27TNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq);
-			//(D27.f[ DIR_MPP ])[kw  ] = f27BSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
-			//(D27.f[ DIR_MMP ])[ksw ] = f27BNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
-			//(D27.f[ DIR_MPM ])[kbw ] = f27TSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
-			//(D27.f[ DIR_MMM ])[kbsw] = f27TNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
+			//(D27.f[ dP00   ])[k   ] = f27W    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);                                                                     
+			//(D27.f[ dM00   ])[kw  ] = f27E    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);                                                                     
+			//(D27.f[ d0P0   ])[k   ] = f27S    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
+			//(D27.f[ d0M0   ])[ks  ] = f27N    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
+			//(D27.f[ d00P   ])[k   ] = f27B    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
+			//(D27.f[ d00M   ])[kb  ] = f27T    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
+			//(D27.f[ dPP0  ])[k   ] = f27SW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
+			//(D27.f[ dMM0  ])[ksw ] = f27NE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
+			//(D27.f[ dPM0  ])[ks  ] = f27NW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
+			//(D27.f[ dMP0  ])[kw  ] = f27SE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
+			//(D27.f[ dP0P  ])[k   ] = f27BW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
+			//(D27.f[ dM0M  ])[kbw ] = f27TE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
+			//(D27.f[ dP0M  ])[kb  ] = f27TW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
+			//(D27.f[ dM0P  ])[kw  ] = f27BE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
+			//(D27.f[ d0PP  ])[k   ] = f27BS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
+			//(D27.f[ d0MM  ])[kbs ] = f27TN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
+			//(D27.f[ d0PM  ])[kb  ] = f27TS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
+			//(D27.f[ d0MP  ])[ks  ] = f27BN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
+			//(D27.f[ d000])[k   ] = f27ZERO *(one-omegaD)+omegaD* c8over27* ConcD*(one-cusq);
+			//(D27.f[ dPPP ])[k   ] = f27BSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
+			//(D27.f[ dPMP ])[ks  ] = f27BNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
+			//(D27.f[ dPPM ])[kb  ] = f27TSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
+			//(D27.f[ dPMM ])[kbs ] = f27TNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq);
+			//(D27.f[ dMPP ])[kw  ] = f27BSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
+			//(D27.f[ dMMP ])[ksw ] = f27BNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
+			//(D27.f[ dMPM ])[kbw ] = f27TSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
+			//(D27.f[ dMMM ])[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
@@ -861,33 +861,33 @@ __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D27.f[DIR_P00])[k] = mfabb;
-			(D27.f[DIR_M00])[kw] = mfcbb;
-			(D27.f[DIR_0P0])[k] = mfbab;
-			(D27.f[DIR_0M0])[ks] = mfbcb;
-			(D27.f[DIR_00P])[k] = mfbba;
-			(D27.f[DIR_00M])[kb] = mfbbc;
-			(D27.f[DIR_PP0])[k] = mfaab;
-			(D27.f[DIR_MM0])[ksw] = mfccb;
-			(D27.f[DIR_PM0])[ks] = mfacb;
-			(D27.f[DIR_MP0])[kw] = mfcab;
-			(D27.f[DIR_P0P])[k] = mfaba;
-			(D27.f[DIR_M0M])[kbw] = mfcbc;
-			(D27.f[DIR_P0M])[kb] = mfabc;
-			(D27.f[DIR_M0P])[kw] = mfcba;
-			(D27.f[DIR_0PP])[k] = mfbaa;
-			(D27.f[DIR_0MM])[kbs] = mfbcc;
-			(D27.f[DIR_0PM])[kb] = mfbac;
-			(D27.f[DIR_0MP])[ks] = mfbca;
-			(D27.f[DIR_000])[k] = mfbbb;
-			(D27.f[DIR_PPP])[k] = mfaaa;
-			(D27.f[DIR_PMP])[ks] = mfaca;
-			(D27.f[DIR_PPM])[kb] = mfaac;
-			(D27.f[DIR_PMM])[kbs] = mfacc;
-			(D27.f[DIR_MPP])[kw] = mfcaa;
-			(D27.f[DIR_MMP])[ksw] = mfcca;
-			(D27.f[DIR_MPM])[kbw] = mfcac;
-			(D27.f[DIR_MMM])[kbsw] = mfccc;
+			(D27.f[dP00])[k] = mfabb;
+			(D27.f[dM00])[kw] = mfcbb;
+			(D27.f[d0P0])[k] = mfbab;
+			(D27.f[d0M0])[ks] = mfbcb;
+			(D27.f[d00P])[k] = mfbba;
+			(D27.f[d00M])[kb] = mfbbc;
+			(D27.f[dPP0])[k] = mfaab;
+			(D27.f[dMM0])[ksw] = mfccb;
+			(D27.f[dPM0])[ks] = mfacb;
+			(D27.f[dMP0])[kw] = mfcab;
+			(D27.f[dP0P])[k] = mfaba;
+			(D27.f[dM0M])[kbw] = mfcbc;
+			(D27.f[dP0M])[kb] = mfabc;
+			(D27.f[dM0P])[kw] = mfcba;
+			(D27.f[d0PP])[k] = mfbaa;
+			(D27.f[d0MM])[kbs] = mfbcc;
+			(D27.f[d0PM])[kb] = mfbac;
+			(D27.f[d0MP])[ks] = mfbca;
+			(D27.f[d000])[k] = mfbbb;
+			(D27.f[dPPP])[k] = mfaaa;
+			(D27.f[dPMP])[ks] = mfaca;
+			(D27.f[dPPM])[kb] = mfaac;
+			(D27.f[dPMM])[kbs] = mfacc;
+			(D27.f[dMPP])[kw] = mfcaa;
+			(D27.f[dMMP])[ksw] = mfcca;
+			(D27.f[dMPM])[kbw] = mfcac;
+			(D27.f[dMMM])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 
 		}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cuh b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion_Device.cuh
similarity index 56%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion_Device.cuh
index 3abee563f676910f422bba0930060c2a0b0c0e21..141e2fce7f8f2142550c17d11593ec707553981d 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cuh
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_AD_INCOMP_27_H
-#define LB_KERNEL_AD_INCOMP_27_H
+#ifndef F16IncompressibleAdvectionDiffusion_Device_H
+#define F16IncompressibleAdvectionDiffusion_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
+__global__ void F16IncompressibleAdvectionDiffusion_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.cu b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.cu
new file mode 100644
index 0000000000000000000000000000000000000000..fa1652d06e0137aae185a37938460e96234a36e4
--- /dev/null
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.cu
@@ -0,0 +1,40 @@
+#include "B12IncompressibleAdvectionDiffusionD3Q7.h"
+
+#include "B12IncompressibleAdvectionDiffusionD3Q7_Device.cuh"
+#include "Parameter/Parameter.h"
+#include <cuda_helper/CudaGrid.h>
+
+std::shared_ptr<B12IncompressibleAdvectionDiffusionD3Q7> B12IncompressibleAdvectionDiffusionD3Q7::getNewInstance(std::shared_ptr<Parameter> para, int level)
+{
+	return std::shared_ptr<B12IncompressibleAdvectionDiffusionD3Q7>(new B12IncompressibleAdvectionDiffusionD3Q7(para, level));
+}
+
+void B12IncompressibleAdvectionDiffusionD3Q7::run()
+{
+    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
+
+    B12IncompressibleAdvectionDiffusionD3Q7_Device<<< grid.grid, grid.threads >>>(
+        para->getParD(level)->diffusivity, 
+        para->getParD(level)->typeOfGridNode,
+        para->getParD(level)->neighborX, 
+        para->getParD(level)->neighborY, 
+        para->getParD(level)->neighborZ,
+        para->getParD(level)->distributions.f[0],
+        para->getParD(level)->distributionsAD7.f[0], 
+        para->getParD(level)->numberOfNodes,
+        para->getParD(level)->isEvenTimestep);
+    getLastCudaError("B12IncompressibleAdvectionDiffusionD3Q7_Device execution failed");
+}
+
+B12IncompressibleAdvectionDiffusionD3Q7::B12IncompressibleAdvectionDiffusionD3Q7(std::shared_ptr<Parameter> para, int level)
+{
+	this->para = para;
+	this->level = level;
+
+	myPreProcessorTypes.push_back(InitIncompAD7);
+
+}
+
+B12IncompressibleAdvectionDiffusionD3Q7::B12IncompressibleAdvectionDiffusionD3Q7()
+{
+}
diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.h b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.h
new file mode 100644
index 0000000000000000000000000000000000000000..52113c30f13795621dea0cc2ff1d624d9bc26f1f
--- /dev/null
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.h
@@ -0,0 +1,16 @@
+#ifndef B12IncompressibleAdvectionDiffusionD3Q7_H
+#define B12IncompressibleAdvectionDiffusionD3Q7_H
+
+#include "Kernel/AdvectionDiffusionKernel.h"
+
+class B12IncompressibleAdvectionDiffusionD3Q7 : public AdvectionDiffusionKernel
+{
+public:
+	static std::shared_ptr<B12IncompressibleAdvectionDiffusionD3Q7> getNewInstance(std::shared_ptr< Parameter> para, int level);
+	void run();
+
+private:
+	B12IncompressibleAdvectionDiffusionD3Q7();
+	B12IncompressibleAdvectionDiffusionD3Q7(std::shared_ptr< Parameter> para, int level);
+};
+#endif 
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7_Device.cu
similarity index 55%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu
rename to src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7_Device.cu
index 1d393e0c4a5f80fb331c109311876673a86a9d8d..0392674181f1384100bd512791e36bc84cb783e1 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7_Device.cu
@@ -6,7 +6,7 @@ using namespace vf::basics::constant;
 using namespace vf::lbm::dir;
 #include "math.h"
 
-__global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
+__global__ void B12IncompressibleAdvectionDiffusionD3Q7_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
@@ -38,63 +38,63 @@ __global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes];
-				D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes];
-				D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes];
-				D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes];
+				D.f[dM00] = &DDStart[dP00 * numberOfLBnodes];
+				D.f[dP00] = &DDStart[dM00 * numberOfLBnodes];
+				D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes];
+				D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes];
+				D.f[d00M] = &DDStart[d00P * numberOfLBnodes];
+				D.f[d00P] = &DDStart[d00M * numberOfLBnodes];
+				D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes];
+				D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes];
+				D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes];
+				D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes];
+				D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes];
+				D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes];
+				D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes];
+				D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes];
+				D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes];
+				D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes];
+				D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes];
+				D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes];
+				D.f[d000] = &DDStart[d000 * numberOfLBnodes];
+				D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes];
+				D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes];
+				D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes];
+				D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes];
+				D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes];
+				D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes];
+				D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes];
+				D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes];
 			}
 
 			Distributions7 D7;
@@ -129,60 +129,60 @@ __global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[DIR_P00])[k];//ke
-			real fE = (D.f[DIR_M00])[kw];
-			real fS = (D.f[DIR_0P0])[k];//kn
-			real fN = (D.f[DIR_0M0])[ks];
-			real fB = (D.f[DIR_00P])[k];//kt
-			real fT = (D.f[DIR_00M])[kb];
-			real fSW = (D.f[DIR_PP0])[k];//kne
-			real fNE = (D.f[DIR_MM0])[ksw];
-			real fNW = (D.f[DIR_PM0])[ks];//kse
-			real fSE = (D.f[DIR_MP0])[kw];//knw
-			real fBW = (D.f[DIR_P0P])[k];//kte
-			real fTE = (D.f[DIR_M0M])[kbw];
-			real fTW = (D.f[DIR_P0M])[kb];//kbe
-			real fBE = (D.f[DIR_M0P])[kw];//ktw
-			real fBS = (D.f[DIR_0PP])[k];//ktn
-			real fTN = (D.f[DIR_0MM])[kbs];
-			real fTS = (D.f[DIR_0PM])[kb];//kbn
-			real fBN = (D.f[DIR_0MP])[ks];//kts
-			//real fZERO = (D.f[DIR_000])[k];//kzero
-			real fBSW = (D.f[DIR_PPP])[k];//ktne
-			real fBNE = (D.f[DIR_MMP])[ksw];//ktsw
-			real fBNW = (D.f[DIR_PMP])[ks];//ktse
-			real fBSE = (D.f[DIR_MPP])[kw];//ktnw
-			real fTSW = (D.f[DIR_PPM])[kb];//kbne
-			real fTNE = (D.f[DIR_MMM])[kbsw];
-			real fTNW = (D.f[DIR_PMM])[kbs];//kbse
-			real fTSE = (D.f[DIR_MPM])[kbw];//kbnw
-										   //real fE    =  (D.f[DIR_P00])[k  ];//ke
-										   //real fW    =  (D.f[DIR_M00])[kw ];
-										   //real fN    =  (D.f[DIR_0P0])[k  ];//kn
-										   //real fS    =  (D.f[DIR_0M0])[ks ];
-										   //real fT    =  (D.f[DIR_00P])[k  ];//kt
-										   //real fB    =  (D.f[DIR_00M])[kb ];
-										   //real fNE   =  (D.f[DIR_PP0])[k  ];//kne
-										   //real fSW   =  (D.f[DIR_MM0])[ksw];
-										   //real fSE   =  (D.f[DIR_PM0])[ks ];//kse
-										   //real fNW   =  (D.f[DIR_MP0])[kw ];//knw
-										   //real fTE   =  (D.f[DIR_P0P])[k  ];//kte
-										   //real fBW   =  (D.f[DIR_M0M])[kbw];
-										   //real fBE   =  (D.f[DIR_P0M])[kb ];//kbe
-										   //real fTW   =  (D.f[DIR_M0P])[kw ];//ktw
-										   //real fTN   =  (D.f[DIR_0PP])[k  ];//ktn
-										   //real fBS   =  (D.f[DIR_0MM])[kbs];
-										   //real fBN   =  (D.f[DIR_0PM])[kb ];//kbn
-										   //real fTS   =  (D.f[DIR_0MP])[ks ];//kts
-										   //real fZERO =  (D.f[DIR_000])[k  ];//kzero
-										   //real fTNE   = (D.f[DIR_PPP])[k  ];//ktne
-										   //real fTSW   = (D.f[DIR_MMP])[ksw];//ktsw
-										   //real fTSE   = (D.f[DIR_PMP])[ks ];//ktse
-										   //real fTNW   = (D.f[DIR_MPP])[kw ];//ktnw
-										   //real fBNE   = (D.f[DIR_PPM])[kb ];//kbne
-										   //real fBSW   = (D.f[DIR_MMM])[kbsw];
-										   //real fBSE   = (D.f[DIR_PMM])[kbs];//kbse
-										   //real fBNW   = (D.f[DIR_MPM])[kbw];//kbnw
+			real fW = (D.f[dP00])[k];//ke
+			real fE = (D.f[dM00])[kw];
+			real fS = (D.f[d0P0])[k];//kn
+			real fN = (D.f[d0M0])[ks];
+			real fB = (D.f[d00P])[k];//kt
+			real fT = (D.f[d00M])[kb];
+			real fSW = (D.f[dPP0])[k];//kne
+			real fNE = (D.f[dMM0])[ksw];
+			real fNW = (D.f[dPM0])[ks];//kse
+			real fSE = (D.f[dMP0])[kw];//knw
+			real fBW = (D.f[dP0P])[k];//kte
+			real fTE = (D.f[dM0M])[kbw];
+			real fTW = (D.f[dP0M])[kb];//kbe
+			real fBE = (D.f[dM0P])[kw];//ktw
+			real fBS = (D.f[d0PP])[k];//ktn
+			real fTN = (D.f[d0MM])[kbs];
+			real fTS = (D.f[d0PM])[kb];//kbn
+			real fBN = (D.f[d0MP])[ks];//kts
+			//real fZERO = (D.f[d000])[k];//kzero
+			real fBSW = (D.f[dPPP])[k];//ktne
+			real fBNE = (D.f[dMMP])[ksw];//ktsw
+			real fBNW = (D.f[dPMP])[ks];//ktse
+			real fBSE = (D.f[dMPP])[kw];//ktnw
+			real fTSW = (D.f[dPPM])[kb];//kbne
+			real fTNE = (D.f[dMMM])[kbsw];
+			real fTNW = (D.f[dPMM])[kbs];//kbse
+			real fTSE = (D.f[dMPM])[kbw];//kbnw
+										   //real fE    =  (D.f[dP00])[k  ];//ke
+										   //real fW    =  (D.f[dM00])[kw ];
+										   //real fN    =  (D.f[d0P0])[k  ];//kn
+										   //real fS    =  (D.f[d0M0])[ks ];
+										   //real fT    =  (D.f[d00P])[k  ];//kt
+										   //real fB    =  (D.f[d00M])[kb ];
+										   //real fNE   =  (D.f[dPP0])[k  ];//kne
+										   //real fSW   =  (D.f[dMM0])[ksw];
+										   //real fSE   =  (D.f[dPM0])[ks ];//kse
+										   //real fNW   =  (D.f[dMP0])[kw ];//knw
+										   //real fTE   =  (D.f[dP0P])[k  ];//kte
+										   //real fBW   =  (D.f[dM0M])[kbw];
+										   //real fBE   =  (D.f[dP0M])[kb ];//kbe
+										   //real fTW   =  (D.f[dM0P])[kw ];//ktw
+										   //real fTN   =  (D.f[d0PP])[k  ];//ktn
+										   //real fBS   =  (D.f[d0MM])[kbs];
+										   //real fBN   =  (D.f[d0PM])[kb ];//kbn
+										   //real fTS   =  (D.f[d0MP])[ks ];//kts
+										   //real fZERO =  (D.f[d000])[k  ];//kzero
+										   //real fTNE   = (D.f[dPPP])[k  ];//ktne
+										   //real fTSW   = (D.f[dMMP])[ksw];//ktsw
+										   //real fTSE   = (D.f[dPMP])[ks ];//ktse
+										   //real fTNW   = (D.f[dMPP])[kw ];//ktnw
+										   //real fBNE   = (D.f[dPPM])[kb ];//kbne
+										   //real fBSW   = (D.f[dMMM])[kbsw];
+										   //real fBSE   = (D.f[dPMM])[kbs];//kbse
+										   //real fBNW   = (D.f[dMPM])[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/Mod7/ADIncomp7/ADIncomp7_Device.cuh b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7_Device.cuh
similarity index 54%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7_Device.cuh
index 845ecda946a4e45678082b72b5c74dc96e5810c5..e15d77a37351964e9fe3a23b45dfdec5289ea348 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cuh
+++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7_Device.cuh
@@ -1,10 +1,10 @@
-#ifndef LB_KERNEL_AD_INCOMP_7_H
-#define LB_KERNEL_AD_INCOMP_7_H
+#ifndef B12IncompressibleAdvectionDiffusionD3Q7_Device_H
+#define B12IncompressibleAdvectionDiffusionD3Q7_Device_H
 
 #include <DataTypes.h>
 #include <curand.h>
 
-__global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
+__global__ void B12IncompressibleAdvectionDiffusionD3Q7_Device(real diffusivity,
 	unsigned int* bcMatD,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cu
similarity index 77%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cu
index 49764bc07bc910911dff0668105252f75d062205..626f33bae48e880a14734281c884a4e0b309fac1 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cu
@@ -37,63 +37,63 @@ __global__ void B15IncompressibleNavierStokesBGKplus_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +126,33 @@ __global__ void B15IncompressibleNavierStokesBGKplus_Device(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -724,33 +724,33 @@ __global__ void B15IncompressibleNavierStokesBGKplus_Device(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cu
similarity index 61%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cu
index 1d343eb3020816fe3114538a5362162e4a86169e..8c8197b815f0060d5612656617c1236d0e0b01fc 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cu
@@ -37,63 +37,63 @@ __global__ void B92IncompressibleNavierStokes_Device(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +126,33 @@ __global__ void B92IncompressibleNavierStokes_Device(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fE = (D.f[DIR_P00])[k];//ke
-			real fW = (D.f[DIR_M00])[kw];
-			real fN = (D.f[DIR_0P0])[k];//kn
-			real fS = (D.f[DIR_0M0])[ks];
-			real fT = (D.f[DIR_00P])[k];//kt
-			real fB = (D.f[DIR_00M])[kb];
-			real fNE = (D.f[DIR_PP0])[k];//kne
-			real fSW = (D.f[DIR_MM0])[ksw];
-			real fSE = (D.f[DIR_PM0])[ks];//kse
-			real fNW = (D.f[DIR_MP0])[kw];//knw
-			real fTE = (D.f[DIR_P0P])[k];//kte
-			real fBW = (D.f[DIR_M0M])[kbw];
-			real fBE = (D.f[DIR_P0M])[kb];//kbe
-			real fTW = (D.f[DIR_M0P])[kw];//ktw
-			real fTN = (D.f[DIR_0PP])[k];//ktn
-			real fBS = (D.f[DIR_0MM])[kbs];
-			real fBN = (D.f[DIR_0PM])[kb];//kbn
-			real fTS = (D.f[DIR_0MP])[ks];//kts
-			real fZERO = (D.f[DIR_000])[k];//kzero
-			real fTNE = (D.f[DIR_PPP])[k];//ktne
-			real fTSW = (D.f[DIR_MMP])[ksw];//ktsw
-			real fTSE = (D.f[DIR_PMP])[ks];//ktse
-			real fTNW = (D.f[DIR_MPP])[kw];//ktnw
-			real fBNE = (D.f[DIR_PPM])[kb];//kbne
-			real fBSW = (D.f[DIR_MMM])[kbsw];
-			real fBSE = (D.f[DIR_PMM])[kbs];//kbse
-			real fBNW = (D.f[DIR_MPM])[kbw];//kbnw
+			real fE = (D.f[dP00])[k];//ke
+			real fW = (D.f[dM00])[kw];
+			real fN = (D.f[d0P0])[k];//kn
+			real fS = (D.f[d0M0])[ks];
+			real fT = (D.f[d00P])[k];//kt
+			real fB = (D.f[d00M])[kb];
+			real fNE = (D.f[dPP0])[k];//kne
+			real fSW = (D.f[dMM0])[ksw];
+			real fSE = (D.f[dPM0])[ks];//kse
+			real fNW = (D.f[dMP0])[kw];//knw
+			real fTE = (D.f[dP0P])[k];//kte
+			real fBW = (D.f[dM0M])[kbw];
+			real fBE = (D.f[dP0M])[kb];//kbe
+			real fTW = (D.f[dM0P])[kw];//ktw
+			real fTN = (D.f[d0PP])[k];//ktn
+			real fBS = (D.f[d0MM])[kbs];
+			real fBN = (D.f[d0PM])[kb];//kbn
+			real fTS = (D.f[d0MP])[ks];//kts
+			real fZERO = (D.f[d000])[k];//kzero
+			real fTNE = (D.f[dPPP])[k];//ktne
+			real fTSW = (D.f[dMMP])[ksw];//ktsw
+			real fTSE = (D.f[dPMP])[ks];//ktse
+			real fTNW = (D.f[dMPP])[kw];//ktnw
+			real fBNE = (D.f[dPPM])[kb];//kbne
+			real fBSW = (D.f[dMMM])[kbsw];
+			real fBSE = (D.f[dPMM])[kbs];//kbse
+			real fBNW = (D.f[dMPM])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
 
 
@@ -206,33 +206,33 @@ __global__ void B92IncompressibleNavierStokes_Device(real omega,
 
 
 			//////////////////////////////////////////////////////////////////////////                            
-			(D.f[DIR_P00])[k] = fW;
-			(D.f[DIR_M00])[kw] = fE;
-			(D.f[DIR_0P0])[k] = fS;
-			(D.f[DIR_0M0])[ks] = fN;
-			(D.f[DIR_00P])[k] = fB;
-			(D.f[DIR_00M])[kb] = fT;
-			(D.f[DIR_PP0])[k] = fSW;
-			(D.f[DIR_MM0])[ksw] = fNE;
-			(D.f[DIR_PM0])[ks] = fNW;
-			(D.f[DIR_MP0])[kw] = fSE;
-			(D.f[DIR_P0P])[k] = fBW;
-			(D.f[DIR_M0M])[kbw] = fTE;
-			(D.f[DIR_P0M])[kb] = fTW;
-			(D.f[DIR_M0P])[kw] = fBE;
-			(D.f[DIR_0PP])[k] = fBS;
-			(D.f[DIR_0MM])[kbs] = fTN;
-			(D.f[DIR_0PM])[kb] = fTS;
-			(D.f[DIR_0MP])[ks] = fBN;
-			(D.f[DIR_000])[k] = fZERO;
-			(D.f[DIR_PPP])[k] = fBSW;
-			(D.f[DIR_PMP])[ks] = fBNW;
-			(D.f[DIR_PPM])[kb] = fTSW;
-			(D.f[DIR_PMM])[kbs] = fTNW;
-			(D.f[DIR_MPP])[kw] = fBSE;
-			(D.f[DIR_MMP])[ksw] = fBNE;
-			(D.f[DIR_MPM])[kbw] = fTSE;
-			(D.f[DIR_MMM])[kbsw] = fTNE;
+			(D.f[dP00])[k] = fW;
+			(D.f[dM00])[kw] = fE;
+			(D.f[d0P0])[k] = fS;
+			(D.f[d0M0])[ks] = fN;
+			(D.f[d00P])[k] = fB;
+			(D.f[d00M])[kb] = fT;
+			(D.f[dPP0])[k] = fSW;
+			(D.f[dMM0])[ksw] = fNE;
+			(D.f[dPM0])[ks] = fNW;
+			(D.f[dMP0])[kw] = fSE;
+			(D.f[dP0P])[k] = fBW;
+			(D.f[dM0M])[kbw] = fTE;
+			(D.f[dP0M])[kb] = fTW;
+			(D.f[dM0P])[kw] = fBE;
+			(D.f[d0PP])[k] = fBS;
+			(D.f[d0MM])[kbs] = fTN;
+			(D.f[d0PM])[kb] = fTS;
+			(D.f[d0MP])[ks] = fBN;
+			(D.f[d000])[k] = fZERO;
+			(D.f[dPPP])[k] = fBSW;
+			(D.f[dPMP])[ks] = fBNW;
+			(D.f[dPPM])[kb] = fTSW;
+			(D.f[dPMM])[kbs] = fTNW;
+			(D.f[dMPP])[kw] = fBSE;
+			(D.f[dMMP])[ksw] = fBNE;
+			(D.f[dMPM])[kbw] = fTSE;
+			(D.f[dMMM])[kbsw] = fTNE;
 			//////////////////////////////////////////////////////////////////////////                            
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/C06/C06IncompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/C06/C06IncompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/C06/C06IncompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/C06/C06IncompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/C06/CascadeIncompSP27_Device.cu
similarity index 78%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/C06/CascadeIncompSP27_Device.cu
index 3f51dd4044887803a1b6b5f2470639ce4537b8d2..15f5ba6495639325d28bc35ebe999b89134b7393 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/C06/CascadeIncompSP27_Device.cu
@@ -38,63 +38,63 @@ __global__ void C06IncompressibleNavierStokes_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -127,33 +127,33 @@ __global__ void C06IncompressibleNavierStokes_Device(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -729,33 +729,33 @@ __global__ void C06IncompressibleNavierStokes_Device(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/C06/CascadeIncompSP27_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/C06/CascadeIncompSP27_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu
similarity index 82%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu
index 6c91d9bfc4cf2c39b812a493986da29b45165407..dd404227d1cdc1e0ce0903f3ad5b2da3a5943635 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu
@@ -41,63 +41,63 @@ __global__ void K15IncompressibleNavierStokesIsoCheck_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -130,33 +130,33 @@ __global__ void K15IncompressibleNavierStokesIsoCheck_Device(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -974,33 +974,33 @@ __global__ void K15IncompressibleNavierStokesIsoCheck_Device(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu
similarity index 85%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu
index 082a5dc3882a498838d174e0c7b24ae134dca622..7694553b7885449fc965bfbf3721e986313d3d60 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu
@@ -43,63 +43,63 @@ __global__ void K15IncompressibleNavierStokesRotatingVelocityField_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -160,33 +160,33 @@ __global__ void K15IncompressibleNavierStokesRotatingVelocityField_Device(
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//Ship
 			real coord0X = 281.125f;//7.5f;
@@ -1162,33 +1162,33 @@ __global__ void K15IncompressibleNavierStokesRotatingVelocityField_Device(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cu
similarity index 85%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cu
index 5b666eb73c7a19d472d26f2047b04462f83d0d23..4438d69ecd25ac21dc6f944f450cfa1b61e273e3 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cu
@@ -38,63 +38,63 @@ __global__ void K15IncompressibleNavierStokes_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -155,33 +155,33 @@ __global__ void K15IncompressibleNavierStokes_Device(
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -1207,33 +1207,33 @@ __global__ void K15IncompressibleNavierStokes_Device(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes.cu
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes.h
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes_Device.cu
similarity index 77%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cu
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes_Device.cu
index 4c94c960e0bf9521c558ede0c00076f2bfe82ce4..c5af4088d5f4ba2d67e0eed5e8e919fbaaa9153f 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cu
+++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes_Device.cu
@@ -38,63 +38,63 @@ __global__ void M02IncompressibleNavierStokes_Device(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dP00] = &DDStart[dP00 * size_Mat];
+				D.f[dM00] = &DDStart[dM00 * size_Mat];
+				D.f[d0P0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0M0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00P] = &DDStart[d00P * size_Mat];
+				D.f[d00M] = &DDStart[d00M * size_Mat];
+				D.f[dPP0] = &DDStart[dPP0 * size_Mat];
+				D.f[dMM0] = &DDStart[dMM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dPM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dMP0 * size_Mat];
+				D.f[dP0P] = &DDStart[dP0P * size_Mat];
+				D.f[dM0M] = &DDStart[dM0M * size_Mat];
+				D.f[dP0M] = &DDStart[dP0M * size_Mat];
+				D.f[dM0P] = &DDStart[dM0P * size_Mat];
+				D.f[d0PP] = &DDStart[d0PP * size_Mat];
+				D.f[d0MM] = &DDStart[d0MM * size_Mat];
+				D.f[d0PM] = &DDStart[d0PM * size_Mat];
+				D.f[d0MP] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dPPP] = &DDStart[dPPP * size_Mat];
+				D.f[dMMP] = &DDStart[dMMP * size_Mat];
+				D.f[dPMP] = &DDStart[dPMP * size_Mat];
+				D.f[dMPP] = &DDStart[dMPP * size_Mat];
+				D.f[dPPM] = &DDStart[dPPM * size_Mat];
+				D.f[dMMM] = &DDStart[dMMM * size_Mat];
+				D.f[dPMM] = &DDStart[dPMM * size_Mat];
+				D.f[dMPM] = &DDStart[dMPM * size_Mat];
 			}
 			else
 			{
-				D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat];
-				D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat];
-				D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat];
-				D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat];
-				D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat];
-				D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat];
-				D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat];
-				D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat];
-				D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat];
-				D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat];
-				D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat];
-				D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat];
-				D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat];
-				D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat];
-				D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat];
-				D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat];
-				D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat];
-				D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat];
-				D.f[DIR_000] = &DDStart[DIR_000 * size_Mat];
-				D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat];
-				D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat];
-				D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat];
-				D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat];
-				D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat];
-				D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat];
-				D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat];
-				D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat];
+				D.f[dM00] = &DDStart[dP00 * size_Mat];
+				D.f[dP00] = &DDStart[dM00 * size_Mat];
+				D.f[d0M0] = &DDStart[d0P0 * size_Mat];
+				D.f[d0P0] = &DDStart[d0M0 * size_Mat];
+				D.f[d00M] = &DDStart[d00P * size_Mat];
+				D.f[d00P] = &DDStart[d00M * size_Mat];
+				D.f[dMM0] = &DDStart[dPP0 * size_Mat];
+				D.f[dPP0] = &DDStart[dMM0 * size_Mat];
+				D.f[dMP0] = &DDStart[dPM0 * size_Mat];
+				D.f[dPM0] = &DDStart[dMP0 * size_Mat];
+				D.f[dM0M] = &DDStart[dP0P * size_Mat];
+				D.f[dP0P] = &DDStart[dM0M * size_Mat];
+				D.f[dM0P] = &DDStart[dP0M * size_Mat];
+				D.f[dP0M] = &DDStart[dM0P * size_Mat];
+				D.f[d0MM] = &DDStart[d0PP * size_Mat];
+				D.f[d0PP] = &DDStart[d0MM * size_Mat];
+				D.f[d0MP] = &DDStart[d0PM * size_Mat];
+				D.f[d0PM] = &DDStart[d0MP * size_Mat];
+				D.f[d000] = &DDStart[d000 * size_Mat];
+				D.f[dMMM] = &DDStart[dPPP * size_Mat];
+				D.f[dPPM] = &DDStart[dMMP * size_Mat];
+				D.f[dMPM] = &DDStart[dPMP * size_Mat];
+				D.f[dPMM] = &DDStart[dMPP * size_Mat];
+				D.f[dMMP] = &DDStart[dPPM * size_Mat];
+				D.f[dPPP] = &DDStart[dMMM * size_Mat];
+				D.f[dMPP] = &DDStart[dPMM * size_Mat];
+				D.f[dPMP] = &DDStart[dMPM * size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -127,33 +127,33 @@ __global__ void M02IncompressibleNavierStokes_Device(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[DIR_P00])[k];//[ke   ];// +  c2over27 ;(D.f[DIR_P00])[k  ];//ke
-			real mfabb = (D.f[DIR_M00])[kw];//[kw   ];// +  c2over27 ;(D.f[DIR_M00])[kw ];
-			real mfbcb = (D.f[DIR_0P0])[k];//[kn   ];// +  c2over27 ;(D.f[DIR_0P0])[k  ];//kn
-			real mfbab = (D.f[DIR_0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[DIR_0M0])[ks ];
-			real mfbbc = (D.f[DIR_00P])[k];//[kt   ];// +  c2over27 ;(D.f[DIR_00P])[k  ];//kt
-			real mfbba = (D.f[DIR_00M])[kb];//[kb   ];// +  c2over27 ;(D.f[DIR_00M])[kb ];
-			real mfccb = (D.f[DIR_PP0])[k];//[kne  ];// +  c1over54 ;(D.f[DIR_PP0])[k  ];//kne
-			real mfaab = (D.f[DIR_MM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[DIR_MM0])[ksw];
-			real mfcab = (D.f[DIR_PM0])[ks];//[kse  ];// +  c1over54 ;(D.f[DIR_PM0])[ks ];//kse
-			real mfacb = (D.f[DIR_MP0])[kw];//[knw  ];// +  c1over54 ;(D.f[DIR_MP0])[kw ];//knw
-			real mfcbc = (D.f[DIR_P0P])[k];//[kte  ];// +  c1over54 ;(D.f[DIR_P0P])[k  ];//kte
-			real mfaba = (D.f[DIR_M0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[DIR_M0M])[kbw];
-			real mfcba = (D.f[DIR_P0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[DIR_P0M])[kb ];//kbe
-			real mfabc = (D.f[DIR_M0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[DIR_M0P])[kw ];//ktw
-			real mfbcc = (D.f[DIR_0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[DIR_0PP])[k  ];//ktn
-			real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[DIR_0MM])[kbs];
-			real mfbca = (D.f[DIR_0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[DIR_0PM])[kb ];//kbn
-			real mfbac = (D.f[DIR_0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[DIR_0MP])[ks ];//kts
-			real mfbbb = (D.f[DIR_000])[k];//[kzero];// +  c8over27 ;(D.f[DIR_000])[k  ];//kzero
-			real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// +  c1over216;(D.f[DIR_PPP])[k  ];//ktne
-			real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// +  c1over216;(D.f[DIR_MMP])[ksw];//ktsw
-			real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// +  c1over216;(D.f[DIR_PMP])[ks ];//ktse
-			real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// +  c1over216;(D.f[DIR_MPP])[kw ];//ktnw
-			real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// +  c1over216;(D.f[DIR_PPM])[kb ];//kbne
-			real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[DIR_MMM])[kbsw];
-			real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// +  c1over216;(D.f[DIR_PMM])[kbs];//kbse
-			real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// +  c1over216;(D.f[DIR_MPM])[kbw];//kbnw
+			real mfcbb = (D.f[dP00])[k];//[ke   ];// +  c2over27 ;(D.f[dP00])[k  ];//ke
+			real mfabb = (D.f[dM00])[kw];//[kw   ];// +  c2over27 ;(D.f[dM00])[kw ];
+			real mfbcb = (D.f[d0P0])[k];//[kn   ];// +  c2over27 ;(D.f[d0P0])[k  ];//kn
+			real mfbab = (D.f[d0M0])[ks];//[ks   ];// +  c2over27 ;(D.f[d0M0])[ks ];
+			real mfbbc = (D.f[d00P])[k];//[kt   ];// +  c2over27 ;(D.f[d00P])[k  ];//kt
+			real mfbba = (D.f[d00M])[kb];//[kb   ];// +  c2over27 ;(D.f[d00M])[kb ];
+			real mfccb = (D.f[dPP0])[k];//[kne  ];// +  c1over54 ;(D.f[dPP0])[k  ];//kne
+			real mfaab = (D.f[dMM0])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dMM0])[ksw];
+			real mfcab = (D.f[dPM0])[ks];//[kse  ];// +  c1over54 ;(D.f[dPM0])[ks ];//kse
+			real mfacb = (D.f[dMP0])[kw];//[knw  ];// +  c1over54 ;(D.f[dMP0])[kw ];//knw
+			real mfcbc = (D.f[dP0P])[k];//[kte  ];// +  c1over54 ;(D.f[dP0P])[k  ];//kte
+			real mfaba = (D.f[dM0M])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dM0M])[kbw];
+			real mfcba = (D.f[dP0M])[kb];//[kbe  ];// +  c1over54 ;(D.f[dP0M])[kb ];//kbe
+			real mfabc = (D.f[dM0P])[kw];//[ktw  ];// +  c1over54 ;(D.f[dM0P])[kw ];//ktw
+			real mfbcc = (D.f[d0PP])[k];//[ktn  ];// +  c1over54 ;(D.f[d0PP])[k  ];//ktn
+			real mfbaa = (D.f[d0MM])[kbs];//[kbs  ];// +  c1over54 ;(D.f[d0MM])[kbs];
+			real mfbca = (D.f[d0PM])[kb];//[kbn  ];// +  c1over54 ;(D.f[d0PM])[kb ];//kbn
+			real mfbac = (D.f[d0MP])[ks];//[kts  ];// +  c1over54 ;(D.f[d0MP])[ks ];//kts
+			real mfbbb = (D.f[d000])[k];//[kzero];// +  c8over27 ;(D.f[d000])[k  ];//kzero
+			real mfccc = (D.f[dPPP])[k];//[ktne ];// +  c1over216;(D.f[dPPP])[k  ];//ktne
+			real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// +  c1over216;(D.f[dMMP])[ksw];//ktsw
+			real mfcac = (D.f[dPMP])[ks];//[ktse ];// +  c1over216;(D.f[dPMP])[ks ];//ktse
+			real mfacc = (D.f[dMPP])[kw];//[ktnw ];// +  c1over216;(D.f[dMPP])[kw ];//ktnw
+			real mfcca = (D.f[dPPM])[kb];//[kbne ];// +  c1over216;(D.f[dPPM])[kb ];//kbne
+			real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// +  c1over216;(D.f[dMMM])[kbsw];
+			real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// +  c1over216;(D.f[dPMM])[kbs];//kbse
+			real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// +  c1over216;(D.f[dMPM])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -732,33 +732,33 @@ __global__ void M02IncompressibleNavierStokes_Device(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ DIR_P00   ])[k   ]                                                                     
-			(D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ DIR_M00   ])[kw  ]                                                                   
-			(D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ DIR_0P0   ])[k   ]
-			(D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ DIR_0M0   ])[ks  ]
-			(D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ DIR_00P   ])[k   ]
-			(D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ DIR_00M   ])[kb  ]
-			(D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ DIR_PP0  ])[k   ]
-			(D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ DIR_MM0  ])[ksw ]
-			(D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ DIR_PM0  ])[ks  ]
-			(D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ DIR_MP0  ])[kw  ]
-			(D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ DIR_P0P  ])[k   ]
-			(D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ DIR_M0M  ])[kbw ]
-			(D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ DIR_P0M  ])[kb  ]
-			(D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ DIR_M0P  ])[kw  ]
-			(D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ DIR_0PP  ])[k   ]
-			(D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ DIR_0MM  ])[kbs ]
-			(D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ DIR_0PM  ])[kb  ]
-			(D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ DIR_0MP  ])[ks  ]
-			(D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ DIR_000])[k   ]
-			(D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ DIR_PPP ])[k   ]
-			(D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ DIR_PMP ])[ks  ]
-			(D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ DIR_PPM ])[kb  ]
-			(D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ DIR_PMM ])[kbs ]
-			(D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ DIR_MPP ])[kw  ]
-			(D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ DIR_MMP ])[ksw ]
-			(D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ DIR_MPM ])[kbw ]
-			(D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ DIR_MMM ])[kbsw]
+			(D.f[dP00])[k] = mfabb;//(D.f[ dP00   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dP00   ])[k   ]                                                                     
+			(D.f[dM00])[kw] = mfcbb;//(D.f[ dM00   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dM00   ])[kw  ]                                                                   
+			(D.f[d0P0])[k] = mfbab;//(D.f[ d0P0   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ d0P0   ])[k   ]
+			(D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ d0M0   ])[ks  ]
+			(D.f[d00P])[k] = mfbba;//(D.f[ d00P   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ d00P   ])[k   ]
+			(D.f[d00M])[kb] = mfbbc;//(D.f[ d00M   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ d00M   ])[kb  ]
+			(D.f[dPP0])[k] = mfaab;//(D.f[ dPP0  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dPP0  ])[k   ]
+			(D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dMM0  ])[ksw ]
+			(D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dPM0  ])[ks  ]
+			(D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dMP0  ])[kw  ]
+			(D.f[dP0P])[k] = mfaba;//(D.f[ dP0P  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dP0P  ])[k   ]
+			(D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dM0M  ])[kbw ]
+			(D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dP0M  ])[kb  ]
+			(D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dM0P  ])[kw  ]
+			(D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ d0PP  ])[k   ]
+			(D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ d0MM  ])[kbs ]
+			(D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ d0PM  ])[kb  ]
+			(D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ d0MP  ])[ks  ]
+			(D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ d000])[k   ]
+			(D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dPPP ])[k   ]
+			(D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dPMP ])[ks  ]
+			(D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dPPM ])[kb  ]
+			(D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dPMM ])[kbs ]
+			(D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dMPP ])[kw  ]
+			(D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dMMP ])[ksw ]
+			(D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dMPM ])[kbw ]
+			(D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dMMM ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cuh
rename to src/gpu/core/Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h b/src/gpu/core/Kernel/Kernel.h
similarity index 88%
rename from src/gpu/VirtualFluids_GPU/Kernel/Kernel.h
rename to src/gpu/core/Kernel/Kernel.h
index d83901a0f7d6a7df8120673a4b14371a6e935aef..bb944d6ed876a2fa6b6582eb2995cc20d1430d85 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h
+++ b/src/gpu/core/Kernel/Kernel.h
@@ -17,7 +17,6 @@ public:
     virtual void run() = 0;
     virtual void runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIdx=CudaStreamIndex::Legacy) = 0;
 
-    virtual bool checkParameter()                                = 0;
     virtual std::vector<PreProcessorType> getPreProcessorTypes() = 0;
 };
 #endif
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h b/src/gpu/core/Kernel/KernelFactory/KernelFactory.h
similarity index 66%
rename from src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h
rename to src/gpu/core/Kernel/KernelFactory/KernelFactory.h
index 26c68f74a3650ea43261fdd66b567ecbd391cb10..05755f0eba9c0c0c0bd8fdbab2a2ce4f4590293b 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h
+++ b/src/gpu/core/Kernel/KernelFactory/KernelFactory.h
@@ -6,19 +6,19 @@
 #include <string>
 #include <vector>
 
-#include "VirtualFluids_GPU_export.h"
+
 
 class Kernel;
-class ADKernel;
+class AdvectionDiffusionKernel;
 class Parameter;
 class PorousMedia;
 
-class VIRTUALFLUIDS_GPU_EXPORT KernelFactory
+class KernelFactory
 {
 public:
     virtual ~KernelFactory() = default;
 	virtual std::vector< std::shared_ptr< Kernel>> makeKernels(std::shared_ptr<Parameter> para) = 0;
-	virtual std::vector< std::shared_ptr< ADKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para) = 0;
+	virtual std::vector< std::shared_ptr< AdvectionDiffusionKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para) = 0;
 	
 	virtual void setPorousMedia(std::vector<std::shared_ptr<PorousMedia>> pm) = 0;
 };
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.cpp
similarity index 50%
rename from src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp
rename to src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.cpp
index 1ae8519670a93dcf6c3e3b1ca7a160e98167d27d..aa4e80920f7613a7e470e7cc90fdd258a6f90279 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp
+++ b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.cpp
@@ -4,59 +4,49 @@
 
 #include "Parameter/Parameter.h"
 
-#include "Kernel/Utilities/KernelTypes.h"
+#include "Kernel/KernelTypes.h"
 
 //LBM kernel (compressible)
-#include "Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.h"
-#include "Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h"
-#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h"
-#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h"
-#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h"
-#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h"
-#include "Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h"
-#include "Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.h"
+#include "Kernel/Compressible/NavierStokes/M02/M02CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/C06/C06CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/K08/K08CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesBulkViscosity.h"
+#include "Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokesSponge.h"
+#include "Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesChimeraLegacy.h"
+#include "Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesBulkViscosity.h"
+#include "Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h"
+#include "Kernel/Compressible/NavierStokes/K18/K18CompressibleNavierStokes.h"
+#include "Kernel/Compressible/NavierStokes/K20/K20CompressibleNavierStokes.h"
 
 //LBM kernel (inkompressible)
-#include "Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.h"
-#include "Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.h"
-#include "Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h"
-#include "Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h"
-#include "Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h"
-#include "Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.h"
-#include "Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h"
+#include "Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.h"
+#include "Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.h"
+#include "Kernel/Incompressible/NavierStokes/C06/C06IncompressibleNavierStokes.h"
+#include "Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesRotatingVelocityField.h"
+#include "Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokesIsoCheck.h"
+#include "Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.h"
+#include "Kernel/Incompressible/NavierStokes/M02/M02IncompressibleNavierStokes.h"
 
 //advection diffusion kernel (compressible)
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h"
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h"
+#include "Kernel/Compressible/AdvectionDiffusion/D3Q27/F16/F16CompressibleAdvectionDiffusion.h"
+#include "Kernel/Compressible/AdvectionDiffusion/D3Q7/B12/B12CompressibleAdvectionDiffusionD3Q7.h"
 
 //advection diffusion kernel (incompressible)
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h"
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h"
+#include "Kernel/Incompressible/AdvectionDiffusion/D3Q27/F16/F16IncompressibleAdvectionDiffusion.h"
+#include "Kernel/Incompressible/AdvectionDiffusion/D3Q7/B12/B12IncompressibleAdvectionDiffusionD3Q7.h"
 
 //porous media kernel
-#include "Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h"
-
-//wale kernel
-#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h"
-#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h"
-#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h"
-#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h"
-
-//strategies
-#include "Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h"
-#include "Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h"
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h"
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h"
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h"
-#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h"
-#include "Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h"
-#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h"
+#include "Kernel/Compressible/NavierStokes/K15PorousMedia/K15CompressibleNavierStokesPorousMedia.h"
+
+//wale kernel+
+#include "Kernel/Compressible/NavierStokes/K17Wale/K17CompressibleNavierStokesWale.h"
+#include "Kernel/Compressible/NavierStokes/K17WaleDebug/K17CompressibleNavierStokesWaleDebug.h"
+#include "Kernel/Compressible/NavierStokes/K15Wale/K15CompressibleNavierStokesWale.h"
+#include "Kernel/Compressible/NavierStokes/K15WaleSM/K15CompressibleNavierStokesWaleBySoniMalav.h"
 
 #include <lbm/collision/TurbulentViscosity.h>
 
@@ -75,9 +65,9 @@ std::vector<std::shared_ptr<Kernel>> KernelFactoryImp::makeKernels(std::shared_p
     return kernels;
 }
 
-std::vector<std::shared_ptr<ADKernel>> KernelFactoryImp::makeAdvDifKernels(std::shared_ptr<Parameter> para)
+std::vector<std::shared_ptr<AdvectionDiffusionKernel>> KernelFactoryImp::makeAdvDifKernels(std::shared_ptr<Parameter> para)
 {
-    std::vector< std::shared_ptr< ADKernel>> aDKernels;
+    std::vector< std::shared_ptr< AdvectionDiffusionKernel>> aDKernels;
     for (int level = 0; level <= para->getMaxLevel(); level++)
         aDKernels.push_back(makeAdvDifKernel(para, para->getADKernel(), level));
     return aDKernels;
@@ -97,29 +87,21 @@ std::shared_ptr<Kernel> KernelFactoryImp::makeKernel(std::shared_ptr<Parameter>
 {
     VF_LOG_INFO("Instantiating Kernel: {}", kernel);
     std::shared_ptr<KernelImp> newKernel;
-    std::shared_ptr<CheckParameterStrategy> checkStrategy;
 
     if (kernel == collisionKernel::compressible::BGK) {
         newKernel     = B92CompressibleNavierStokes::getNewInstance(para, level);               // compressible
-        checkStrategy = FluidFlowCompStrategy::getInstance();                   //      ||
     } else if (kernel == collisionKernel::compressible::BGKPlus) {
         newKernel     = B15CompressibleNavierStokesBGKplus::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::MRT) {
         newKernel     = M02CompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::Cascade) {
         newKernel     = C06CompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::CumulantClassic) {
         newKernel     = K08CompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::K17CompressibleNavierStokesBulkViscosity) {
         newKernel     = K17CompressibleNavierStokesBulkViscosity::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::K17CompressibleNavierStokesChimeraLegacy) {
         newKernel     = K17CompressibleNavierStokesChimeraLegacy::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::K17CompressibleNavierStokes){
         switch(para->getTurbulenceModel())
         {
@@ -139,98 +121,66 @@ std::shared_ptr<Kernel> KernelFactoryImp::makeKernel(std::shared_ptr<Parameter>
                 throw std::runtime_error("Unknown turbulence model!");
             break;
         }
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::CumulantAll4SP27) {
         newKernel     = K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::CumulantK18) {
         newKernel     = K18CompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::CumulantK20) {
         newKernel     = K20CompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::K15CompressibleNavierStokes) {
         newKernel     = K15CompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::K15CompressibleNavierStokesBulk) {
         newKernel     = K15CompressibleNavierStokesBulkViscosity::getNewInstance(para, level);
-        checkStrategy = FluidFlowCompStrategy::getInstance();
     } else if (kernel == collisionKernel::compressible::K15CompressibleNavierStokesSponge) { //     /\      //
         newKernel     = K15CompressibleNavierStokesSponge::getNewInstance(para, level);     //     ||
-        checkStrategy = FluidFlowCompStrategy::getInstance();                   // compressible
     }                                                                           //===============
     else if (  kernel == collisionKernel::incompressible::BGK) {                // incompressible
         newKernel     = B92IncompressibleNavierStokes::getNewInstance(para, level);             //     ||
-        checkStrategy = FluidFlowIncompStrategy::getInstance();                 //     \/
     } else if (kernel == collisionKernel::incompressible::BGKPlus) {
         newKernel     = B15IncompressibleNavierStokesBGKplus::getNewInstance(para, level);
-        checkStrategy = FluidFlowIncompStrategy::getInstance();
     } else if (kernel == collisionKernel::incompressible::MRT) {
         newKernel     = M02IncompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowIncompStrategy::getInstance();
     } else if (kernel == collisionKernel::incompressible::Cascade) {
         newKernel     = C06IncompressibleNavierStokes::getNewInstance(para, level);
-        checkStrategy = FluidFlowIncompStrategy::getInstance();
     } else if (kernel == collisionKernel::incompressible::Cumulant1h) {
         newKernel     = K15IncompressibleNavierStokesRotatingVelocityField::getNewInstance(para, level);
-        checkStrategy = FluidFlowIncompStrategy::getInstance();
-    //} else if (kernel == collisionKernel::incompressible::CumulantIsometric) {
-    //    newKernel     = K15IncompressibleNavierStokesIsoTest::getNewInstance(para, level);
-    //    checkStrategy = FluidFlowIncompStrategy::getInstance();
     } else if (kernel == collisionKernel::incompressible::CumulantK15) {          //     /\      //
         newKernel     = K15IncompressibleNavierStokes::getNewInstance(para, level);           //     ||
-        checkStrategy = FluidFlowIncompStrategy::getInstance();                   // incompressible
     }                                                                             //===============
     else if (kernel == collisionKernel::porousMedia::CumulantOne) {               // porous media
-        newKernel     = PMCumulantOneCompSP27::getNewInstance(para, pm, level);   //     ||
-        checkStrategy = PMFluidFlowCompStrategy::getInstance();                   // porous media
+        newKernel     = K15CompressibleNavierStokesPorousMedia::getNewInstance(para, pm, level);   //     ||
     }                                                                             //===============
     else if (kernel == collisionKernel::wale::CumulantK17) {                      // wale model
-        newKernel     = WaleCumulantK17Comp::getNewInstance(para, level);         //     ||
-        checkStrategy = WaleFluidFlowCompStrategy::getInstance();                 //     \/
+        newKernel     = K17CompressibleNavierStokesWale::getNewInstance(para, level);         //     ||
     } else if (kernel == collisionKernel::wale::CumulantK17Debug) {
-        newKernel     = WaleCumulantK17DebugComp::getNewInstance(para, level);
-        checkStrategy = WaleFluidFlowCompStrategy::getInstance();
+        newKernel     = K17CompressibleNavierStokesWaleDebug::getNewInstance(para, level);
     } else if (kernel == collisionKernel::wale::CumulantK15) {
-        newKernel     = WaleCumulantK15Comp::getNewInstance(para, level);
-        checkStrategy = WaleFluidFlowCompStrategy::getInstance();
+        newKernel     = K15CompressibleNavierStokesWale::getNewInstance(para, level);
     } else if (kernel == collisionKernel::wale::CumulantK15SoniMalav) {              //     /\      //
-        newKernel     = WaleBySoniMalavCumulantK15Comp::getNewInstance(para, level); //     ||
-        checkStrategy = WaleFluidFlowCompStrategy::getInstance();                    // wale model
+        newKernel     = K15CompressibleNavierStokesWaleBySoniMalav::getNewInstance(para, level); //     ||
     }                                                                                //===============
     else {
         throw std::runtime_error("KernelFactory does not know the KernelType.");
     }
-    newKernel->setCheckParameterStrategy(checkStrategy);
     para->setKernelNeedsFluidNodeIndicesToRun(newKernel->getKernelUsesFluidNodeIndices());
     return newKernel;
 }
 
-std::shared_ptr<ADKernel> KernelFactoryImp::makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level)
+std::shared_ptr<AdvectionDiffusionKernel> KernelFactoryImp::makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level)
 {
-    std::shared_ptr<ADKernel> newKernel;
-    std::shared_ptr<CheckParameterStrategy> checkStrategy;
+    std::shared_ptr<AdvectionDiffusionKernel> newKernel;
 
     if (kernel == "ADComp27") {
-        newKernel     = ADComp27::getNewInstance(para, level);
-        checkStrategy = ADMod27CompStrategy::getInstance();
+        newKernel     = F16CompressibleAdvectionDiffusion::getNewInstance(para, level);
     } else if(kernel == "ADComp7") {
-        newKernel     = ADComp7::getNewInstance(para, level);
-        checkStrategy = ADMod7CompStrategy::getInstance();
+        newKernel     = B12CompressibleAdvectionDiffusionD3Q7::getNewInstance(para, level);
     } else if (kernel == "ADIncomp27") {
-        newKernel     = ADIncomp27::getNewInstance(para, level);
-        checkStrategy = ADMod7IncompStrategy::getInstance();
+        newKernel     = F16IncompressibleAdvectionDiffusion::getNewInstance(para, level);
     } else if (kernel == "ADIncomp7") {
-        newKernel     = ADIncomp7::getNewInstance(para, level);
-        checkStrategy = ADMod7IncompStrategy::getInstance();
+        newKernel     = B12IncompressibleAdvectionDiffusionD3Q7::getNewInstance(para, level);
     } else {
         throw std::runtime_error("KernelFactory does not know the KernelType.");
     }
 
-    if (newKernel) {
-        newKernel->setCheckParameterStrategy(checkStrategy);
-        return newKernel;
-    }
-    else
-        throw  std::runtime_error("KernelFactory does not know the KernelType.");
+    return newKernel;
 }
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.h
similarity index 66%
rename from src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h
rename to src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.h
index 064e9fbddfce4ddc71195536bfd5c20cd88660ee..3f1539413f69c178c1cba68f42cb6121e235ea62 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h
+++ b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.h
@@ -5,16 +5,16 @@
 
 class PorousMedia;
 
-class VIRTUALFLUIDS_GPU_EXPORT KernelFactoryImp : public KernelFactory
+class KernelFactoryImp : public KernelFactory
 {
 public:
 	std::vector< std::shared_ptr< Kernel>> makeKernels(std::shared_ptr<Parameter> para);
-	std::vector< std::shared_ptr< ADKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para);
+	std::vector< std::shared_ptr< AdvectionDiffusionKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para);
 
 	void setPorousMedia(std::vector<std::shared_ptr<PorousMedia>> pm);
 
 	std::shared_ptr<Kernel> makeKernel(std::shared_ptr<Parameter> para, std::string kernel, int level);
-	std::shared_ptr<ADKernel> makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level);
+	std::shared_ptr<AdvectionDiffusionKernel> makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level);
 	void setKernelAtLevel(std::vector< std::shared_ptr<Kernel>> kernels, std::shared_ptr<Parameter> para, std::string kernel, int level);
 
 	std::vector<std::shared_ptr<PorousMedia>> pm;
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.cpp b/src/gpu/core/Kernel/KernelImp.cpp
similarity index 66%
rename from src/gpu/VirtualFluids_GPU/Kernel/KernelImp.cpp
rename to src/gpu/core/Kernel/KernelImp.cpp
index 328cf8db260bc0092cb2081998961d1e9fb17233..aee14eb73fd5324980fb73827ab81f344e1d402c 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.cpp
+++ b/src/gpu/core/Kernel/KernelImp.cpp
@@ -2,28 +2,17 @@
 
 #include "LBM/LB.h" 
 
-#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h"
-
 
 void KernelImp::runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIndex)
 {
     printf("Method not implemented for this Kernel \n");
 }
 
-bool KernelImp::checkParameter() { 
-    return checkStrategy->checkParameter(para);
-}
-
 std::vector<PreProcessorType> KernelImp::getPreProcessorTypes() 
 { 
     return myPreProcessorTypes;
 }
 
-void KernelImp::setCheckParameterStrategy(std::shared_ptr<CheckParameterStrategy> strategy)
-{
-    this->checkStrategy = strategy;
-}
-
 bool KernelImp::getKernelUsesFluidNodeIndices(){
     return this->kernelUsesFluidNodeIndices;
 }
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.h b/src/gpu/core/Kernel/KernelImp.h
similarity index 80%
rename from src/gpu/VirtualFluids_GPU/Kernel/KernelImp.h
rename to src/gpu/core/Kernel/KernelImp.h
index 00d392c9e8ff7b8c55b75f50327946b0140a3d68..c3397dc7fa23a54334d10c328f6ca1cf9cfc03ee 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.h
+++ b/src/gpu/core/Kernel/KernelImp.h
@@ -9,7 +9,6 @@
 
 #include <cuda_helper/CudaGrid.h>
 
-class CheckParameterStrategy;
 class Parameter;
 class CudaStreamManager; 
 class KernelImp : public Kernel
@@ -18,10 +17,8 @@ public:
     virtual void run() = 0;
     virtual void runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIndex=CudaStreamIndex::Legacy);
 
-    bool checkParameter();
     std::vector<PreProcessorType> getPreProcessorTypes();
 
-    void setCheckParameterStrategy(std::shared_ptr<CheckParameterStrategy> strategy);
     bool getKernelUsesFluidNodeIndices();
 
 protected:
@@ -29,7 +26,6 @@ protected:
     KernelImp();
 
     std::shared_ptr<Parameter> para;
-    std::shared_ptr<CheckParameterStrategy> checkStrategy;
     int level;
     std::vector<PreProcessorType> myPreProcessorTypes;
     vf::cuda::CudaGrid cudaGrid;
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h b/src/gpu/core/Kernel/KernelTypes.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h
rename to src/gpu/core/Kernel/KernelTypes.h
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp b/src/gpu/core/KernelManager/ADKernelManager.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
rename to src/gpu/core/KernelManager/ADKernelManager.cpp
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h b/src/gpu/core/KernelManager/ADKernelManager.h
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
rename to src/gpu/core/KernelManager/ADKernelManager.h
index d961452575b905acb96fbc1c30ff0d5e71af2722..30a3b0530d842fdb4a97bfa59d554c983952a579 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
+++ b/src/gpu/core/KernelManager/ADKernelManager.h
@@ -33,9 +33,9 @@
 #ifndef ADVECTION_DIFFUSION_H
 #define ADVECTION_DIFFUSION_H
 
-#include "DataTypes.h"
-#include "PointerDefinitions.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/DataTypes.h>
+#include <basics/PointerDefinitions.h>
+
 
 //! \brief Class forwarding for Parameter, CudaMemoryManager
 class Parameter;
@@ -43,7 +43,7 @@ class CudaMemoryManager;
 
 //! \class ADKernelManager
 //! \brief manage the advection diffusion kernel calls
-class VIRTUALFLUIDS_GPU_EXPORT ADKernelManager
+class ADKernelManager
 {
 
 public:
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp b/src/gpu/core/KernelManager/BCKernelManager.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp
rename to src/gpu/core/KernelManager/BCKernelManager.cpp
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h b/src/gpu/core/KernelManager/BCKernelManager.h
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
rename to src/gpu/core/KernelManager/BCKernelManager.h
index 339100e6b5307e8e60f8d0846560bf89c6eea1a1..1961f25f4f9d6ca899d07158aaeeb7caab2b2738 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
+++ b/src/gpu/core/KernelManager/BCKernelManager.h
@@ -38,8 +38,8 @@
 #include <string>
 
 #include "LBM/LB.h"
-#include "PointerDefinitions.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/PointerDefinitions.h>
+
 
 
 class CudaMemoryManager;
@@ -54,7 +54,7 @@ using precursorBoundaryCondition = std::function<void(LBMSimulationParameter *,
 //! \class BCKernelManager
 //! \brief manage the cuda kernel calls to boundary conditions
 //! \details This class stores the boundary conditions and manages the calls to the boundary condition kernels.
-class VIRTUALFLUIDS_GPU_EXPORT BCKernelManager
+class BCKernelManager
 {
 public:
     //! Class constructor
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp b/src/gpu/core/KernelManager/BCKernelManagerTest.cpp
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp
rename to src/gpu/core/KernelManager/BCKernelManagerTest.cpp
index 6b429d2d9c03e546286d3d2b0ced3612c0a4649a..3cb6138ca203f70fb65dad44cb1d317c098cb3b2 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp
+++ b/src/gpu/core/KernelManager/BCKernelManagerTest.cpp
@@ -5,7 +5,7 @@
 #include "BCKernelManager.h"
 #include "Factories/BoundaryConditionFactory.h"
 #include "Parameter/Parameter.h"
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 
 class BCKernelManagerTest_BCsNotSpecified : public testing::Test
 {
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp b/src/gpu/core/KernelManager/GridScalingKernelManager.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp
rename to src/gpu/core/KernelManager/GridScalingKernelManager.cpp
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h b/src/gpu/core/KernelManager/GridScalingKernelManager.h
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h
rename to src/gpu/core/KernelManager/GridScalingKernelManager.h
index 0c24801506b9a19985d1a805b349d0b58e9bbf84..6bfafef8e3b20519b2ad7e6a267476f465a47ecf 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h
+++ b/src/gpu/core/KernelManager/GridScalingKernelManager.h
@@ -34,8 +34,8 @@
 #define GridScalingKernelManager_H
 
 #include "LBM/LB.h"
-#include "PointerDefinitions.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/PointerDefinitions.h>
+
 #include <logger/Logger.h>
 #include <functional>
 #include <memory>
@@ -53,7 +53,7 @@ using gridScaling =
 
 //! \class GridScalingKernelManager
 //! \brief manage the cuda kernel calls
-class VIRTUALFLUIDS_GPU_EXPORT GridScalingKernelManager
+class GridScalingKernelManager
 {
 public:
     //! Class constructor
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp b/src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp
rename to src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp
index b86e167ca8d2f95897b1a87d4b850acbfbe8a1b3..6972cec264e9407f79641618cbe08a4077e70b6b 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp
+++ b/src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp
@@ -4,7 +4,7 @@
 #include "GridScalingKernelManager.h"
 #include "Factories/GridScalingFactory.h"
 #include "Parameter/Parameter.h"
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 
 class GridScalingKernelManagerTest_Initialization : public testing::Test
 {
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ChimeraTransformation.h b/src/gpu/core/LBM/GPUHelperFunctions/ChimeraTransformation.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ChimeraTransformation.h
rename to src/gpu/core/LBM/GPUHelperFunctions/ChimeraTransformation.h
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/CoordinateTransformation.h b/src/gpu/core/LBM/GPUHelperFunctions/CoordinateTransformation.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/CoordinateTransformation.h
rename to src/gpu/core/LBM/GPUHelperFunctions/CoordinateTransformation.h
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/CoordinateTransformationTest.h b/src/gpu/core/LBM/GPUHelperFunctions/CoordinateTransformationTest.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/CoordinateTransformationTest.h
rename to src/gpu/core/LBM/GPUHelperFunctions/CoordinateTransformationTest.h
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/GridTraversion.h b/src/gpu/core/LBM/GPUHelperFunctions/GridTraversion.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/GridTraversion.h
rename to src/gpu/core/LBM/GPUHelperFunctions/GridTraversion.h
diff --git a/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilities.h b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilities.h
new file mode 100644
index 0000000000000000000000000000000000000000..ad75d197ee661b003ef71c01b01314df377fb6a0
--- /dev/null
+++ b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilities.h
@@ -0,0 +1,394 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 LBM/GPUHelperFunctions
+//! \author Martin Schoenherr, Anna Wellmann, Soeren Peters
+//=======================================================================================
+#ifndef GPU_DISTRIBUTION_HELPER_H
+#define GPU_DISTRIBUTION_HELPER_H
+
+#include "LBM/LB.h"
+
+#include <array>
+#include <cassert>
+#include <optional>
+
+#include <cuda_runtime.h>
+
+#include <lbm/constants/D3Q27.h>
+
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+namespace vf::gpu
+{
+
+inline real getForceFactor(int level)
+{
+    real factor = c1o1;
+    for (size_t i = 1; i <= level; i++) {
+        factor *= c2o1;
+    }
+    factor = 1 / factor;
+    return factor;
+}
+
+__inline__ __device__ __host__ void getPointersToDistributions(Distributions27 &dist, real *distributionArray, const unsigned long long numberOfLBnodes, const bool isEvenTimestep)
+{
+    if (isEvenTimestep) {
+        dist.f[d000] = &distributionArray[d000 * numberOfLBnodes];
+        dist.f[dP00] = &distributionArray[dP00 * numberOfLBnodes];
+        dist.f[dM00] = &distributionArray[dM00 * numberOfLBnodes];
+        dist.f[d0P0] = &distributionArray[d0P0 * numberOfLBnodes];
+        dist.f[d0M0] = &distributionArray[d0M0 * numberOfLBnodes];
+        dist.f[d00P] = &distributionArray[d00P * numberOfLBnodes];
+        dist.f[d00M] = &distributionArray[d00M * numberOfLBnodes];
+        dist.f[dPP0] = &distributionArray[dPP0 * numberOfLBnodes];
+        dist.f[dMM0] = &distributionArray[dMM0 * numberOfLBnodes];
+        dist.f[dPM0] = &distributionArray[dPM0 * numberOfLBnodes];
+        dist.f[dMP0] = &distributionArray[dMP0 * numberOfLBnodes];
+        dist.f[dP0P] = &distributionArray[dP0P * numberOfLBnodes];
+        dist.f[dM0M] = &distributionArray[dM0M * numberOfLBnodes];
+        dist.f[dP0M] = &distributionArray[dP0M * numberOfLBnodes];
+        dist.f[dM0P] = &distributionArray[dM0P * numberOfLBnodes];
+        dist.f[d0PP] = &distributionArray[d0PP * numberOfLBnodes];
+        dist.f[d0MM] = &distributionArray[d0MM * numberOfLBnodes];
+        dist.f[d0PM] = &distributionArray[d0PM * numberOfLBnodes];
+        dist.f[d0MP] = &distributionArray[d0MP * numberOfLBnodes];
+        dist.f[dPPP] = &distributionArray[dPPP * numberOfLBnodes];
+        dist.f[dMMP] = &distributionArray[dMMP * numberOfLBnodes];
+        dist.f[dPMP] = &distributionArray[dPMP * numberOfLBnodes];
+        dist.f[dMPP] = &distributionArray[dMPP * numberOfLBnodes];
+        dist.f[dPPM] = &distributionArray[dPPM * numberOfLBnodes];
+        dist.f[dMMM] = &distributionArray[dMMM * numberOfLBnodes];
+        dist.f[dPMM] = &distributionArray[dPMM * numberOfLBnodes];
+        dist.f[dMPM] = &distributionArray[dMPM * numberOfLBnodes];
+    } else {
+        dist.f[dM00] = &distributionArray[dP00 * numberOfLBnodes];
+        dist.f[dP00] = &distributionArray[dM00 * numberOfLBnodes];
+        dist.f[d0M0] = &distributionArray[d0P0 * numberOfLBnodes];
+        dist.f[d0P0] = &distributionArray[d0M0 * numberOfLBnodes];
+        dist.f[d00M] = &distributionArray[d00P * numberOfLBnodes];
+        dist.f[d00P] = &distributionArray[d00M * numberOfLBnodes];
+        dist.f[dMM0] = &distributionArray[dPP0 * numberOfLBnodes];
+        dist.f[dPP0] = &distributionArray[dMM0 * numberOfLBnodes];
+        dist.f[dMP0] = &distributionArray[dPM0 * numberOfLBnodes];
+        dist.f[dPM0] = &distributionArray[dMP0 * numberOfLBnodes];
+        dist.f[dM0M] = &distributionArray[dP0P * numberOfLBnodes];
+        dist.f[dP0P] = &distributionArray[dM0M * numberOfLBnodes];
+        dist.f[dM0P] = &distributionArray[dP0M * numberOfLBnodes];
+        dist.f[dP0M] = &distributionArray[dM0P * numberOfLBnodes];
+        dist.f[d0MM] = &distributionArray[d0PP * numberOfLBnodes];
+        dist.f[d0PP] = &distributionArray[d0MM * numberOfLBnodes];
+        dist.f[d0MP] = &distributionArray[d0PM * numberOfLBnodes];
+        dist.f[d0PM] = &distributionArray[d0MP * numberOfLBnodes];
+        dist.f[d000] = &distributionArray[d000 * numberOfLBnodes];
+        dist.f[dPPP] = &distributionArray[dMMM * numberOfLBnodes];
+        dist.f[dMMP] = &distributionArray[dPPM * numberOfLBnodes];
+        dist.f[dPMP] = &distributionArray[dMPM * numberOfLBnodes];
+        dist.f[dMPP] = &distributionArray[dPMM * numberOfLBnodes];
+        dist.f[dPPM] = &distributionArray[dMMP * numberOfLBnodes];
+        dist.f[dMMM] = &distributionArray[dPPP * numberOfLBnodes];
+        dist.f[dPMM] = &distributionArray[dMPP * numberOfLBnodes];
+        dist.f[dMPM] = &distributionArray[dPMP * numberOfLBnodes];
+    }
+}
+
+/**
+ *  Getting references to the 27 directions.
+ *  @params distributions 1D real* array containing all data (number of elements = 27 * matrix_size)
+ *  @params matrix_size number of discretizations nodes
+ *  @params isEvenTimestep: stored data dependent on timestep is based on the esoteric twist algorithm
+ *  @return a data struct containing the addresses to the 27 directions within the 1D distribution array
+ */
+__inline__ __device__ __host__ DistributionReferences27 getDistributionReferences27(real* distributions, const unsigned long long numberOfLBnodes, const bool isEvenTimestep){
+    DistributionReferences27 distribution_references;
+    getPointersToDistributions(distribution_references, distributions, numberOfLBnodes, isEvenTimestep);
+    return distribution_references;
+}
+
+__inline__ __device__ void getPointersToSubgridDistances(SubgridDistances27& subgridD, real* subgridDistances, const unsigned int numberOfSubgridIndices)
+{
+    subgridD.q[dP00] = &subgridDistances[dP00 * numberOfSubgridIndices];
+    subgridD.q[dM00] = &subgridDistances[dM00 * numberOfSubgridIndices];
+    subgridD.q[d0P0] = &subgridDistances[d0P0 * numberOfSubgridIndices];
+    subgridD.q[d0M0] = &subgridDistances[d0M0 * numberOfSubgridIndices];
+    subgridD.q[d00P] = &subgridDistances[d00P * numberOfSubgridIndices];
+    subgridD.q[d00M] = &subgridDistances[d00M * numberOfSubgridIndices];
+    subgridD.q[dPP0] = &subgridDistances[dPP0 * numberOfSubgridIndices];
+    subgridD.q[dMM0] = &subgridDistances[dMM0 * numberOfSubgridIndices];
+    subgridD.q[dPM0] = &subgridDistances[dPM0 * numberOfSubgridIndices];
+    subgridD.q[dMP0] = &subgridDistances[dMP0 * numberOfSubgridIndices];
+    subgridD.q[dP0P] = &subgridDistances[dP0P * numberOfSubgridIndices];
+    subgridD.q[dM0M] = &subgridDistances[dM0M * numberOfSubgridIndices];
+    subgridD.q[dP0M] = &subgridDistances[dP0M * numberOfSubgridIndices];
+    subgridD.q[dM0P] = &subgridDistances[dM0P * numberOfSubgridIndices];
+    subgridD.q[d0PP] = &subgridDistances[d0PP * numberOfSubgridIndices];
+    subgridD.q[d0MM] = &subgridDistances[d0MM * numberOfSubgridIndices];
+    subgridD.q[d0PM] = &subgridDistances[d0PM * numberOfSubgridIndices];
+    subgridD.q[d0MP] = &subgridDistances[d0MP * numberOfSubgridIndices];
+    subgridD.q[d000] = &subgridDistances[d000 * numberOfSubgridIndices];
+    subgridD.q[dPPP] = &subgridDistances[dPPP * numberOfSubgridIndices];
+    subgridD.q[dMMP] = &subgridDistances[dMMP * numberOfSubgridIndices];
+    subgridD.q[dPMP] = &subgridDistances[dPMP * numberOfSubgridIndices];
+    subgridD.q[dMPP] = &subgridDistances[dMPP * numberOfSubgridIndices];
+    subgridD.q[dPPM] = &subgridDistances[dPPM * numberOfSubgridIndices];
+    subgridD.q[dMMM] = &subgridDistances[dMMM * numberOfSubgridIndices];
+    subgridD.q[dPMM] = &subgridDistances[dPMM * numberOfSubgridIndices];
+    subgridD.q[dMPM] = &subgridDistances[dMPM * 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 getBounceBackDistributionForVeloBC(  const real& f,
+                                                                const real& velocity, const real weight)
+{
+
+    return f - (c6o1 * weight * velocity);
+}
+
+__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 getInterpolatedDistributionForNoSlipWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, 
+                                                                  const real& omega, const real& drho, const real weight)
+{
+
+    return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 
+           + (q * (f + fInverse)) / (c1o1 + q) - weight * drho;
+}
+
+
+__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;
+}
+
+__inline__ __device__ unsigned int getNodeIndex()
+{
+    // get node index from CUDA threadIdx, blockIdx, blockDim and gridDim.
+    const unsigned x = threadIdx.x;
+    const unsigned y = blockIdx.x;
+    const unsigned z = blockIdx.y;
+
+    const unsigned nx = blockDim.x;
+    const unsigned ny = gridDim.x;
+
+    return nx * (ny * z + y) + x;
+}
+
+__inline__ __device__ bool isValidFluidNode(uint nodeType)
+{
+    return (nodeType == GEO_FLUID || nodeType == GEO_PM_0 || nodeType == GEO_PM_1 || nodeType == GEO_PM_2);
+}
+
+struct ListIndices
+{
+    __device__ ListIndices() = default;
+    __device__ ListIndices(unsigned int index, const unsigned int* neighborX, const unsigned int* neighborY,
+                           const unsigned int* neighborZ)
+    {
+        k_000 = index;
+        k_M00 = neighborX[k_000];
+        k_0M0 = neighborY[k_000];
+        k_00M = neighborZ[k_000];
+        k_MM0 = neighborY[k_M00];
+        k_M0M = neighborZ[k_M00];
+        k_0MM = neighborZ[k_0M0];
+        k_MMM = neighborZ[k_MM0];
+    }
+
+    unsigned int k_000 { 0 };
+    unsigned int k_M00 { 0 };
+    unsigned int k_0M0 { 0 };
+    unsigned int k_00M { 0 };
+    unsigned int k_MM0 { 0 };
+    unsigned int k_M0M { 0 };
+    unsigned int k_0MM { 0 };
+    unsigned int k_MMM { 0 };
+};
+
+////////////////////////////////////////////////////////////////////////////////////
+//! - Read distributions: style of reading and writing the distributions from/to
+//! 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>
+__device__ __inline__ void getPreCollisionDistribution(real* local, const Distributions27& global, const ListIndices& indices)
+{
+    local[d000] = (global.f[d000])[indices.k_000];
+    local[dP00] = (global.f[dP00])[indices.k_000];
+    local[dM00] = (global.f[dM00])[indices.k_M00];
+    local[d0P0] = (global.f[d0P0])[indices.k_000];
+    local[d0M0] = (global.f[d0M0])[indices.k_0M0];
+    local[d00P] = (global.f[d00P])[indices.k_000];
+    local[d00M] = (global.f[d00M])[indices.k_00M];
+    local[dPP0] = (global.f[dPP0])[indices.k_000];
+    local[dMM0] = (global.f[dMM0])[indices.k_MM0];
+    local[dPM0] = (global.f[dPM0])[indices.k_0M0];
+    local[dMP0] = (global.f[dMP0])[indices.k_M00];
+    local[dP0P] = (global.f[dP0P])[indices.k_000];
+    local[dM0M] = (global.f[dM0M])[indices.k_M0M];
+    local[dP0M] = (global.f[dP0M])[indices.k_00M];
+    local[dM0P] = (global.f[dM0P])[indices.k_M00];
+    local[d0PP] = (global.f[d0PP])[indices.k_000];
+    local[d0MM] = (global.f[d0MM])[indices.k_0MM];
+    local[d0PM] = (global.f[d0PM])[indices.k_00M];
+    local[d0MP] = (global.f[d0MP])[indices.k_0M0];
+    local[dPPP] = (global.f[dPPP])[indices.k_000];
+    local[dMPP] = (global.f[dMPP])[indices.k_M00];
+    local[dPMP] = (global.f[dPMP])[indices.k_0M0];
+    local[dMMP] = (global.f[dMMP])[indices.k_MM0];
+    local[dPPM] = (global.f[dPPM])[indices.k_00M];
+    local[dMPM] = (global.f[dMPM])[indices.k_M0M];
+    local[dPMM] = (global.f[dPMM])[indices.k_0MM];
+    local[dMMM] = (global.f[dMMM])[indices.k_MMM];
+}
+
+__device__ __inline__ void getPostCollisionDistribution(real* local, const Distributions27& global, const ListIndices& indices)
+{
+    local[d000] = (global.f[d000])[indices.k_000];
+    local[dP00] = (global.f[dP00])[indices.k_000];
+    local[dM00] = (global.f[dM00])[indices.k_M00];
+    local[d0P0] = (global.f[d0P0])[indices.k_000];
+    local[d0M0] = (global.f[d0M0])[indices.k_0M0];
+    local[d00P] = (global.f[d00P])[indices.k_000];
+    local[d00M] = (global.f[d00M])[indices.k_00M];
+    local[dPP0] = (global.f[dPP0])[indices.k_000];
+    local[dMM0] = (global.f[dMM0])[indices.k_MM0];
+    local[dPM0] = (global.f[dPM0])[indices.k_0M0];
+    local[dMP0] = (global.f[dMP0])[indices.k_M00];
+    local[dP0P] = (global.f[dP0P])[indices.k_000];
+    local[dM0M] = (global.f[dM0M])[indices.k_M0M];
+    local[dP0M] = (global.f[dP0M])[indices.k_00M];
+    local[dM0P] = (global.f[dM0P])[indices.k_M00];
+    local[d0PP] = (global.f[d0PP])[indices.k_000];
+    local[d0MM] = (global.f[d0MM])[indices.k_0MM];
+    local[d0PM] = (global.f[d0PM])[indices.k_00M];
+    local[d0MP] = (global.f[d0MP])[indices.k_0M0];
+    local[dPPP] = (global.f[dPPP])[indices.k_000];
+    local[dMPP] = (global.f[dMPP])[indices.k_M00];
+    local[dPMP] = (global.f[dPMP])[indices.k_0M0];
+    local[dMMP] = (global.f[dMMP])[indices.k_MM0];
+    local[dPPM] = (global.f[dPPM])[indices.k_00M];
+    local[dMPM] = (global.f[dMPM])[indices.k_M0M];
+    local[dPMM] = (global.f[dPMM])[indices.k_0MM];
+    local[dMMM] = (global.f[dMMM])[indices.k_MMM];
+}
+
+////////////////////////////////////////////////////////////////////////////////////
+//! - Write distributions: style of reading and writing the distributions from/to
+//! 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>
+__inline__ __device__ void setPreCollisionDistribution(Distributions27& global, const ListIndices& indices, const real* local)
+{
+    (global.f[d000])[indices.k_000] = local[d000];
+    (global.f[dP00])[indices.k_000] = local[dP00];
+    (global.f[dM00])[indices.k_M00] = local[dM00];
+    (global.f[d0P0])[indices.k_000] = local[d0P0];
+    (global.f[d0M0])[indices.k_0M0] = local[d0M0];
+    (global.f[d00P])[indices.k_000] = local[d00P];
+    (global.f[d00M])[indices.k_00M] = local[d00M];
+    (global.f[dPP0])[indices.k_000] = local[dPP0];
+    (global.f[dMM0])[indices.k_MM0] = local[dMM0];
+    (global.f[dPM0])[indices.k_0M0] = local[dPM0];
+    (global.f[dMP0])[indices.k_M00] = local[dMP0];
+    (global.f[dP0P])[indices.k_000] = local[dP0P];
+    (global.f[dM0M])[indices.k_M0M] = local[dM0M];
+    (global.f[dP0M])[indices.k_00M] = local[dP0M];
+    (global.f[dM0P])[indices.k_M00] = local[dM0P];
+    (global.f[d0PP])[indices.k_000] = local[d0PP];
+    (global.f[d0MM])[indices.k_0MM] = local[d0MM];
+    (global.f[d0PM])[indices.k_00M] = local[d0PM];
+    (global.f[d0MP])[indices.k_0M0] = local[d0MP];
+    (global.f[dPPP])[indices.k_000] = local[dPPP];
+    (global.f[dMPP])[indices.k_M00] = local[dMPP];
+    (global.f[dPMP])[indices.k_0M0] = local[dPMP];
+    (global.f[dMMP])[indices.k_MM0] = local[dMMP];
+    (global.f[dPPM])[indices.k_00M] = local[dPPM];
+    (global.f[dMPM])[indices.k_M0M] = local[dMPM];
+    (global.f[dPMM])[indices.k_0MM] = local[dPMM];
+    (global.f[dMMM])[indices.k_MMM] = local[dMMM];
+}
+
+__inline__ __device__ void setPostCollisionDistribution(Distributions27& global, const ListIndices& indices, const real* local)
+{
+    (global.f[d000])[indices.k_000] = local[d000];
+    (global.f[dP00])[indices.k_000] = local[dM00];
+    (global.f[dM00])[indices.k_M00] = local[dP00];
+    (global.f[d0P0])[indices.k_000] = local[d0M0];
+    (global.f[d0M0])[indices.k_0M0] = local[d0P0];
+    (global.f[d00P])[indices.k_000] = local[d00M];
+    (global.f[d00M])[indices.k_00M] = local[d00P];
+    (global.f[dPP0])[indices.k_000] = local[dMM0];
+    (global.f[dMM0])[indices.k_MM0] = local[dPP0];
+    (global.f[dPM0])[indices.k_0M0] = local[dMP0];
+    (global.f[dMP0])[indices.k_M00] = local[dPM0];
+    (global.f[dP0P])[indices.k_000] = local[dM0M];
+    (global.f[dM0M])[indices.k_M0M] = local[dP0P];
+    (global.f[dP0M])[indices.k_00M] = local[dM0P];
+    (global.f[dM0P])[indices.k_M00] = local[dP0M];
+    (global.f[d0PP])[indices.k_000] = local[d0MM];
+    (global.f[d0MM])[indices.k_0MM] = local[d0PP];
+    (global.f[d0PM])[indices.k_00M] = local[d0MP];
+    (global.f[d0MP])[indices.k_0M0] = local[d0PM];
+    (global.f[dPPP])[indices.k_000] = local[dMMM];
+    (global.f[dMPP])[indices.k_M00] = local[dPMM];
+    (global.f[dPMP])[indices.k_0M0] = local[dMPM];
+    (global.f[dMMP])[indices.k_MM0] = local[dPPM];
+    (global.f[dPPM])[indices.k_00M] = local[dMMP];
+    (global.f[dMPM])[indices.k_M0M] = local[dPMP];
+    (global.f[dPMM])[indices.k_0MM] = local[dMPP];
+    (global.f[dMMM])[indices.k_MMM] = local[dPPP];
+}
+
+}
+
+#endif
diff --git a/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..24c690ba4dfaef64665b24ab35a8211b7bd8f52d
--- /dev/null
+++ b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp
@@ -0,0 +1,87 @@
+#include <gmock/gmock.h>
+
+#include <basics/tests/testUtilities.h>
+
+#include "KernelUtilities.h"
+
+#include <lbm/constants/D3Q27.h>
+
+using namespace vf::lbm::dir;
+
+TEST(DistributionHelperTests, getPointerToDistribution_WhenEvenTimeStep_ShouldBeEqualToInput)
+{
+    real distributions_in[27];
+    for (int i = 0; i < 27; i++)
+        distributions_in[i] = i;
+    const uint size_Mat = 1;
+    const bool isEvenTimeStep = true;
+
+    Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep);
+
+    EXPECT_THAT(*distribution_out.f[dP00], RealEq(distributions_in[dP00]));
+    EXPECT_THAT(*distribution_out.f[dM00], RealEq(distributions_in[dM00]));
+    EXPECT_THAT(*distribution_out.f[d0P0], RealEq(distributions_in[d0P0]));
+    EXPECT_THAT(*distribution_out.f[d0M0], RealEq(distributions_in[d0M0]));
+    EXPECT_THAT(*distribution_out.f[d00P], RealEq(distributions_in[d00P]));
+    EXPECT_THAT(*distribution_out.f[d00M], RealEq(distributions_in[d00M]));
+    EXPECT_THAT(*distribution_out.f[dPP0], RealEq(distributions_in[dPP0]));
+    EXPECT_THAT(*distribution_out.f[dMM0], RealEq(distributions_in[dMM0]));
+    EXPECT_THAT(*distribution_out.f[dPM0], RealEq(distributions_in[dPM0]));
+    EXPECT_THAT(*distribution_out.f[dMP0], RealEq(distributions_in[dMP0]));
+    EXPECT_THAT(*distribution_out.f[dP0P], RealEq(distributions_in[dP0P]));
+    EXPECT_THAT(*distribution_out.f[dM0M], RealEq(distributions_in[dM0M]));
+    EXPECT_THAT(*distribution_out.f[dP0M], RealEq(distributions_in[dP0M]));
+    EXPECT_THAT(*distribution_out.f[dM0P], RealEq(distributions_in[dM0P]));
+    EXPECT_THAT(*distribution_out.f[d0PP], RealEq(distributions_in[d0PP]));
+    EXPECT_THAT(*distribution_out.f[d0MM], RealEq(distributions_in[d0MM]));
+    EXPECT_THAT(*distribution_out.f[d0PM], RealEq(distributions_in[d0PM]));
+    EXPECT_THAT(*distribution_out.f[d0MP], RealEq(distributions_in[d0MP]));
+    EXPECT_THAT(*distribution_out.f[d000], RealEq(distributions_in[d000]));
+    EXPECT_THAT(*distribution_out.f[dPPP], RealEq(distributions_in[dPPP]));
+    EXPECT_THAT(*distribution_out.f[dMMP], RealEq(distributions_in[dMMP]));
+    EXPECT_THAT(*distribution_out.f[dPMP], RealEq(distributions_in[dPMP]));
+    EXPECT_THAT(*distribution_out.f[dMPP], RealEq(distributions_in[dMPP]));
+    EXPECT_THAT(*distribution_out.f[dPPM], RealEq(distributions_in[dPPM]));
+    EXPECT_THAT(*distribution_out.f[dMMM], RealEq(distributions_in[dMMM]));
+    EXPECT_THAT(*distribution_out.f[dPMM], RealEq(distributions_in[dPMM]));
+    EXPECT_THAT(*distribution_out.f[dMPM], RealEq(distributions_in[dMPM]));
+}
+
+TEST(DistributionHelperTests, getPointerToDistribution_WhenOddTimeStep_ShouldBeSwapped)
+{
+    real distributions_in[27];
+    for (int i = 0; i < 27; i++)
+        distributions_in[i] = i;
+    const int size_Mat = 1;
+    const bool isEvenTimeStep = false;
+
+    Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep);
+
+    EXPECT_THAT(*distribution_out.f[dM00], RealEq(distributions_in[dP00]));
+    EXPECT_THAT(*distribution_out.f[dP00], RealEq(distributions_in[dM00]));
+    EXPECT_THAT(*distribution_out.f[d0M0], RealEq(distributions_in[d0P0]));
+    EXPECT_THAT(*distribution_out.f[d0P0], RealEq(distributions_in[d0M0]));
+    EXPECT_THAT(*distribution_out.f[d00M], RealEq(distributions_in[d00P]));
+    EXPECT_THAT(*distribution_out.f[d00P], RealEq(distributions_in[d00M]));
+    EXPECT_THAT(*distribution_out.f[dMM0], RealEq(distributions_in[dPP0]));
+    EXPECT_THAT(*distribution_out.f[dPP0], RealEq(distributions_in[dMM0]));
+    EXPECT_THAT(*distribution_out.f[dMP0], RealEq(distributions_in[dPM0]));
+    EXPECT_THAT(*distribution_out.f[dPM0], RealEq(distributions_in[dMP0]));
+    EXPECT_THAT(*distribution_out.f[dM0M], RealEq(distributions_in[dP0P]));
+    EXPECT_THAT(*distribution_out.f[dP0P], RealEq(distributions_in[dM0M]));
+    EXPECT_THAT(*distribution_out.f[dM0P], RealEq(distributions_in[dP0M]));
+    EXPECT_THAT(*distribution_out.f[dP0M], RealEq(distributions_in[dM0P]));
+    EXPECT_THAT(*distribution_out.f[d0MM], RealEq(distributions_in[d0PP]));
+    EXPECT_THAT(*distribution_out.f[d0PP], RealEq(distributions_in[d0MM]));
+    EXPECT_THAT(*distribution_out.f[d0MP], RealEq(distributions_in[d0PM]));
+    EXPECT_THAT(*distribution_out.f[d0PM], RealEq(distributions_in[d0MP]));
+    EXPECT_THAT(*distribution_out.f[d000], RealEq(distributions_in[d000]));
+    EXPECT_THAT(*distribution_out.f[dMMM], RealEq(distributions_in[dPPP]));
+    EXPECT_THAT(*distribution_out.f[dPPM], RealEq(distributions_in[dMMP]));
+    EXPECT_THAT(*distribution_out.f[dMPM], RealEq(distributions_in[dPMP]));
+    EXPECT_THAT(*distribution_out.f[dPMM], RealEq(distributions_in[dMPP]));
+    EXPECT_THAT(*distribution_out.f[dMMP], RealEq(distributions_in[dPPM]));
+    EXPECT_THAT(*distribution_out.f[dPPP], RealEq(distributions_in[dMMM]));
+    EXPECT_THAT(*distribution_out.f[dMPP], RealEq(distributions_in[dPMM]));
+    EXPECT_THAT(*distribution_out.f[dPMP], RealEq(distributions_in[dMPM]));
+}
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/RunCollision.cuh b/src/gpu/core/LBM/GPUHelperFunctions/RunCollision.cuh
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/RunCollision.cuh
rename to src/gpu/core/LBM/GPUHelperFunctions/RunCollision.cuh
index 9c5b17adf7b5c41fa774511a0797f311a6f1296d..063fa2a709704fa4131443399c96838bb546ee09 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/RunCollision.cuh
+++ b/src/gpu/core/LBM/GPUHelperFunctions/RunCollision.cuh
@@ -92,7 +92,7 @@ __global__ void runCollision(CollisionFunctor collision, GPUCollisionParameter c
 
     ListIndices listIndices(k_000, collisionParameter.neighborX, collisionParameter.neighborY, collisionParameter.neighborZ);
 
-    read(para.distribution, dist, listIndices);
+    getPreCollisionDistribution(para.distribution, dist, listIndices);
 
     vf::lbm::MacroscopicValues macroscopicValues;
     collision(para, macroscopicValues, turbulentViscosity);
@@ -106,7 +106,7 @@ __global__ void runCollision(CollisionFunctor collision, GPUCollisionParameter c
     if (turbulenceModel != vf::lbm::TurbulenceModel::None)
         collisionParameter.turbulentViscosity[k_000] = turbulentViscosity.value;
 
-    writeInverse(dist, listIndices, para.distribution);
+    setPostCollisionDistribution(dist, listIndices, para.distribution);
 }
 
 } // namespace vf::gpu
diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ScalingUtilities.h b/src/gpu/core/LBM/GPUHelperFunctions/ScalingUtilities.h
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ScalingUtilities.h
rename to src/gpu/core/LBM/GPUHelperFunctions/ScalingUtilities.h
index d337d7330c0fccf412d4ab2710c35ee6df39f509..ab10261054fde3adffec9e05dc613e2d281265d0 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ScalingUtilities.h
+++ b/src/gpu/core/LBM/GPUHelperFunctions/ScalingUtilities.h
@@ -102,7 +102,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     real f_fine[27];
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
 
     if (forcesForAllNodesX)
         momentsSet.calculateMMM(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::MMM],
@@ -126,7 +126,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
 
     if (forcesForAllNodesX)
         momentsSet.calculateMMP(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::MMP],
@@ -149,7 +149,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
     if (forcesForAllNodesX)
         momentsSet.calculatePMP(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::PMP],
                                 forcesForAllNodesY[InterpolationVertex::PMP], forcesForAllNodesZ[InterpolationVertex::PMP]);
@@ -171,7 +171,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
     if (forcesForAllNodesX)
         momentsSet.calculatePMM(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::PMM],
                                 forcesForAllNodesY[InterpolationVertex::PMM], forcesForAllNodesZ[InterpolationVertex::PMM]);
@@ -204,7 +204,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
     if (forcesForAllNodesX)
         momentsSet.calculateMPM(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::MPM],
                                 forcesForAllNodesY[InterpolationVertex::MPM], forcesForAllNodesZ[InterpolationVertex::MPM]);
@@ -226,7 +226,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
     if (forcesForAllNodesX)
         momentsSet.calculateMPP(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::MPP],
                                 forcesForAllNodesY[InterpolationVertex::MPP], forcesForAllNodesZ[InterpolationVertex::MPP]);
@@ -248,7 +248,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
 
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
     if (forcesForAllNodesX)
         momentsSet.calculatePPP(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::PPP],
                                 forcesForAllNodesY[InterpolationVertex::PPP], forcesForAllNodesZ[InterpolationVertex::PPP]);
@@ -270,7 +270,7 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet(
     
     omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega;
 
-    read(f_fine, distFine, indices);
+    getPreCollisionDistribution(f_fine, distFine, indices);
     if (forcesForAllNodesX)
         momentsSet.calculatePPM(f_fine, omega_, forcesForAllNodesX[InterpolationVertex::PPM],
                                 forcesForAllNodesY[InterpolationVertex::PPM], forcesForAllNodesZ[InterpolationVertex::PPM]);
diff --git a/src/gpu/VirtualFluids_GPU/LBM/LB.h b/src/gpu/core/LBM/LB.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/LBM/LB.h
rename to src/gpu/core/LBM/LB.h
index 979e08d87e170207451e7ba80304cca8d45d1dd4..8cef301f55ceccfa3842d35464b9c9dfbe63885e 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/LB.h
+++ b/src/gpu/core/LBM/LB.h
@@ -70,7 +70,7 @@
 #define INTERFACE_B 5
 
 
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 
 #include <string>
 #include <vector>
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/core/LBM/Simulation.cpp
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
rename to src/gpu/core/LBM/Simulation.cpp
index e04c0ae72b1b9e08979972ecfb9bdc54146b7bb6..af3b3e70ff1c7bd822f659dcf7f0d63e5a3b6e81 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/gpu/core/LBM/Simulation.cpp
@@ -52,10 +52,10 @@
 #include "DataStructureInitializer/GridProvider.h"
 #include "Output/DataWriter.h"
 #include "Output/DistributionDebugWriter.h"
-#include "Kernel/Utilities/KernelFactory/KernelFactory.h"
+#include "Kernel/KernelFactory/KernelFactory.h"
 #include "PreProcessor/PreProcessorFactory/PreProcessorFactory.h"
 #include "PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
+#include "Kernel/KernelFactory/KernelFactoryImp.h"
 #include "Kernel/Kernel.h"
 #include "TurbulenceModels/TurbulenceModelFactory.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h b/src/gpu/core/LBM/Simulation.h
similarity index 97%
rename from src/gpu/VirtualFluids_GPU/LBM/Simulation.h
rename to src/gpu/core/LBM/Simulation.h
index 146ab4cf6aebe395bff695f3e99aa7b6b1e776d3..b89d8fdec4ac432e3c4a4504857fa4f8f2a9c57e 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
+++ b/src/gpu/core/LBM/Simulation.h
@@ -22,7 +22,7 @@ class RestartObject;
 class ForceCalculations;
 class DataWriter;
 class Kernel;
-class ADKernel;
+class AdvectionDiffusionKernel;
 class KernelFactory;
 class PreProcessor;
 class PreProcessorFactory;
@@ -83,7 +83,7 @@ private:
     std::shared_ptr<DataWriter> dataWriter;
 	std::shared_ptr<CudaMemoryManager> cudaMemoryManager;
 	std::vector < SPtr< Kernel>> kernels;
-	std::vector < SPtr< ADKernel>> adKernels;
+	std::vector < SPtr< AdvectionDiffusionKernel>> adKernels;
 	std::shared_ptr<PreProcessor> preProcessor;
 	SPtr<TurbulenceModelFactory> tmFactory;
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/AnalysisData.hpp b/src/gpu/core/Output/AnalysisData.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/AnalysisData.hpp
rename to src/gpu/core/Output/AnalysisData.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/ClogWriter.cpp b/src/gpu/core/Output/ClogWriter.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/ClogWriter.cpp
rename to src/gpu/core/Output/ClogWriter.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/ClogWriter.h b/src/gpu/core/Output/ClogWriter.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/ClogWriter.h
rename to src/gpu/core/Output/ClogWriter.h
diff --git a/src/gpu/VirtualFluids_GPU/Output/DataWriter.h b/src/gpu/core/Output/DataWriter.h
similarity index 88%
rename from src/gpu/VirtualFluids_GPU/Output/DataWriter.h
rename to src/gpu/core/Output/DataWriter.h
index 67a50867c1ef957c2e80b338f8597262508c468d..51bc38565803c4393665943d1159884a47246ba7 100644
--- a/src/gpu/VirtualFluids_GPU/Output/DataWriter.h
+++ b/src/gpu/core/Output/DataWriter.h
@@ -1,8 +1,8 @@
 #ifndef DATA_WRITER_H
 #define DATA_WRITER_H
 
-#include "PointerDefinitions.h"
-#include "DataTypes.h"
+#include <basics/PointerDefinitions.h>
+#include <basics/DataTypes.h>
 
 #include <memory>
 #include <vector>
diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.cu b/src/gpu/core/Output/DistributionDebugInspector.cu
similarity index 85%
rename from src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.cu
rename to src/gpu/core/Output/DistributionDebugInspector.cu
index df6b2e6623977331bf4b64f2ea798deb7700020f..0515cb1547ee17cc5b46e9b7bacd80a6e1ab3a8c 100644
--- a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.cu
+++ b/src/gpu/core/Output/DistributionDebugInspector.cu
@@ -94,33 +94,33 @@ __global__ void printFs(
             ////////////////////////////////////////////////////////////////////////////////////
             //! - Set local distributions
             //!
-            real f_000 = (dist.f[DIR_000])[k_000];
-            real f_P00 = (dist.f[DIR_P00])[k_000];
-            real f_M00 = (dist.f[DIR_M00])[k_M00];
-            real f_0P0 = (dist.f[DIR_0P0])[k_000];
-            real f_0M0 = (dist.f[DIR_0M0])[k_0M0];
-            real f_00P = (dist.f[DIR_00P])[k_000];
-            real f_00M = (dist.f[DIR_00M])[k_00M];
-            real f_PP0 = (dist.f[DIR_PP0])[k_000];
-            real f_MM0 = (dist.f[DIR_MM0])[k_MM0];
-            real f_PM0 = (dist.f[DIR_PM0])[k_0M0];
-            real f_MP0 = (dist.f[DIR_MP0])[k_M00];
-            real f_P0P = (dist.f[DIR_P0P])[k_000];
-            real f_M0M = (dist.f[DIR_M0M])[k_M0M];
-            real f_P0M = (dist.f[DIR_P0M])[k_00M];
-            real f_M0P = (dist.f[DIR_M0P])[k_M00];
-            real f_0PP = (dist.f[DIR_0PP])[k_000];
-            real f_0MM = (dist.f[DIR_0MM])[k_0MM];
-            real f_0PM = (dist.f[DIR_0PM])[k_00M];
-            real f_0MP = (dist.f[DIR_0MP])[k_0M0];
-            real f_PPP = (dist.f[DIR_PPP])[k_000];
-            real f_MPP = (dist.f[DIR_MPP])[k_M00];
-            real f_PMP = (dist.f[DIR_PMP])[k_0M0];
-            real f_MMP = (dist.f[DIR_MMP])[k_MM0];
-            real f_PPM = (dist.f[DIR_PPM])[k_00M];
-            real f_MPM = (dist.f[DIR_MPM])[k_M0M];
-            real f_PMM = (dist.f[DIR_PMM])[k_0MM];
-            real f_MMM = (dist.f[DIR_MMM])[k_MMM];
+            real f_000 = (dist.f[d000])[k_000];
+            real f_P00 = (dist.f[dP00])[k_000];
+            real f_M00 = (dist.f[dM00])[k_M00];
+            real f_0P0 = (dist.f[d0P0])[k_000];
+            real f_0M0 = (dist.f[d0M0])[k_0M0];
+            real f_00P = (dist.f[d00P])[k_000];
+            real f_00M = (dist.f[d00M])[k_00M];
+            real f_PP0 = (dist.f[dPP0])[k_000];
+            real f_MM0 = (dist.f[dMM0])[k_MM0];
+            real f_PM0 = (dist.f[dPM0])[k_0M0];
+            real f_MP0 = (dist.f[dMP0])[k_M00];
+            real f_P0P = (dist.f[dP0P])[k_000];
+            real f_M0M = (dist.f[dM0M])[k_M0M];
+            real f_P0M = (dist.f[dP0M])[k_00M];
+            real f_M0P = (dist.f[dM0P])[k_M00];
+            real f_0PP = (dist.f[d0PP])[k_000];
+            real f_0MM = (dist.f[d0MM])[k_0MM];
+            real f_0PM = (dist.f[d0PM])[k_00M];
+            real f_0MP = (dist.f[d0MP])[k_0M0];
+            real f_PPP = (dist.f[dPPP])[k_000];
+            real f_MPP = (dist.f[dMPP])[k_M00];
+            real f_PMP = (dist.f[dPMP])[k_0M0];
+            real f_MMP = (dist.f[dMMP])[k_MM0];
+            real f_PPM = (dist.f[dPPM])[k_00M];
+            real f_MPM = (dist.f[dMPM])[k_M0M];
+            real f_PMM = (dist.f[dPMM])[k_0MM];
+            real f_MMM = (dist.f[dMMM])[k_MMM];
 
             real drho = ((((f_PPP + f_MMM) + (f_MPM + f_PMP)) + ((f_MPP + f_PMM) + (f_MMP + f_PPM))) +
                         (((f_0MP + f_0PM) + (f_0MM + f_0PP)) + ((f_M0P + f_P0M) + (f_M0M + f_P0P)) +
diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.h b/src/gpu/core/Output/DistributionDebugInspector.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.h
rename to src/gpu/core/Output/DistributionDebugInspector.h
diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.cpp b/src/gpu/core/Output/DistributionDebugWriter.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.cpp
rename to src/gpu/core/Output/DistributionDebugWriter.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.h b/src/gpu/core/Output/DistributionDebugWriter.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.h
rename to src/gpu/core/Output/DistributionDebugWriter.h
diff --git a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp b/src/gpu/core/Output/EdgeNodeDebugWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp
rename to src/gpu/core/Output/EdgeNodeDebugWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp b/src/gpu/core/Output/FileWriter.cpp
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
rename to src/gpu/core/Output/FileWriter.cpp
index 5bf066a7350b59ebda8a822d42fb936169fb5a53..0e923204bfbe4b477d0698561b2167229ff91818 100644
--- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
+++ b/src/gpu/core/Output/FileWriter.cpp
@@ -165,7 +165,7 @@ std::vector<std::string> FileWriter::getMedianNodeDataNames(std::shared_ptr<Para
     return nodeDataNames;
 }
 
-std::string VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para, unsigned int timestep)
+std::string FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para, unsigned int timestep)
 {
     std::string filename = makeCollectionFileName(para->getFName(), para->getMyProcessID(), timestep);
     auto nodeDataNames = this->getNodeDataNames(para);
@@ -175,7 +175,7 @@ std::string VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFile(std::shared
     return pFileName;
 }
 
-std::string VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFileMedian(std::shared_ptr<Parameter> para, unsigned int timestep)
+std::string FileWriter::writeCollectionFileMedian(std::shared_ptr<Parameter> para, unsigned int timestep)
 {
     std::string filename = makeMedianCollectionFileName(para->getFName(), para->getMyProcessID(), timestep);
     std::vector<std::string> nodeDataNames = getMedianNodeDataNames(para);
diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h b/src/gpu/core/Output/FileWriter.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/FileWriter.h
rename to src/gpu/core/Output/FileWriter.h
diff --git a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.cpp b/src/gpu/core/Output/InterfaceDebugWriter.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.cpp
rename to src/gpu/core/Output/InterfaceDebugWriter.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.h b/src/gpu/core/Output/InterfaceDebugWriter.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.h
rename to src/gpu/core/Output/InterfaceDebugWriter.h
diff --git a/src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp b/src/gpu/core/Output/MeasurePointWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp
rename to src/gpu/core/Output/MeasurePointWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriter.cpp b/src/gpu/core/Output/NeighborDebugWriter.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriter.cpp
rename to src/gpu/core/Output/NeighborDebugWriter.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriter.h b/src/gpu/core/Output/NeighborDebugWriter.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriter.h
rename to src/gpu/core/Output/NeighborDebugWriter.h
diff --git a/src/gpu/core/Output/NeighborDebugWriter.hpp b/src/gpu/core/Output/NeighborDebugWriter.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..71ee3eb1c97206153ddf5f8a3040c9203fb59862
--- /dev/null
+++ b/src/gpu/core/Output/NeighborDebugWriter.hpp
@@ -0,0 +1,56 @@
+#include "NeighborDebugWriter.h"
+
+#include "LBM/LB.h"
+#include "Logger.h"
+#include "Parameter/Parameter.h"
+#include "basics/utilities/UbSystem.h"
+#include "gpu/GridGenerator/grid/NodeValues.h"
+#include "lbm/constants/D3Q27.h"
+#include <basics/writer/WbWriterVtkXmlBinary.h>
+
+#include "StringUtilities/StringUtil.h"
+#include "Utilities/FindNeighbors.h"
+
+void NeighborDebugWriter::writeNeighborLinkLines(LBMSimulationParameter *parH, int direction, const std::string &name,
+                                   WbWriter *writer)
+{
+    VF_LOG_INFO("Write node links in direction {}.", direction);
+
+    const unsigned long long numberOfNodes = parH->numberOfNodes;
+    std::vector<UbTupleFloat3> nodes;
+    nodes.reserve(numberOfNodes);
+    std::vector<UbTupleInt2> cells;
+    cells.reserve(numberOfNodes/2);
+
+    for (size_t position = 0; position < numberOfNodes; position++) {
+        if (parH->typeOfGridNode[position] != GEO_FLUID)
+            continue;
+
+        const double x1 = parH->coordinateX[position];
+        const double x2 = parH->coordinateY[position];
+        const double x3 = parH->coordinateZ[position];
+
+        const uint positionNeighbor = getNeighborIndex(parH, (uint)position, direction);
+
+        const double x1Neighbor = parH->coordinateX[positionNeighbor];
+        const double x2Neighbor = parH->coordinateY[positionNeighbor];
+        const double x3Neighbor = parH->coordinateZ[positionNeighbor];
+
+        nodes.emplace_back(float(x1), float(x2), float(x3));
+        nodes.emplace_back(float(x1Neighbor), float(x2Neighbor), float(x3Neighbor));
+
+        cells.emplace_back((int)nodes.size() - 2, (int)nodes.size() - 1);
+    }
+    writer->writeLines(name, nodes, cells);
+}
+
+void NeighborDebugWriter::writeNeighborLinkLinesDebug(Parameter *para)
+{
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (size_t direction = vf::lbm::dir::STARTDIR; direction <= vf::lbm::dir::ENDDIR; direction++) {
+            const std::string fileName = para->getFName() + "_" + StringUtil::toString<int>(level) + "_Link_" +
+                                         std::to_string(direction) + "_Debug.vtk";
+            writeNeighborLinkLines(para->getParH(level).get(), (int)direction, fileName, WbWriterVtkXmlBinary::getInstance());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriterTest.cpp b/src/gpu/core/Output/NeighborDebugWriterTest.cpp
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriterTest.cpp
rename to src/gpu/core/Output/NeighborDebugWriterTest.cpp
index 2f17c3fb6b3b878a57955d7c870c7dbee6fdd565..5ce899f60c8c8dbdaae20332bd6c15d76c3052b6 100644
--- a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriterTest.cpp
+++ b/src/gpu/core/Output/NeighborDebugWriterTest.cpp
@@ -1,6 +1,6 @@
 #include <gmock/gmock.h>
 #include "NeighborDebugWriter.h"
-#include "gpu/VirtualFluids_GPU/Utilities/testUtilitiesGPU.h"
+#include "gpu/core/Utilities/testUtilitiesGPU.h"
 #include <basics/writer/WbWriterVtkXmlBinary.h>
 
 class WbWriterSpy : public WbWriter
@@ -42,7 +42,7 @@ protected:
 
     const int level = 0;
     const unsigned long long numberOfNodes = 3;
-    const uint direction = vf::lbm::dir::DIR_P00; // x
+    const uint direction = vf::lbm::dir::dP00; // x
     std::unique_ptr<LBMSimulationParameter> parH = std::make_unique<LBMSimulationParameter>();
     WbWriterSpy writerSpy;
     std::vector<uint> typeOfGridNode;
diff --git a/src/gpu/VirtualFluids_GPU/Output/OffsetWriter.hpp b/src/gpu/core/Output/OffsetWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/OffsetWriter.hpp
rename to src/gpu/core/Output/OffsetWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp b/src/gpu/core/Output/PosVecIntWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp
rename to src/gpu/core/Output/PosVecIntWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp b/src/gpu/core/Output/PosWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp
rename to src/gpu/core/Output/PosWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriter.hpp b/src/gpu/core/Output/QDebugVtkWriter.hpp
similarity index 95%
rename from src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriter.hpp
rename to src/gpu/core/Output/QDebugVtkWriter.hpp
index 5448db1329885ca542c951b3d068f3ab48fe502c..30ffe603ab2d6c8f3e3edd469f2e9d0bc85cfab1 100644
--- a/src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriter.hpp
+++ b/src/gpu/core/Output/QDebugVtkWriter.hpp
@@ -11,9 +11,9 @@
 #include <logger/Logger.h>
 
 #include "gpu/GridGenerator/grid/NodeValues.h"
-#include "gpu/VirtualFluids_GPU/LBM/LB.h"
-#include "gpu/VirtualFluids_GPU/Parameter/Parameter.h"
-#include "gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h"
+#include "gpu/core/LBM/LB.h"
+#include "gpu/core/Parameter/Parameter.h"
+#include "gpu/core/Utilities/FindNeighbors.h"
 
 namespace QDebugVtkWriter
 {
diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriterTest.cpp b/src/gpu/core/Output/QDebugVtkWriterTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriterTest.cpp
rename to src/gpu/core/Output/QDebugVtkWriterTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp b/src/gpu/core/Output/QDebugWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp
rename to src/gpu/core/Output/QDebugWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.cpp b/src/gpu/core/Output/TimeStepTimer.cpp
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.cpp
rename to src/gpu/core/Output/TimeStepTimer.cpp
index 979c4349a084342a897a0269ffb86a3714065e96..9c7edb0bf02cff0b076648c2fbf665d0ffdd4aa8 100644
--- a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.cpp
+++ b/src/gpu/core/Output/TimeStepTimer.cpp
@@ -1,6 +1,6 @@
 #include "helper_cuda.h"
 #include <cuda_runtime.h>
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 #include "UbScheduler.h"
 #include "Parameter/Parameter.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.h b/src/gpu/core/Output/TimeStepTimer.h
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.h
rename to src/gpu/core/Output/TimeStepTimer.h
index 41bb9eba7ba09ddb092e644894eca0fde71fa27b..350a7d1e72b2a50f28abcdd2f6cc0e455cdd633e 100644
--- a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.h
+++ b/src/gpu/core/Output/TimeStepTimer.h
@@ -3,7 +3,7 @@
 
 #include "helper_cuda.h"
 #include <cuda_runtime.h>
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 #include "UbScheduler.h"
 #include "Parameter/Parameter.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/Timer.cpp b/src/gpu/core/Output/Timer.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/Timer.cpp
rename to src/gpu/core/Output/Timer.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/Timer.h b/src/gpu/core/Output/Timer.h
similarity index 96%
rename from src/gpu/VirtualFluids_GPU/Output/Timer.h
rename to src/gpu/core/Output/Timer.h
index fd76c66703c2a60d9aed26365f415fe3c93e7e1f..e586dd6881bbe0275758a516a7127b46a8b21bae 100644
--- a/src/gpu/VirtualFluids_GPU/Output/Timer.h
+++ b/src/gpu/core/Output/Timer.h
@@ -2,7 +2,7 @@
 #define TIMER_H
 #include <cuda_runtime.h>
 
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 #include "Parameter/Parameter.h"
 #include <logger/Logger.h>
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp b/src/gpu/core/Output/UnstructuredGridWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
rename to src/gpu/core/Output/UnstructuredGridWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/VeloASCIIWriter.hpp b/src/gpu/core/Output/VeloASCIIWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/VeloASCIIWriter.hpp
rename to src/gpu/core/Output/VeloASCIIWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp b/src/gpu/core/Output/VtkSGWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp
rename to src/gpu/core/Output/VtkSGWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/WriterUtilities.cpp b/src/gpu/core/Output/WriterUtilities.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/WriterUtilities.cpp
rename to src/gpu/core/Output/WriterUtilities.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/WriterUtilities.h b/src/gpu/core/Output/WriterUtilities.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/WriterUtilities.h
rename to src/gpu/core/Output/WriterUtilities.h
diff --git a/src/gpu/VirtualFluids_GPU/Output/WriterUtilitiesTest.cpp b/src/gpu/core/Output/WriterUtilitiesTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/WriterUtilitiesTest.cpp
rename to src/gpu/core/Output/WriterUtilitiesTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp b/src/gpu/core/Output/interfaceWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp
rename to src/gpu/core/Output/interfaceWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp b/src/gpu/core/Output/kFullWriter.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp
rename to src/gpu/core/Output/kFullWriter.hpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.cpp b/src/gpu/core/Parameter/CudaStreamManager.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.cpp
rename to src/gpu/core/Parameter/CudaStreamManager.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.h b/src/gpu/core/Parameter/CudaStreamManager.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.h
rename to src/gpu/core/Parameter/CudaStreamManager.h
index 98032ef16adebf56f10d8ed5e9c04bbf517876c3..35d6b462c949b7d43aeb0bdd61e4fc185eab25ad 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.h
+++ b/src/gpu/core/Parameter/CudaStreamManager.h
@@ -33,7 +33,7 @@
 #include <map>
 #include <cuda.h>
 #include <cuda_runtime.h>
-#include "DataTypes.h"
+#include <basics/DataTypes.h>
 
 enum class CudaStreamIndex
     {
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp b/src/gpu/core/Parameter/EdgeNodeFinder.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
rename to src/gpu/core/Parameter/EdgeNodeFinder.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h b/src/gpu/core/Parameter/EdgeNodeFinder.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
rename to src/gpu/core/Parameter/EdgeNodeFinder.h
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp b/src/gpu/core/Parameter/EdgeNodeFinderTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
rename to src/gpu/core/Parameter/EdgeNodeFinderTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/core/Parameter/Parameter.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
rename to src/gpu/core/Parameter/Parameter.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/core/Parameter/Parameter.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
rename to src/gpu/core/Parameter/Parameter.h
index 5193f15e278e870410ca1ac1c9a34fb3904d6743..3db46194f24742c07a3c1f3e6d00ab11d0b5e285 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/core/Parameter/Parameter.h
@@ -43,11 +43,11 @@
 #include "LBM/LB.h"
 #include "PreCollisionInteractor/PreCollisionInteractor.h"
 #include "TurbulenceModels/TurbulenceModelFactory.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 #include <lbm/collision/TurbulentViscosity.h>
 
-#include "VirtualFluids_GPU_export.h"
+
 
 struct curandStateXORWOW;
 using curandState = struct curandStateXORWOW;
@@ -456,7 +456,7 @@ struct LBMSimulationParameter {
 
 
 //! \brief Class for LBM-parameter management
-class VIRTUALFLUIDS_GPU_EXPORT Parameter
+class Parameter
 {
 public:
     Parameter();
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterRotatingGrid.cpp b/src/gpu/core/Parameter/ParameterRotatingGrid.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/ParameterRotatingGrid.cpp
rename to src/gpu/core/Parameter/ParameterRotatingGrid.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterRotatingGrid.h b/src/gpu/core/Parameter/ParameterRotatingGrid.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/ParameterRotatingGrid.h
rename to src/gpu/core/Parameter/ParameterRotatingGrid.h
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterRotatingGridTest.cpp b/src/gpu/core/Parameter/ParameterRotatingGridTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/ParameterRotatingGridTest.cpp
rename to src/gpu/core/Parameter/ParameterRotatingGridTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/core/Parameter/ParameterTest.cpp
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
rename to src/gpu/core/Parameter/ParameterTest.cpp
index 3700669a5be7962a7c464cf35f18f02be67c41c4..042195106e6c9efcb33ea1f6dd278a83e94bb7c8 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
+++ b/src/gpu/core/Parameter/ParameterTest.cpp
@@ -6,7 +6,7 @@
 
 #include "LBM/Simulation.h"
 #include "Parameter.h"
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 #include "basics/config/ConfigurationFile.h"
 
 #include "DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
@@ -14,7 +14,7 @@
 #include "Factories/GridScalingFactory.h"
 #include "GPU/CudaMemoryManager.h"
 #include "gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 
 #include <parallel/Communicator.h>
 
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg b/src/gpu/core/Parameter/parameterTest.cfg
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
rename to src/gpu/core/Parameter/parameterTest.cfg
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest_emptyfile.cfg b/src/gpu/core/Parameter/parameterTest_emptyfile.cfg
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Parameter/parameterTest_emptyfile.cfg
rename to src/gpu/core/Parameter/parameterTest_emptyfile.cfg
diff --git a/src/gpu/VirtualFluids_GPU/Particles/Particles.cpp b/src/gpu/core/Particles/Particles.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Particles/Particles.cpp
rename to src/gpu/core/Particles/Particles.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Particles/Particles.h b/src/gpu/core/Particles/Particles.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Particles/Particles.h
rename to src/gpu/core/Particles/Particles.h
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
rename to src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu
index c09e58d9dd664e7b513131ffa1bdb548eb35a244..fac6b3cb70c8bb2694f89e886b9192dfeed86782 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
+++ b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu
@@ -42,7 +42,7 @@
 #include <basics/constants/NumericConstants.h>
 #include <basics/writer/WbWriterVtkXmlBinary.h>
 
-#include "VirtualFluids_GPU/GPU/GeometryUtils.h"
+#include "gpu/core/GPU/GeometryUtils.h"
 #include "LBM/GPUHelperFunctions/KernelUtilities.h"
 #include "Parameter/Parameter.h"
 #include "Parameter/CudaStreamManager.h"
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
rename to src/gpu/core/PreCollisionInteractor/ActuatorFarm.h
index c71bb9407e686ce14a957d120f233958359f243d..74f23f3e6a4dc9e3e798ca13aa3632171d0e3bd0 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
+++ b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h
@@ -2,7 +2,7 @@
 #define ActuatorFarm_H
 
 #include "PreCollisionInteractor.h"
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 #include "basics/constants/NumericConstants.h"
 #include <stdexcept>
 
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlines.h b/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlines.h
rename to src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp b/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp
rename to src/gpu/core/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h b/src/gpu/core/PreCollisionInteractor/PreCollisionInteractor.h
similarity index 83%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h
rename to src/gpu/core/PreCollisionInteractor/PreCollisionInteractor.h
index 90c434bd60e623175d5c8bfbbf23fa41f01e8a37..65149ed8b52404cb54a5cfba29120ca56fd7bf50 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h
+++ b/src/gpu/core/PreCollisionInteractor/PreCollisionInteractor.h
@@ -4,9 +4,9 @@
 #include <string>
 #include <vector>
 
-#include "DataTypes.h"
-#include "PointerDefinitions.h"
-#include "VirtualFluids_GPU_export.h"
+#include <basics/DataTypes.h>
+#include <basics/PointerDefinitions.h>
+
 
 #include <cassert>
 
@@ -14,7 +14,7 @@ class Parameter;
 class GridProvider;
 class CudaMemoryManager;
 
-class VIRTUALFLUIDS_GPU_EXPORT PreCollisionInteractor
+class PreCollisionInteractor
 {
 
 protected:
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.cu b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.cu
similarity index 98%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.cu
rename to src/gpu/core/PreCollisionInteractor/PrecursorWriter.cu
index ca1ed594829682ad94b98a59349e082bf3b315a4..cae1ca5620caf5086f38f81dc81b931ae8ad0288 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.cu
+++ b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.cu
@@ -129,15 +129,15 @@ __global__ void fillArrayDistributions( uint numberOfPrecursorNodes,
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Get local distributions in PX directions
     //!
-    precursorData[linearIdx(PrecP00, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_P00])[k_000];
-    precursorData[linearIdx(PrecPP0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PP0])[k_000];
-    precursorData[linearIdx(PrecPM0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PM0])[k_0M0];
-    precursorData[linearIdx(PrecP0P, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_P0P])[k_000];
-    precursorData[linearIdx(PrecP0M, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_P0M])[k_00M];
-    precursorData[linearIdx(PrecPPP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PPP])[k_000];
-    precursorData[linearIdx(PrecPMP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PMP])[k_0M0];
-    precursorData[linearIdx(PrecPPM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PPM])[k_00M];
-    precursorData[linearIdx(PrecPMM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PMM])[k_0MM];
+    precursorData[linearIdx(PrecP00, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dP00])[k_000];
+    precursorData[linearIdx(PrecPP0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPP0])[k_000];
+    precursorData[linearIdx(PrecPM0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPM0])[k_0M0];
+    precursorData[linearIdx(PrecP0P, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dP0P])[k_000];
+    precursorData[linearIdx(PrecP0M, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dP0M])[k_00M];
+    precursorData[linearIdx(PrecPPP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPPP])[k_000];
+    precursorData[linearIdx(PrecPMP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPMP])[k_0M0];
+    precursorData[linearIdx(PrecPPM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPPM])[k_00M];
+    precursorData[linearIdx(PrecPMM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPMM])[k_0MM];
 }
 
 
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h
rename to src/gpu/core/PreCollisionInteractor/PrecursorWriter.h
index 264023b58ba6db46b50f6a85b334c530864a0b8f..1419aec6d9a4303ea211a49c83842c209ceaa3b1 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h
+++ b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.h
@@ -45,7 +45,7 @@
 #include <string>
 #include <vector>
 #include <future>
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 #include "Logger.h"
 
 class Parameter;
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu
rename to src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h
rename to src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu
rename to src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h
rename to src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/PointProbe.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu
rename to src/gpu/core/PreCollisionInteractor/Probes/PointProbe.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/PointProbe.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h
rename to src/gpu/core/PreCollisionInteractor/Probes/PointProbe.h
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu b/src/gpu/core/PreCollisionInteractor/Probes/Probe.cu
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu
rename to src/gpu/core/PreCollisionInteractor/Probes/Probe.cu
index 0e4e9ee8b20eff4c16d8cb356ceb051fbdec5bb4..5aa106e8c86bddeb75b9d3a0c1a6cc810a08d965 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu
+++ b/src/gpu/core/PreCollisionInteractor/Probes/Probe.cu
@@ -36,7 +36,7 @@
 #include <cuda_runtime.h>
 #include <helper_cuda.h>
 
-#include "VirtualFluids_GPU/GPU/GeometryUtils.h"
+#include "gpu/core/GPU/GeometryUtils.h"
 #include <basics/constants/NumericConstants.h>
 #include "basics/writer/WbWriterVtkXmlBinary.h"
 #include <StringUtilities/StringUtil.h>
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h b/src/gpu/core/PreCollisionInteractor/Probes/Probe.h
similarity index 99%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h
rename to src/gpu/core/PreCollisionInteractor/Probes/Probe.h
index 007e996284c8e7f2a431a927d1f6887e6b4435cd..4836a1102cd16df7ea373a36f8d67384c0392d5f 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h
+++ b/src/gpu/core/PreCollisionInteractor/Probes/Probe.h
@@ -48,7 +48,7 @@
 #include <cuda.h>
 
 #include "PreCollisionInteractor/PreCollisionInteractor.h"
-#include "PointerDefinitions.h"
+#include <basics/PointerDefinitions.h>
 #include "WbWriterVtkXmlBinary.h"
 
 //=======================================================================================
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu
rename to src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h
rename to src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessor.h b/src/gpu/core/PreProcessor/PreProcessor.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessor.h
rename to src/gpu/core/PreProcessor/PreProcessor.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
similarity index 81%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
rename to src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
index 80413722b0266d19daae03eb3d0a539b95c62507..8a7c30b62b7a2efdb27f40f86a6430ccc8c76437 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
+++ b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
@@ -6,12 +6,12 @@
 #include <memory>
 #include <vector>
 
-#include "VirtualFluids_GPU_export.h"
+
 
 class PreProcessor;
 class Parameter;
 
-class VIRTUALFLUIDS_GPU_EXPORT PreProcessorFactory
+class PreProcessorFactory
 {
 public:
     virtual ~PreProcessorFactory() = default;
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp
rename to src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
similarity index 83%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
rename to src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
index e61c8e442f0d90cc16fc4125402265787fc1ed38..43ab0ccbf38462f260e3518112b2a8fb5e398985 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
+++ b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
@@ -5,7 +5,7 @@
 
 class PreProcessorStrategy;
 
-class VIRTUALFLUIDS_GPU_EXPORT PreProcessorFactoryImp : public PreProcessorFactory
+class PreProcessorFactoryImp : public PreProcessorFactory
 {
 public:
 	std::shared_ptr<PreProcessor> makePreProcessor(std::vector<PreProcessorType> preProcessorTypes, std::shared_ptr<Parameter> para);
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.cpp b/src/gpu/core/PreProcessor/PreProcessorImp.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.cpp
rename to src/gpu/core/PreProcessor/PreProcessorImp.cpp
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.h b/src/gpu/core/PreProcessor/PreProcessorImp.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.h
rename to src/gpu/core/PreProcessor/PreProcessorImp.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
new file mode 100644
index 0000000000000000000000000000000000000000..69576864681d00d33451c68324fe86ae299713ac
--- /dev/null
+++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
@@ -0,0 +1,200 @@
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+
+
+__global__ void LB_Init_Comp_AD_27(unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned int* geoD,
+	real* Conc,
+	real* ux,
+	real* uy,
+	real* uz,
+	unsigned int size_Mat,
+	real* DD27,
+	bool EvenOrOdd)
+{
+	////////////////////////////////////////////////////////////////////////////////
+	const unsigned  x = threadIdx.x;  // Globaler x-Index 
+	const unsigned  y = blockIdx.x;   // Globaler y-Index 
+	const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+	const unsigned nx = blockDim.x;
+	const unsigned ny = gridDim.x;
+
+	const unsigned k = nx*(ny*z + y) + x;
+	//////////////////////////////////////////////////////////////////////////
+
+	if (k<size_Mat)
+	{
+		////////////////////////////////////////////////////////////////////////////////
+		unsigned int BC;
+		BC = geoD[k];
+
+		if (BC != GEO_SOLID && BC != GEO_VOID)
+		{
+			Distributions27 D27;
+			if (EvenOrOdd == true)
+			{
+				D27.f[dP00] = &DD27[dP00   *size_Mat];
+				D27.f[dM00] = &DD27[dM00   *size_Mat];
+				D27.f[d0P0] = &DD27[d0P0   *size_Mat];
+				D27.f[d0M0] = &DD27[d0M0   *size_Mat];
+				D27.f[d00P] = &DD27[d00P   *size_Mat];
+				D27.f[d00M] = &DD27[d00M   *size_Mat];
+				D27.f[dPP0] = &DD27[dPP0  *size_Mat];
+				D27.f[dMM0] = &DD27[dMM0  *size_Mat];
+				D27.f[dPM0] = &DD27[dPM0  *size_Mat];
+				D27.f[dMP0] = &DD27[dMP0  *size_Mat];
+				D27.f[dP0P] = &DD27[dP0P  *size_Mat];
+				D27.f[dM0M] = &DD27[dM0M  *size_Mat];
+				D27.f[dP0M] = &DD27[dP0M  *size_Mat];
+				D27.f[dM0P] = &DD27[dM0P  *size_Mat];
+				D27.f[d0PP] = &DD27[d0PP  *size_Mat];
+				D27.f[d0MM] = &DD27[d0MM  *size_Mat];
+				D27.f[d0PM] = &DD27[d0PM  *size_Mat];
+				D27.f[d0MP] = &DD27[d0MP  *size_Mat];
+				D27.f[d000] = &DD27[d000*size_Mat];
+				D27.f[dPPP] = &DD27[dPPP *size_Mat];
+				D27.f[dMMP] = &DD27[dMMP *size_Mat];
+				D27.f[dPMP] = &DD27[dPMP *size_Mat];
+				D27.f[dMPP] = &DD27[dMPP *size_Mat];
+				D27.f[dPPM] = &DD27[dPPM *size_Mat];
+				D27.f[dMMM] = &DD27[dMMM *size_Mat];
+				D27.f[dPMM]= &DD27[dPMM *size_Mat];
+				D27.f[dMPM]= &DD27[dMPM *size_Mat];
+			}
+			else
+			{
+				D27.f[dM00] = &DD27[dP00   *size_Mat];
+				D27.f[dP00] = &DD27[dM00   *size_Mat];
+				D27.f[d0M0] = &DD27[d0P0   *size_Mat];
+				D27.f[d0P0] = &DD27[d0M0   *size_Mat];
+				D27.f[d00M] = &DD27[d00P   *size_Mat];
+				D27.f[d00P] = &DD27[d00M   *size_Mat];
+				D27.f[dMM0] = &DD27[dPP0  *size_Mat];
+				D27.f[dPP0] = &DD27[dMM0  *size_Mat];
+				D27.f[dMP0] = &DD27[dPM0  *size_Mat];
+				D27.f[dPM0] = &DD27[dMP0  *size_Mat];
+				D27.f[dM0M] = &DD27[dP0P  *size_Mat];
+				D27.f[dP0P] = &DD27[dM0M  *size_Mat];
+				D27.f[dM0P] = &DD27[dP0M  *size_Mat];
+				D27.f[dP0M] = &DD27[dM0P  *size_Mat];
+				D27.f[d0MM] = &DD27[d0PP  *size_Mat];
+				D27.f[d0PP] = &DD27[d0MM  *size_Mat];
+				D27.f[d0MP] = &DD27[d0PM  *size_Mat];
+				D27.f[d0PM] = &DD27[d0MP  *size_Mat];
+				D27.f[d000] = &DD27[d000*size_Mat];
+				D27.f[dMMM] = &DD27[dPPP *size_Mat];
+				D27.f[dPPM] = &DD27[dMMP *size_Mat];
+				D27.f[dMPM]= &DD27[dPMP *size_Mat];
+				D27.f[dPMM]= &DD27[dMPP *size_Mat];
+				D27.f[dMMP] = &DD27[dPPM *size_Mat];
+				D27.f[dPPP] = &DD27[dMMM *size_Mat];
+				D27.f[dMPP] = &DD27[dPMM *size_Mat];
+				D27.f[dPMP] = &DD27[dMPM *size_Mat];
+			}
+			//////////////////////////////////////////////////////////////////////////
+			real ConcD = Conc[k];
+			real   vx1 = ux[k];
+			real   vx2 = uy[k];
+			real   vx3 = uz[k];
+			//real lambdaD     = -three + sqrt(three);
+			//real Diffusivity = c1o20;
+			//real Lam         = -(c1o2+one/lambdaD);
+			//real nue_d       = Lam/three;
+			//real ae          = Diffusivity/nue_d - one;
+			//real ux_sq       = vx1 * vx1;
+			//real uy_sq       = vx2 * vx2;
+			//real uz_sq       = vx3 * vx3;
+			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			//D3Q7
+			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			//index
+			//unsigned int kzero= k;
+			//unsigned int ke   = k;
+			//unsigned int kw   = neighborX[k];
+			//unsigned int kn   = k;
+			//unsigned int ks   = neighborY[k];
+			//unsigned int kt   = k;
+			//unsigned int kb   = neighborZ[k];
+			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			//(D7.f[0])[kzero] = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq));
+			//(D7.f[1])[ke   ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2);
+			//(D7.f[2])[kw   ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2);
+			//(D7.f[3])[kn   ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2);
+			//(D7.f[4])[ks   ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2);
+			//(D7.f[5])[kt   ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2);
+			//(D7.f[6])[kb   ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2);
+			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			//D3Q27
+			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			//index
+			unsigned int kzero = k;
+			unsigned int ke = k;
+			unsigned int kw = neighborX[k];
+			unsigned int kn = k;
+			unsigned int ks = neighborY[k];
+			unsigned int kt = k;
+			unsigned int kb = neighborZ[k];
+			unsigned int ksw = neighborY[kw];
+			unsigned int kne = k;
+			unsigned int kse = ks;
+			unsigned int knw = kw;
+			unsigned int kbw = neighborZ[kw];
+			unsigned int kte = k;
+			unsigned int kbe = kb;
+			unsigned int ktw = kw;
+			unsigned int kbs = neighborZ[ks];
+			unsigned int ktn = k;
+			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 = k;
+			unsigned int kbsw = neighborZ[ksw];
+			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+			real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
+
+			(D27.f[d000])[kzero] = c8o27* ConcD*(c1o1 - cu_sq);
+			(D27.f[dP00])[ke] = c2o27* ConcD*(c1o1 + c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
+			(D27.f[dM00])[kw] = c2o27* ConcD*(c1o1 + c3o1*(-vx1) + c9o2*(-vx1)*(-vx1) - cu_sq);
+			(D27.f[d0P0])[kn] = c2o27* ConcD*(c1o1 + c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
+			(D27.f[d0M0])[ks] = c2o27* ConcD*(c1o1 + c3o1*(-vx2) + c9o2*(-vx2)*(-vx2) - cu_sq);
+			(D27.f[d00P])[kt] = c2o27* ConcD*(c1o1 + c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
+			(D27.f[d00M])[kb] = c2o27* ConcD*(c1o1 + c3o1*(-vx3) + c9o2*(-vx3)*(-vx3) - cu_sq);
+			(D27.f[dPP0])[kne] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx2) + c9o2*(vx1 + vx2)*(vx1 + vx2) - cu_sq);
+			(D27.f[dMM0])[ksw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx2) + c9o2*(-vx1 - vx2)*(-vx1 - vx2) - cu_sq);
+			(D27.f[dPM0])[kse] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx2) + c9o2*(vx1 - vx2)*(vx1 - vx2) - cu_sq);
+			(D27.f[dMP0])[knw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx2) + c9o2*(-vx1 + vx2)*(-vx1 + vx2) - cu_sq);
+			(D27.f[dP0P])[kte] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx3) + c9o2*(vx1 + vx3)*(vx1 + vx3) - cu_sq);
+			(D27.f[dM0M])[kbw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx3) + c9o2*(-vx1 - vx3)*(-vx1 - vx3) - cu_sq);
+			(D27.f[dP0M])[kbe] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx3) + c9o2*(vx1 - vx3)*(vx1 - vx3) - cu_sq);
+			(D27.f[dM0P])[ktw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx3) + c9o2*(-vx1 + vx3)*(-vx1 + vx3) - cu_sq);
+			(D27.f[d0PP])[ktn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 + vx3) + c9o2*(vx2 + vx3)*(vx2 + vx3) - cu_sq);
+			(D27.f[d0MM])[kbs] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 - vx3) + c9o2*(-vx2 - vx3)*(-vx2 - vx3) - cu_sq);
+			(D27.f[d0PM])[kbn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 - vx3) + c9o2*(vx2 - vx3)*(vx2 - vx3) - cu_sq);
+			(D27.f[d0MP])[kts] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 + vx3) + c9o2*(-vx2 + vx3)*(-vx2 + vx3) - cu_sq);
+			(D27.f[dPPP])[ktne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 + vx3) + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) - cu_sq);
+			(D27.f[dMMM])[kbsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 - vx3) + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) - cu_sq);
+			(D27.f[dPPM])[kbne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 - vx3) + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) - cu_sq);
+			(D27.f[dMMP])[ktsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 + vx3) + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) - cu_sq);
+			(D27.f[dPMP])[ktse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 + vx3) + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) - cu_sq);
+			(D27.f[dMPM])[kbnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 - vx3) + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) - cu_sq);
+			(D27.f[dPMM])[kbse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 - vx3) + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) - cu_sq);
+			(D27.f[dMPP])[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/InitCompAD27/InitCompAD27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
new file mode 100644
index 0000000000000000000000000000000000000000..92725eea736985443a8ba8caeeda002fa1ac7bdd
--- /dev/null
+++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
@@ -0,0 +1,466 @@
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+#include "math.h"
+
+#include <stdio.h>
+
+__global__ void LB_Init_Comp_SP_27(unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned int* geoD,
+	real* rho,
+	real* ux,
+	real* uy,
+	real* uz,
+	unsigned int size_Mat,
+	real* DD,
+	bool EvenOrOdd)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<size_Mat)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      unsigned int BC;
+      BC        =   geoD[k];
+
+      if( BC != GEO_SOLID &&  BC != GEO_VOID)
+      {
+         Distributions27 D;
+         if (EvenOrOdd==true)
+         {
+            D.f[dP00   ] = &DD[dP00   *size_Mat];
+            D.f[dM00   ] = &DD[dM00   *size_Mat];
+            D.f[d0P0   ] = &DD[d0P0   *size_Mat];
+            D.f[d0M0   ] = &DD[d0M0   *size_Mat];
+            D.f[d00P   ] = &DD[d00P   *size_Mat];
+            D.f[d00M   ] = &DD[d00M   *size_Mat];
+            D.f[dPP0  ] = &DD[dPP0  *size_Mat];
+            D.f[dMM0  ] = &DD[dMM0  *size_Mat];
+            D.f[dPM0  ] = &DD[dPM0  *size_Mat];
+            D.f[dMP0  ] = &DD[dMP0  *size_Mat];
+            D.f[dP0P  ] = &DD[dP0P  *size_Mat];
+            D.f[dM0M  ] = &DD[dM0M  *size_Mat];
+            D.f[dP0M  ] = &DD[dP0M  *size_Mat];
+            D.f[dM0P  ] = &DD[dM0P  *size_Mat];
+            D.f[d0PP  ] = &DD[d0PP  *size_Mat];
+            D.f[d0MM  ] = &DD[d0MM  *size_Mat];
+            D.f[d0PM  ] = &DD[d0PM  *size_Mat];
+            D.f[d0MP  ] = &DD[d0MP  *size_Mat];
+            D.f[d000] = &DD[d000*size_Mat];
+            D.f[dPPP ] = &DD[dPPP *size_Mat];
+            D.f[dMMP ] = &DD[dMMP *size_Mat];
+            D.f[dPMP ] = &DD[dPMP *size_Mat];
+            D.f[dMPP ] = &DD[dMPP *size_Mat];
+            D.f[dPPM ] = &DD[dPPM *size_Mat];
+            D.f[dMMM ] = &DD[dMMM *size_Mat];
+            D.f[dPMM ] = &DD[dPMM *size_Mat];
+            D.f[dMPM ] = &DD[dMPM *size_Mat];
+         }
+         else
+         {
+            D.f[dM00   ] = &DD[dP00   *size_Mat];
+            D.f[dP00   ] = &DD[dM00   *size_Mat];
+            D.f[d0M0   ] = &DD[d0P0   *size_Mat];
+            D.f[d0P0   ] = &DD[d0M0   *size_Mat];
+            D.f[d00M   ] = &DD[d00P   *size_Mat];
+            D.f[d00P   ] = &DD[d00M   *size_Mat];
+            D.f[dMM0  ] = &DD[dPP0  *size_Mat];
+            D.f[dPP0  ] = &DD[dMM0  *size_Mat];
+            D.f[dMP0  ] = &DD[dPM0  *size_Mat];
+            D.f[dPM0  ] = &DD[dMP0  *size_Mat];
+            D.f[dM0M  ] = &DD[dP0P  *size_Mat];
+            D.f[dP0P  ] = &DD[dM0M  *size_Mat];
+            D.f[dM0P  ] = &DD[dP0M  *size_Mat];
+            D.f[dP0M  ] = &DD[dM0P  *size_Mat];
+            D.f[d0MM  ] = &DD[d0PP  *size_Mat];
+            D.f[d0PP  ] = &DD[d0MM  *size_Mat];
+            D.f[d0MP  ] = &DD[d0PM  *size_Mat];
+            D.f[d0PM  ] = &DD[d0MP  *size_Mat];
+            D.f[d000] = &DD[d000*size_Mat];
+            D.f[dMMM ] = &DD[dPPP *size_Mat];
+            D.f[dPPM ] = &DD[dMMP *size_Mat];
+            D.f[dMPM ] = &DD[dPMP *size_Mat];
+            D.f[dPMM ] = &DD[dMPP *size_Mat];
+            D.f[dMMP ] = &DD[dPPM *size_Mat];
+            D.f[dPPP ] = &DD[dMMM *size_Mat];
+            D.f[dMPP ] = &DD[dPMM *size_Mat];
+            D.f[dPMP ] = &DD[dMPM *size_Mat];
+         }
+         //////////////////////////////////////////////////////////////////////////
+         real drho = rho[k];//0.0f;//
+         real  vx1 = ux[k]; //0.0f;//
+         real  vx2 = uy[k]; //0.0f;//
+         real  vx3 = uz[k]; //0.0f;//
+         //////////////////////////////////////////////////////////////////////////
+         //index
+         //////////////////////////////////////////////////////////////////////////
+         unsigned int kzero= k;
+         unsigned int ke   = k;
+         unsigned int kw   = neighborX[k];
+         unsigned int kn   = k;
+         unsigned int ks   = neighborY[k];
+         unsigned int kt   = k;
+         unsigned int kb   = neighborZ[k];
+         unsigned int ksw  = neighborY[kw];
+         unsigned int kne  = k;
+         unsigned int kse  = ks;
+         unsigned int knw  = kw;
+         unsigned int kbw  = neighborZ[kw];
+         unsigned int kte  = k;
+         unsigned int kbe  = kb;
+         unsigned int ktw  = kw;
+         unsigned int kbs  = neighborZ[ks];
+         unsigned int ktn  = k;
+         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 = k;
+         unsigned int kbsw = neighborZ[ksw];
+         //////////////////////////////////////////////////////////////////////////
+         real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+         (D.f[d000])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
+         (D.f[dP00   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
+         (D.f[dM00   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+         (D.f[d0P0   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+         (D.f[d0M0   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+         (D.f[d00P   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
+         (D.f[d00M   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+         (D.f[dPP0  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+         (D.f[dMM0  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+         (D.f[dPM0  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+         (D.f[dMP0  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+         (D.f[dP0P  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+         (D.f[dM0M  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+         (D.f[dP0M  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+         (D.f[dM0P  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+         (D.f[d0PP  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+         (D.f[d0MM  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+         (D.f[d0PM  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+         (D.f[d0MP  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+         (D.f[dPPP ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+         (D.f[dMMM ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+         (D.f[dPPM ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+         (D.f[dMMP ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+         (D.f[dPMP ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+         (D.f[dMPM ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+         (D.f[dPMM ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+         (D.f[dMPP ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      }
+   }
+}
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+__global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX,
+                                                   unsigned int* neighborY,
+                                                   unsigned int* neighborZ,
+                                                   unsigned int* neighborWSB,
+                                                   unsigned int* geoD,
+                                                   real* rho,
+                                                   real* ux,
+                                                   real* uy,
+                                                   real* uz,
+                                                   unsigned int size_Mat,
+                                                   real* DD,
+                                                   real omega,
+                                                   bool EvenOrOdd)
+{
+    ////////////////////////////////////////////////////////////////////////////////
+    const unsigned  x = threadIdx.x;  // Globaler x-Index 
+    const unsigned  y = blockIdx.x;   // Globaler y-Index 
+    const unsigned  z = blockIdx.y;   // Globaler z-Index 
+    
+    const unsigned nx = blockDim.x;
+    const unsigned ny = gridDim.x;
+    
+    const unsigned k = nx*(ny*z + y) + x;
+    //////////////////////////////////////////////////////////////////////////
+
+    if(k<size_Mat)
+    {
+        ////////////////////////////////////////////////////////////////////////////////
+        unsigned int BC;
+        BC = geoD[k];
+
+        if( BC != GEO_SOLID &&  BC != GEO_VOID)
+        {
+            Distributions27 D;
+            if (EvenOrOdd==true)
+            {
+                D.f[dP00   ] = &DD[dP00   *size_Mat];
+                D.f[dM00   ] = &DD[dM00   *size_Mat];
+                D.f[d0P0   ] = &DD[d0P0   *size_Mat];
+                D.f[d0M0   ] = &DD[d0M0   *size_Mat];
+                D.f[d00P   ] = &DD[d00P   *size_Mat];
+                D.f[d00M   ] = &DD[d00M   *size_Mat];
+                D.f[dPP0  ] = &DD[dPP0  *size_Mat];
+                D.f[dMM0  ] = &DD[dMM0  *size_Mat];
+                D.f[dPM0  ] = &DD[dPM0  *size_Mat];
+                D.f[dMP0  ] = &DD[dMP0  *size_Mat];
+                D.f[dP0P  ] = &DD[dP0P  *size_Mat];
+                D.f[dM0M  ] = &DD[dM0M  *size_Mat];
+                D.f[dP0M  ] = &DD[dP0M  *size_Mat];
+                D.f[dM0P  ] = &DD[dM0P  *size_Mat];
+                D.f[d0PP  ] = &DD[d0PP  *size_Mat];
+                D.f[d0MM  ] = &DD[d0MM  *size_Mat];
+                D.f[d0PM  ] = &DD[d0PM  *size_Mat];
+                D.f[d0MP  ] = &DD[d0MP  *size_Mat];
+                D.f[d000] = &DD[d000*size_Mat];
+                D.f[dPPP ] = &DD[dPPP *size_Mat];
+                D.f[dMMP ] = &DD[dMMP *size_Mat];
+                D.f[dPMP ] = &DD[dPMP *size_Mat];
+                D.f[dMPP ] = &DD[dMPP *size_Mat];
+                D.f[dPPM ] = &DD[dPPM *size_Mat];
+                D.f[dMMM ] = &DD[dMMM *size_Mat];
+                D.f[dPMM ] = &DD[dPMM *size_Mat];
+                D.f[dMPM ] = &DD[dMPM *size_Mat];
+            }
+            else
+            {
+                D.f[dM00   ] = &DD[dP00   *size_Mat];
+                D.f[dP00   ] = &DD[dM00   *size_Mat];
+                D.f[d0M0   ] = &DD[d0P0   *size_Mat];
+                D.f[d0P0   ] = &DD[d0M0   *size_Mat];
+                D.f[d00M   ] = &DD[d00P   *size_Mat];
+                D.f[d00P   ] = &DD[d00M   *size_Mat];
+                D.f[dMM0  ] = &DD[dPP0  *size_Mat];
+                D.f[dPP0  ] = &DD[dMM0  *size_Mat];
+                D.f[dMP0  ] = &DD[dPM0  *size_Mat];
+                D.f[dPM0  ] = &DD[dMP0  *size_Mat];
+                D.f[dM0M  ] = &DD[dP0P  *size_Mat];
+                D.f[dP0P  ] = &DD[dM0M  *size_Mat];
+                D.f[dM0P  ] = &DD[dP0M  *size_Mat];
+                D.f[dP0M  ] = &DD[dM0P  *size_Mat];
+                D.f[d0MM  ] = &DD[d0PP  *size_Mat];
+                D.f[d0PP  ] = &DD[d0MM  *size_Mat];
+                D.f[d0MP  ] = &DD[d0PM  *size_Mat];
+                D.f[d0PM  ] = &DD[d0MP  *size_Mat];
+                D.f[d000] = &DD[d000*size_Mat];
+                D.f[dMMM ] = &DD[dPPP *size_Mat];
+                D.f[dPPM ] = &DD[dMMP *size_Mat];
+                D.f[dMPM ] = &DD[dPMP *size_Mat];
+                D.f[dPMM ] = &DD[dMPP *size_Mat];
+                D.f[dMMP ] = &DD[dPPM *size_Mat];
+                D.f[dPPP ] = &DD[dMMM *size_Mat];
+                D.f[dMPP ] = &DD[dPMM *size_Mat];
+                D.f[dPMP ] = &DD[dMPM *size_Mat];
+            }
+            //////////////////////////////////////////////////////////////////////////
+            real drho = rho[k];//0.0f;//
+            real  vx1 = ux[k]; //0.0f;//
+            real  vx2 = uy[k]; //0.0f;//
+            real  vx3 = uz[k]; //0.0f;//
+            //////////////////////////////////////////////////////////////////////////
+            //index
+            //////////////////////////////////////////////////////////////////////////
+            unsigned int kzero= k;
+            unsigned int ke   = k;
+            unsigned int kw   = neighborX[k];
+            unsigned int kn   = k;
+            unsigned int ks   = neighborY[k];
+            unsigned int kt   = k;
+            unsigned int kb   = neighborZ[k];
+            unsigned int ksw  = neighborY[kw];
+            unsigned int kne  = k;
+            unsigned int kse  = ks;
+            unsigned int knw  = kw;
+            unsigned int kbw  = neighborZ[kw];
+            unsigned int kte  = k;
+            unsigned int kbe  = kb;
+            unsigned int ktw  = kw;
+            unsigned int kbs  = neighborZ[ks];
+            unsigned int ktn  = k;
+            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 = k;
+            unsigned int kbsw = neighborZ[ksw];
+	        //////////////////////////////////////////////////////////////////////////////
+	        //neighbor index
+	        uint kPx   = neighborX[k];
+	        uint kPy   = neighborY[k];
+	        uint kPz   = neighborZ[k];
+	        uint kMxyz = neighborWSB[k];
+	        uint kMx   = neighborZ[neighborY[kMxyz]];
+	        uint kMy   = neighborZ[neighborX[kMxyz]];
+	        uint kMz   = neighborY[neighborX[kMxyz]];
+            //////////////////////////////////////////////////////////////////////////
+	        //getVeloX//
+	        real vx1NeighborPx = ux[kPx];
+	        real vx1NeighborMx = ux[kMx];
+	        real vx1NeighborPy = ux[kPy];
+	        real vx1NeighborMy = ux[kMy];
+	        real vx1NeighborPz = ux[kPz];
+	        real vx1NeighborMz = ux[kMz];
+	        //getVeloY//
+	        real vx2NeighborPx = uy[kPx];
+	        real vx2NeighborMx = uy[kMx];
+	        real vx2NeighborPy = uy[kPy];
+	        real vx2NeighborMy = uy[kMy];
+	        real vx2NeighborPz = uy[kPz];
+	        real vx2NeighborMz = uy[kMz];
+	        //getVeloZ//
+	        real vx3NeighborPx = uz[kPx];
+	        real vx3NeighborMx = uz[kMx];
+	        real vx3NeighborPy = uz[kPy];
+	        real vx3NeighborMy = uz[kMy];
+	        real vx3NeighborPz = uz[kPz];
+	        real vx3NeighborMz = uz[kMz];
+            //////////////////////////////////////////////////////////////////////////
+
+	        real dvx1dx = (vx1NeighborPx - vx1NeighborMx) / c2o1;
+	        real dvx1dy = (vx1NeighborPy - vx1NeighborMy) / c2o1;
+	        real dvx1dz = (vx1NeighborPz - vx1NeighborMz) / c2o1;
+
+	        real dvx2dx = (vx2NeighborPx - vx2NeighborMx) / c2o1;
+	        real dvx2dy = (vx2NeighborPy - vx2NeighborMy) / c2o1;
+	        real dvx2dz = (vx2NeighborPz - vx2NeighborMz) / c2o1;
+
+	        real dvx3dx = (vx3NeighborPx - vx3NeighborMx) / c2o1;
+	        real dvx3dy = (vx3NeighborPy - vx3NeighborMy) / c2o1;
+	        real dvx3dz = (vx3NeighborPz - vx3NeighborMz) / c2o1;
+
+            //////////////////////////////////////////////////////////////////////////
+
+            // the following code is copy and pasted from VirtualFluidsVisitors/InitDistributionsBlockVisitor.cpp
+            // i.e. Konstantins code
+
+            real ax = dvx1dx;
+            real ay = dvx1dy;
+            real az = dvx1dz;
+
+            real bx = dvx2dx;
+            real by = dvx2dy;
+            real bz = dvx2dz;
+
+            real cx = dvx3dx;
+            real cy = dvx3dy;
+            real cz = dvx3dz;
+
+            real eps_new = c1o1;
+            real op      = c1o1;
+            real o       = omega;
+
+            real f_E    =            eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op));
+
+            real f_N    =    f_E   + eps_new *((2.*(ax - by))/(9.*o));
+            real f_T    =    f_E   + eps_new *((2.*(ax - cz))/(9.*o));
+            real f_NE   =            eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op));
+            real f_SE   =    f_NE  + eps_new *((  ay + bx )/(9.*o));
+            real f_TE   =            eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op));
+            real f_BE   =    f_TE  + eps_new *((  az + cx )/(9.*o));
+            real f_TN   =            eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op));
+            real f_BN   =    f_TN  + eps_new *((  bz + cy )/(9.*o));
+            real f_ZERO =            eps_new *((5.*(ax + by + cz))/(9.*op));
+            real f_TNE  =            eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o));
+            real f_TSW  =  - f_TNE - eps_new *((ay + bx)/(36.*o));
+            real f_TSE  =  - f_TNE - eps_new *((az + cx)/(36.*o));
+            real f_TNW  =  - f_TNE - eps_new *((bz + cy)/(36.*o));
+
+            //////////////////////////////////////////////////////////////////////////
+            real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+            (D.f[d000])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
+            (D.f[dP00   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
+            (D.f[dM00   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+            (D.f[d0P0   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+            (D.f[d0M0   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+            (D.f[d00P   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
+            (D.f[d00M   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+            (D.f[dPP0  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+            (D.f[dMM0  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+            (D.f[dPM0  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+            (D.f[dMP0  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+            (D.f[dP0P  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+            (D.f[dM0M  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+            (D.f[dP0M  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+            (D.f[dM0P  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+            (D.f[d0PP  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+            (D.f[d0MM  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+            (D.f[d0PM  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+            (D.f[d0MP  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+            (D.f[dPPP ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+            (D.f[dMMM ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+            (D.f[dPPM ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+            (D.f[dMMP ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+            (D.f[dPMP ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+            (D.f[dMPM ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+            (D.f[dPMM ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+            (D.f[dMPP ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+
+            //////////////////////////////////////////////////////////////////////////
+
+            (D.f[d000])[kzero] += (c1o1+drho) * f_ZERO;
+            (D.f[dP00   ])[ke   ] += (c1o1+drho) * f_E   ;
+            (D.f[dM00   ])[kw   ] += (c1o1+drho) * f_E   ;
+            (D.f[d0P0   ])[kn   ] += (c1o1+drho) * f_N   ;
+            (D.f[d0M0   ])[ks   ] += (c1o1+drho) * f_N   ;
+            (D.f[d00P   ])[kt   ] += (c1o1+drho) * f_T   ;
+            (D.f[d00M   ])[kb   ] += (c1o1+drho) * f_T   ;
+            (D.f[dPP0  ])[kne  ] += (c1o1+drho) * f_NE  ;
+            (D.f[dMM0  ])[ksw  ] += (c1o1+drho) * f_NE  ;
+            (D.f[dPM0  ])[kse  ] += (c1o1+drho) * f_SE  ;
+            (D.f[dMP0  ])[knw  ] += (c1o1+drho) * f_SE  ;
+            (D.f[dP0P  ])[kte  ] += (c1o1+drho) * f_TE  ;
+            (D.f[dM0M  ])[kbw  ] += (c1o1+drho) * f_TE  ;
+            (D.f[dP0M  ])[kbe  ] += (c1o1+drho) * f_BE  ;
+            (D.f[dM0P  ])[ktw  ] += (c1o1+drho) * f_BE  ;
+            (D.f[d0PP  ])[ktn  ] += (c1o1+drho) * f_TN  ;
+            (D.f[d0MM  ])[kbs  ] += (c1o1+drho) * f_TN  ;
+            (D.f[d0PM  ])[kbn  ] += (c1o1+drho) * f_BN  ;
+            (D.f[d0MP  ])[kts  ] += (c1o1+drho) * f_BN  ;
+            (D.f[dPPP ])[ktne ] += (c1o1+drho) * f_TNE ;
+            (D.f[dMMM ])[kbsw ] += (c1o1+drho) * f_TNE ;
+            (D.f[dPPM ])[kbne ] += (c1o1+drho) * f_TSW ;
+            (D.f[dMMP ])[ktsw ] += (c1o1+drho) * f_TSW ;
+            (D.f[dPMP ])[ktse ] += (c1o1+drho) * f_TSE ;
+            (D.f[dMPM ])[kbnw ] += (c1o1+drho) * f_TSE ;
+            (D.f[dPMM ])[kbse ] += (c1o1+drho) * f_TNW ;
+            (D.f[dMPP ])[ktnw ] += (c1o1+drho) * f_TNW ;
+
+            //////////////////////////////////////////////////////////////////////////
+        }
+	    else
+	    {
+		    //////////////////////////////////////////////////////////////////////////
+		    Distributions27 D;
+		    D.f[d000] = &DD[d000*size_Mat];
+		    //////////////////////////////////////////////////////////////////////////
+		    (D.f[d000])[k] = c96o1;
+		    //////////////////////////////////////////////////////////////////////////
+	    }
+   }
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
similarity index 68%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
index 349bfda9824483bf08d09f267d5fc4b0f6a13ac1..76e81ae844298a44df1dc55937e83b590d43d1d3 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
+++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
@@ -41,21 +41,21 @@ __global__ void LB_Init_F3(unsigned int* neighborX,
 			Distributions6 D;
 			if (EvenOrOdd == true)
 			{
-				D.g[DIR_P00] = &G6[DIR_P00   *size_Mat];
-				D.g[DIR_M00] = &G6[DIR_M00   *size_Mat];
-				D.g[DIR_0P0] = &G6[DIR_0P0   *size_Mat];
-				D.g[DIR_0M0] = &G6[DIR_0M0   *size_Mat];
-				D.g[DIR_00P] = &G6[DIR_00P   *size_Mat];
-				D.g[DIR_00M] = &G6[DIR_00M   *size_Mat];
+				D.g[dP00] = &G6[dP00   *size_Mat];
+				D.g[dM00] = &G6[dM00   *size_Mat];
+				D.g[d0P0] = &G6[d0P0   *size_Mat];
+				D.g[d0M0] = &G6[d0M0   *size_Mat];
+				D.g[d00P] = &G6[d00P   *size_Mat];
+				D.g[d00M] = &G6[d00M   *size_Mat];
 			}
 			else
 			{
-				D.g[DIR_M00] = &G6[DIR_P00   *size_Mat];
-				D.g[DIR_P00] = &G6[DIR_M00   *size_Mat];
-				D.g[DIR_0M0] = &G6[DIR_0P0   *size_Mat];
-				D.g[DIR_0P0] = &G6[DIR_0M0   *size_Mat];
-				D.g[DIR_00M] = &G6[DIR_00P   *size_Mat];
-				D.g[DIR_00P] = &G6[DIR_00M   *size_Mat];
+				D.g[dM00] = &G6[dP00   *size_Mat];
+				D.g[dP00] = &G6[dM00   *size_Mat];
+				D.g[d0M0] = &G6[d0P0   *size_Mat];
+				D.g[d0P0] = &G6[d0M0   *size_Mat];
+				D.g[d00M] = &G6[d00P   *size_Mat];
+				D.g[d00P] = &G6[d00M   *size_Mat];
 			}
 			//////////////////////////////////////////////////////////////////////////
 			//index
@@ -69,12 +69,12 @@ __global__ void LB_Init_F3(unsigned int* neighborX,
 			unsigned int kb = neighborZ[k];
 			//////////////////////////////////////////////////////////////////////////
 
-			(D.g[DIR_P00])[ke] = 0.0f;
-			(D.g[DIR_M00])[kw] = 0.0f;
-			(D.g[DIR_0P0])[kn] = 0.0f;
-			(D.g[DIR_0M0])[ks] = 0.0f;
-			(D.g[DIR_00P])[kt] = 0.0f;
-			(D.g[DIR_00M])[kb] = 0.0f;
+			(D.g[dP00])[ke] = 0.0f;
+			(D.g[dM00])[kw] = 0.0f;
+			(D.g[d0P0])[kn] = 0.0f;
+			(D.g[d0M0])[ks] = 0.0f;
+			(D.g[d00P])[kt] = 0.0f;
+			(D.g[d00M])[kb] = 0.0f;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu
new file mode 100644
index 0000000000000000000000000000000000000000..1b7a5cf350dd9ee2272856a910e8c780c5cfbd78
--- /dev/null
+++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu
@@ -0,0 +1,173 @@
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+#include "math.h"
+
+__global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned int* geoD,
+	real* Conc,
+	real* ux,
+	real* uy,
+	real* uz,
+	unsigned int size_Mat,
+	real* DD27,
+	bool EvenOrOdd)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<size_Mat)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      unsigned int BC;
+      BC        =   geoD[k];
+
+      if( BC != GEO_SOLID && BC != GEO_VOID)
+      {
+         Distributions27 D27;
+         if (EvenOrOdd==true)
+         {
+            D27.f[dP00   ] = &DD27[dP00   *size_Mat];
+            D27.f[dM00   ] = &DD27[dM00   *size_Mat];
+            D27.f[d0P0   ] = &DD27[d0P0   *size_Mat];
+            D27.f[d0M0   ] = &DD27[d0M0   *size_Mat];
+            D27.f[d00P   ] = &DD27[d00P   *size_Mat];
+            D27.f[d00M   ] = &DD27[d00M   *size_Mat];
+            D27.f[dPP0  ] = &DD27[dPP0  *size_Mat];
+            D27.f[dMM0  ] = &DD27[dMM0  *size_Mat];
+            D27.f[dPM0  ] = &DD27[dPM0  *size_Mat];
+            D27.f[dMP0  ] = &DD27[dMP0  *size_Mat];
+            D27.f[dP0P  ] = &DD27[dP0P  *size_Mat];
+            D27.f[dM0M  ] = &DD27[dM0M  *size_Mat];
+            D27.f[dP0M  ] = &DD27[dP0M  *size_Mat];
+            D27.f[dM0P  ] = &DD27[dM0P  *size_Mat];
+            D27.f[d0PP  ] = &DD27[d0PP  *size_Mat];
+            D27.f[d0MM  ] = &DD27[d0MM  *size_Mat];
+            D27.f[d0PM  ] = &DD27[d0PM  *size_Mat];
+            D27.f[d0MP  ] = &DD27[d0MP  *size_Mat];
+            D27.f[d000] = &DD27[d000*size_Mat];
+            D27.f[dPPP ] = &DD27[dPPP *size_Mat];
+            D27.f[dMMP ] = &DD27[dMMP *size_Mat];
+            D27.f[dPMP ] = &DD27[dPMP *size_Mat];
+            D27.f[dMPP ] = &DD27[dMPP *size_Mat];
+            D27.f[dPPM ] = &DD27[dPPM *size_Mat];
+            D27.f[dMMM ] = &DD27[dMMM *size_Mat];
+            D27.f[dPMM ] = &DD27[dPMM *size_Mat];
+            D27.f[dMPM ] = &DD27[dMPM *size_Mat];
+         }
+         else
+         {
+            D27.f[dM00   ] = &DD27[dP00   *size_Mat];
+            D27.f[dP00   ] = &DD27[dM00   *size_Mat];
+            D27.f[d0M0   ] = &DD27[d0P0   *size_Mat];
+            D27.f[d0P0   ] = &DD27[d0M0   *size_Mat];
+            D27.f[d00M   ] = &DD27[d00P   *size_Mat];
+            D27.f[d00P   ] = &DD27[d00M   *size_Mat];
+            D27.f[dMM0  ] = &DD27[dPP0  *size_Mat];
+            D27.f[dPP0  ] = &DD27[dMM0  *size_Mat];
+            D27.f[dMP0  ] = &DD27[dPM0  *size_Mat];
+            D27.f[dPM0  ] = &DD27[dMP0  *size_Mat];
+            D27.f[dM0M  ] = &DD27[dP0P  *size_Mat];
+            D27.f[dP0P  ] = &DD27[dM0M  *size_Mat];
+            D27.f[dM0P  ] = &DD27[dP0M  *size_Mat];
+            D27.f[dP0M  ] = &DD27[dM0P  *size_Mat];
+            D27.f[d0MM  ] = &DD27[d0PP  *size_Mat];
+            D27.f[d0PP  ] = &DD27[d0MM  *size_Mat];
+            D27.f[d0MP  ] = &DD27[d0PM  *size_Mat];
+            D27.f[d0PM  ] = &DD27[d0MP  *size_Mat];
+            D27.f[d000] = &DD27[d000*size_Mat];
+            D27.f[dMMM ] = &DD27[dPPP *size_Mat];
+            D27.f[dPPM ] = &DD27[dMMP *size_Mat];
+            D27.f[dMPM ] = &DD27[dPMP *size_Mat];
+            D27.f[dPMM ] = &DD27[dMPP *size_Mat];
+            D27.f[dMMP ] = &DD27[dPPM *size_Mat];
+            D27.f[dPPP ] = &DD27[dMMM *size_Mat];
+            D27.f[dMPP ] = &DD27[dPMM *size_Mat];
+            D27.f[dPMP ] = &DD27[dMPM *size_Mat];
+         }
+         //////////////////////////////////////////////////////////////////////////
+         real ConcD = Conc[k];
+         real   vx1 = ux[k];
+         real   vx2 = uy[k];
+         real   vx3 = uz[k];
+         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+         //D3Q27
+         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+         //index
+         unsigned int kzero= k;
+         unsigned int ke   = k;
+         unsigned int kw   = neighborX[k];
+         unsigned int kn   = k;
+         unsigned int ks   = neighborY[k];
+         unsigned int kt   = k;
+         unsigned int kb   = neighborZ[k];
+         unsigned int ksw  = neighborY[kw];
+         unsigned int kne  = k;
+         unsigned int kse  = ks;
+         unsigned int knw  = kw;
+         unsigned int kbw  = neighborZ[kw];
+         unsigned int kte  = k;
+         unsigned int kbe  = kb;
+         unsigned int ktw  = kw;
+         unsigned int kbs  = neighborZ[ks];
+         unsigned int ktn  = k;
+         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 = k;
+         unsigned int kbsw = neighborZ[ksw];
+         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+         real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+         (D27.f[d000])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
+         (D27.f[dP00   ])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+         (D27.f[dM00   ])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+         (D27.f[d0P0   ])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+         (D27.f[d0M0   ])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+         (D27.f[d00P   ])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+         (D27.f[d00M   ])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+         (D27.f[dPP0  ])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+         (D27.f[dMM0  ])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+         (D27.f[dPM0  ])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+         (D27.f[dMP0  ])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+         (D27.f[dP0P  ])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+         (D27.f[dM0M  ])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+         (D27.f[dP0M  ])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+         (D27.f[dM0P  ])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+         (D27.f[d0PP  ])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+         (D27.f[d0MM  ])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+         (D27.f[d0PM  ])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+         (D27.f[d0MP  ])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+         (D27.f[dPPP ])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+         (D27.f[dMMM ])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+         (D27.f[dPPM ])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+         (D27.f[dMMP ])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+         (D27.f[dPMP ])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+         (D27.f[dMPM ])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+         (D27.f[dPMM ])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+         (D27.f[dMPP ])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      }
+   }
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
new file mode 100644
index 0000000000000000000000000000000000000000..c050a9e69b9c902e05a549a89ae816dd392b177a
--- /dev/null
+++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
@@ -0,0 +1,177 @@
+#include "LBM/LB.h" 
+#include "lbm/constants/D3Q27.h"
+#include <basics/constants/NumericConstants.h>
+
+using namespace vf::basics::constant;
+using namespace vf::lbm::dir;
+#include "math.h"
+
+__global__ void LB_Init_SP_27(unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned int* geoD,
+	real* rho,
+	real* ux,
+	real* uy,
+	real* uz,
+	unsigned int size_Mat,
+	real* DD,
+	bool EvenOrOdd)
+{
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+
+   if(k<size_Mat)
+   {
+      ////////////////////////////////////////////////////////////////////////////////
+      unsigned int BC;
+      BC        =   geoD[k];
+
+      if( BC != GEO_SOLID &&  BC != GEO_VOID)
+      {
+         Distributions27 D;
+         if (EvenOrOdd==true)
+         {
+            D.f[dP00   ] = &DD[dP00   *size_Mat];
+            D.f[dM00   ] = &DD[dM00   *size_Mat];
+            D.f[d0P0   ] = &DD[d0P0   *size_Mat];
+            D.f[d0M0   ] = &DD[d0M0   *size_Mat];
+            D.f[d00P   ] = &DD[d00P   *size_Mat];
+            D.f[d00M   ] = &DD[d00M   *size_Mat];
+            D.f[dPP0  ] = &DD[dPP0  *size_Mat];
+            D.f[dMM0  ] = &DD[dMM0  *size_Mat];
+            D.f[dPM0  ] = &DD[dPM0  *size_Mat];
+            D.f[dMP0  ] = &DD[dMP0  *size_Mat];
+            D.f[dP0P  ] = &DD[dP0P  *size_Mat];
+            D.f[dM0M  ] = &DD[dM0M  *size_Mat];
+            D.f[dP0M  ] = &DD[dP0M  *size_Mat];
+            D.f[dM0P  ] = &DD[dM0P  *size_Mat];
+            D.f[d0PP  ] = &DD[d0PP  *size_Mat];
+            D.f[d0MM  ] = &DD[d0MM  *size_Mat];
+            D.f[d0PM  ] = &DD[d0PM  *size_Mat];
+            D.f[d0MP  ] = &DD[d0MP  *size_Mat];
+            D.f[d000] = &DD[d000*size_Mat];
+            D.f[dPPP ] = &DD[dPPP *size_Mat];
+            D.f[dMMP ] = &DD[dMMP *size_Mat];
+            D.f[dPMP ] = &DD[dPMP *size_Mat];
+            D.f[dMPP ] = &DD[dMPP *size_Mat];
+            D.f[dPPM ] = &DD[dPPM *size_Mat];
+            D.f[dMMM ] = &DD[dMMM *size_Mat];
+            D.f[dPMM ] = &DD[dPMM *size_Mat];
+            D.f[dMPM ] = &DD[dMPM *size_Mat];
+         }
+         else
+         {
+            D.f[dM00   ] = &DD[dP00   *size_Mat];
+            D.f[dP00   ] = &DD[dM00   *size_Mat];
+            D.f[d0M0   ] = &DD[d0P0   *size_Mat];
+            D.f[d0P0   ] = &DD[d0M0   *size_Mat];
+            D.f[d00M   ] = &DD[d00P   *size_Mat];
+            D.f[d00P   ] = &DD[d00M   *size_Mat];
+            D.f[dMM0  ] = &DD[dPP0  *size_Mat];
+            D.f[dPP0  ] = &DD[dMM0  *size_Mat];
+            D.f[dMP0  ] = &DD[dPM0  *size_Mat];
+            D.f[dPM0  ] = &DD[dMP0  *size_Mat];
+            D.f[dM0M  ] = &DD[dP0P  *size_Mat];
+            D.f[dP0P  ] = &DD[dM0M  *size_Mat];
+            D.f[dM0P  ] = &DD[dP0M  *size_Mat];
+            D.f[dP0M  ] = &DD[dM0P  *size_Mat];
+            D.f[d0MM  ] = &DD[d0PP  *size_Mat];
+            D.f[d0PP  ] = &DD[d0MM  *size_Mat];
+            D.f[d0MP  ] = &DD[d0PM  *size_Mat];
+            D.f[d0PM  ] = &DD[d0MP  *size_Mat];
+            D.f[d000] = &DD[d000*size_Mat];
+            D.f[dMMM ] = &DD[dPPP *size_Mat];
+            D.f[dPPM ] = &DD[dMMP *size_Mat];
+            D.f[dMPM ] = &DD[dPMP *size_Mat];
+            D.f[dPMM ] = &DD[dMPP *size_Mat];
+            D.f[dMMP ] = &DD[dPPM *size_Mat];
+            D.f[dPPP ] = &DD[dMMM *size_Mat];
+            D.f[dMPP ] = &DD[dPMM *size_Mat];
+            D.f[dPMP ] = &DD[dMPM *size_Mat];
+         }
+         //////////////////////////////////////////////////////////////////////////
+         real drho = rho[k];//0.0f;//
+         real  vx1 = ux[k]; //0.0f;//
+         real  vx2 = uy[k]; //0.0f;//
+         real  vx3 = uz[k]; //0.0f;//
+         //////////////////////////////////////////////////////////////////////////
+         //index
+         //////////////////////////////////////////////////////////////////////////
+         unsigned int kzero= k;
+         unsigned int ke   = k;
+         unsigned int kw   = neighborX[k];
+         unsigned int kn   = k;
+         unsigned int ks   = neighborY[k];
+         unsigned int kt   = k;
+         unsigned int kb   = neighborZ[k];
+         unsigned int ksw  = neighborY[kw];
+         unsigned int kne  = k;
+         unsigned int kse  = ks;
+         unsigned int knw  = kw;
+         unsigned int kbw  = neighborZ[kw];
+         unsigned int kte  = k;
+         unsigned int kbe  = kb;
+         unsigned int ktw  = kw;
+         unsigned int kbs  = neighborZ[ks];
+         unsigned int ktn  = k;
+         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 = k;
+         unsigned int kbsw = neighborZ[ksw];
+         //////////////////////////////////////////////////////////////////////////
+         real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+
+         (D.f[d000])[kzero] =   c8o27* (drho-cu_sq);
+         (D.f[dP00   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+         (D.f[dM00   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+         (D.f[d0P0   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+         (D.f[d0M0   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+         (D.f[d00P   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+         (D.f[d00M   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+         (D.f[dPP0  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+         (D.f[dMM0  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+         (D.f[dPM0  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+         (D.f[dMP0  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+         (D.f[dP0P  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+         (D.f[dM0M  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+         (D.f[dP0M  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+         (D.f[dM0P  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+         (D.f[d0PP  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+         (D.f[d0MM  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+         (D.f[d0PM  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+         (D.f[d0MP  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+         (D.f[dPPP ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+         (D.f[dMMM ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+         (D.f[dPPM ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+         (D.f[dMMP ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+         (D.f[dPMP ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+         (D.f[dMPM ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+         (D.f[dPMM ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+         (D.f[dMPP ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      }
+	  else
+	  {
+		  //////////////////////////////////////////////////////////////////////////
+		  Distributions27 D;
+		  D.f[d000] = &DD[d000*size_Mat];
+		  //////////////////////////////////////////////////////////////////////////
+		  (D.f[d000])[k] = c96o1;
+		  //////////////////////////////////////////////////////////////////////////
+	  }
+   }
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h
rename to src/gpu/core/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorType.h b/src/gpu/core/PreProcessor/PreProcessorType.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorType.h
rename to src/gpu/core/PreProcessor/PreProcessorType.h
diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp b/src/gpu/core/Restart/RestartObject.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp
rename to src/gpu/core/Restart/RestartObject.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.h b/src/gpu/core/Restart/RestartObject.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Restart/RestartObject.h
rename to src/gpu/core/Restart/RestartObject.h
diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp b/src/gpu/core/Restart/RestartObjectTests.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp
rename to src/gpu/core/Restart/RestartObjectTests.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.cpp b/src/gpu/core/Temperature/FindQTemp.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.cpp
rename to src/gpu/core/Temperature/FindQTemp.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h b/src/gpu/core/Temperature/FindQTemp.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h
rename to src/gpu/core/Temperature/FindQTemp.h
diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.cpp b/src/gpu/core/Temperature/FindTemperature.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.cpp
rename to src/gpu/core/Temperature/FindTemperature.cpp
diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.h b/src/gpu/core/Temperature/FindTemperature.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.h
rename to src/gpu/core/Temperature/FindTemperature.h
diff --git a/src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.cpp b/src/gpu/core/TurbulenceModels/TurbulenceModelFactory.cpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.cpp
rename to src/gpu/core/TurbulenceModels/TurbulenceModelFactory.cpp
diff --git a/src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h b/src/gpu/core/TurbulenceModels/TurbulenceModelFactory.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h
rename to src/gpu/core/TurbulenceModels/TurbulenceModelFactory.h
diff --git a/src/gpu/VirtualFluids_GPU/Utilities/Buffer2D.hpp b/src/gpu/core/Utilities/Buffer2D.hpp
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Utilities/Buffer2D.hpp
rename to src/gpu/core/Utilities/Buffer2D.hpp
diff --git a/src/gpu/core/Utilities/FindNeighbors.h b/src/gpu/core/Utilities/FindNeighbors.h
new file mode 100644
index 0000000000000000000000000000000000000000..0e0a9b5691b03a567821f684c40fb1a20bf2d232
--- /dev/null
+++ b/src/gpu/core/Utilities/FindNeighbors.h
@@ -0,0 +1,76 @@
+#ifndef FIND_NEIGHBORS_H
+#define FIND_NEIGHBORS_H
+
+#include <map>
+
+#include "Parameter/Parameter.h"
+#include "lbm/constants/D3Q27.h"
+
+using namespace vf::lbm::dir;
+
+struct countersForPointerChasing
+{
+    uint counterInverse;
+    uint counterX;
+    uint counterY;
+    uint counterZ;
+};
+
+const std::map<const size_t, const countersForPointerChasing> mapForPointerChasing =
+{
+    {d000, countersForPointerChasing{0, 0, 0, 0}},
+    {dP00, countersForPointerChasing{0, 1, 0, 0}},
+    {dM00, countersForPointerChasing{1, 0, 1, 1}},
+    {d0P0, countersForPointerChasing{0, 0, 1, 0}},
+    {d0M0, countersForPointerChasing{1, 1, 0, 1}},
+    {d00P, countersForPointerChasing{0, 0, 0, 1}},
+    {d00M, countersForPointerChasing{1, 1, 1, 0}},
+
+    {dPP0, countersForPointerChasing{0, 1, 1, 0}},
+    {dMM0, countersForPointerChasing{1, 0, 0, 1}},
+    {dPM0, countersForPointerChasing{1, 2, 0, 1}},
+    {dMP0, countersForPointerChasing{1, 0, 2, 1}},
+    {dP0P, countersForPointerChasing{0, 1, 0, 1}},
+    {dM0M, countersForPointerChasing{1, 0, 1, 0}},
+    {dP0M, countersForPointerChasing{1, 2, 1, 0}},
+    {dM0P, countersForPointerChasing{1, 0, 1, 2}},
+    {d0PP, countersForPointerChasing{0, 0, 1, 1}},
+    {d0MM, countersForPointerChasing{1, 1, 0, 0}},
+    {d0PM, countersForPointerChasing{1, 1, 2, 0}},
+    {d0MP, countersForPointerChasing{1, 1, 0, 2}},
+
+    {dPPP, countersForPointerChasing{0, 1, 1, 1}},
+    {dMPP, countersForPointerChasing{1, 0, 2, 2}},
+    {dPMP, countersForPointerChasing{1, 2, 0, 2}},
+    {dMMP, countersForPointerChasing{1, 0, 0, 2}},
+    {dPPM, countersForPointerChasing{1, 2, 2, 0}},
+    {dMPM, countersForPointerChasing{1, 0, 2, 0}},
+    {dPMM, countersForPointerChasing{1, 2, 0, 0}},
+    {dMMM, countersForPointerChasing{1, 0, 0, 0}}
+};
+
+// Only use for fluid nodes!
+inline uint getNeighborIndex(LBMSimulationParameter* parH, const uint position, const int direction)
+{
+    uint nodeIndex = position;
+
+    if (mapForPointerChasing.at(direction).counterInverse != 0) {
+        nodeIndex = parH->neighborInverse[nodeIndex];
+    }
+
+    for (uint x = 0; x < mapForPointerChasing.at(direction).counterX; x++) {
+        nodeIndex = parH->neighborX[nodeIndex];
+    }
+
+    for (uint y = 0; y < mapForPointerChasing.at(direction).counterY; y++) {
+        nodeIndex = parH->neighborY[nodeIndex];
+    }
+
+    for (uint z = 0; z < mapForPointerChasing.at(direction).counterZ; z++) {
+        nodeIndex = parH->neighborZ[nodeIndex];
+    }
+
+    return nodeIndex;
+}
+
+#endif
diff --git a/src/gpu/VirtualFluids_GPU/Utilities/testUtilitiesGPU.h b/src/gpu/core/Utilities/testUtilitiesGPU.h
similarity index 100%
rename from src/gpu/VirtualFluids_GPU/Utilities/testUtilitiesGPU.h
rename to src/gpu/core/Utilities/testUtilitiesGPU.h
diff --git a/src/lbm/MacroscopicQuantities.h b/src/lbm/MacroscopicQuantities.h
index 1af676d61941d4d78a422cb39729ddf52d3fbe02..269bbe325afda2c65905350d3e2c8ffaafbdda74 100644
--- a/src/lbm/MacroscopicQuantities.h
+++ b/src/lbm/MacroscopicQuantities.h
@@ -24,13 +24,13 @@ namespace vf::lbm
 //!
 inline __host__ __device__ real getDensity(const real *const &f /*[27]*/)
 {
-    return ((((f[dir::DIR_PPP] + f[dir::DIR_MMM]) + (f[dir::DIR_MPM] + f[dir::DIR_PMP])) +
-             ((f[dir::DIR_MPP] + f[dir::DIR_PMM]) + (f[dir::DIR_MMP] + f[dir::DIR_PPM]))) +
-            (((f[dir::DIR_0MP] + f[dir::DIR_0PM]) + (f[dir::DIR_0MM] + f[dir::DIR_0PP])) +
-             ((f[dir::DIR_M0P] + f[dir::DIR_P0M]) + (f[dir::DIR_M0M] + f[dir::DIR_P0P])) +
-             ((f[dir::DIR_MP0] + f[dir::DIR_PM0]) + (f[dir::DIR_MM0] + f[dir::DIR_PP0]))) +
-            f[dir::DIR_000]) +
-           ((f[dir::DIR_M00] + f[dir::DIR_P00]) + (f[dir::DIR_0M0] + f[dir::DIR_0P0]) + (f[dir::DIR_00M] + f[dir::DIR_00P]));
+    return ((((f[dir::dPPP] + f[dir::dMMM]) + (f[dir::dMPM] + f[dir::dPMP])) +
+             ((f[dir::dMPP] + f[dir::dPMM]) + (f[dir::dMMP] + f[dir::dPPM]))) +
+            (((f[dir::d0MP] + f[dir::d0PM]) + (f[dir::d0MM] + f[dir::d0PP])) +
+             ((f[dir::dM0P] + f[dir::dP0M]) + (f[dir::dM0M] + f[dir::dP0P])) +
+             ((f[dir::dMP0] + f[dir::dPM0]) + (f[dir::dMM0] + f[dir::dPP0]))) +
+            f[dir::d000]) +
+           ((f[dir::dM00] + f[dir::dP00]) + (f[dir::d0M0] + f[dir::d0P0]) + (f[dir::d00M] + f[dir::d00P]));
 }
 
 /*
@@ -38,20 +38,20 @@ inline __host__ __device__ real getDensity(const real *const &f /*[27]*/)
 */
 inline __host__ __device__ real getIncompressibleVelocityX1(const real *const &f /*[27]*/)
 {
-    return ((((f[dir::DIR_PPP] - f[dir::DIR_MMM]) + (f[dir::DIR_PMP] - f[dir::DIR_MPM])) + ((f[dir::DIR_PMM] - f[dir::DIR_MPP]) + (f[dir::DIR_PPM] - f[dir::DIR_MMP]))) +
-            (((f[dir::DIR_P0M] - f[dir::DIR_M0P]) + (f[dir::DIR_P0P] - f[dir::DIR_M0M])) + ((f[dir::DIR_PM0] - f[dir::DIR_MP0]) + (f[dir::DIR_PP0] - f[dir::DIR_MM0]))) + (f[dir::DIR_P00] - f[dir::DIR_M00]));
+    return ((((f[dir::dPPP] - f[dir::dMMM]) + (f[dir::dPMP] - f[dir::dMPM])) + ((f[dir::dPMM] - f[dir::dMPP]) + (f[dir::dPPM] - f[dir::dMMP]))) +
+            (((f[dir::dP0M] - f[dir::dM0P]) + (f[dir::dP0P] - f[dir::dM0M])) + ((f[dir::dPM0] - f[dir::dMP0]) + (f[dir::dPP0] - f[dir::dMM0]))) + (f[dir::dP00] - f[dir::dM00]));
 }
 
 inline __host__ __device__ real getIncompressibleVelocityX2(const real *const &f /*[27]*/)
 {
-    return ((((f[dir::DIR_PPP] - f[dir::DIR_MMM]) + (f[dir::DIR_MPM] - f[dir::DIR_PMP])) + ((f[dir::DIR_MPP] - f[dir::DIR_PMM]) + (f[dir::DIR_PPM] - f[dir::DIR_MMP]))) +
-            (((f[dir::DIR_0PM] - f[dir::DIR_0MP]) + (f[dir::DIR_0PP] - f[dir::DIR_0MM])) + ((f[dir::DIR_MP0] - f[dir::DIR_PM0]) + (f[dir::DIR_PP0] - f[dir::DIR_MM0]))) + (f[dir::DIR_0P0] - f[dir::DIR_0M0]));
+    return ((((f[dir::dPPP] - f[dir::dMMM]) + (f[dir::dMPM] - f[dir::dPMP])) + ((f[dir::dMPP] - f[dir::dPMM]) + (f[dir::dPPM] - f[dir::dMMP]))) +
+            (((f[dir::d0PM] - f[dir::d0MP]) + (f[dir::d0PP] - f[dir::d0MM])) + ((f[dir::dMP0] - f[dir::dPM0]) + (f[dir::dPP0] - f[dir::dMM0]))) + (f[dir::d0P0] - f[dir::d0M0]));
 }
 
 inline __host__ __device__ real getIncompressibleVelocityX3(const real *const &f /*[27]*/)
 {
-    return ((((f[dir::DIR_PPP] - f[dir::DIR_MMM]) + (f[dir::DIR_PMP] - f[dir::DIR_MPM])) + ((f[dir::DIR_MPP] - f[dir::DIR_PMM]) + (f[dir::DIR_MMP] - f[dir::DIR_PPM]))) +
-            (((f[dir::DIR_0MP] - f[dir::DIR_0PM]) + (f[dir::DIR_0PP] - f[dir::DIR_0MM])) + ((f[dir::DIR_M0P] - f[dir::DIR_P0M]) + (f[dir::DIR_P0P] - f[dir::DIR_M0M]))) + (f[dir::DIR_00P] - f[dir::DIR_00M]));
+    return ((((f[dir::dPPP] - f[dir::dMMM]) + (f[dir::dPMP] - f[dir::dMPM])) + ((f[dir::dMPP] - f[dir::dPMM]) + (f[dir::dMMP] - f[dir::dPPM]))) +
+            (((f[dir::d0MP] - f[dir::d0PM]) + (f[dir::d0PP] - f[dir::d0MM])) + ((f[dir::dM0P] - f[dir::dP0M]) + (f[dir::dP0P] - f[dir::dM0M]))) + (f[dir::d00P] - f[dir::d00M]));
 }
 
 inline __host__ __device__ void getIncompressibleMacroscopicValues(const real *const &f /*[27]*/, real &rho, real &vx1, real &vx2, real &vx3)
@@ -159,12 +159,12 @@ inline __host__ __device__ void getCompressibleMacroscopicValues(const Distribut
 */
 inline __host__ __device__ real getPressure(const real *const &f27, const real& rho, const real& vx, const real& vy, const real& vz)
 {
-    return (f27[dir::DIR_P00] + f27[dir::DIR_M00] + f27[dir::DIR_0P0] + f27[dir::DIR_0M0] + f27[dir::DIR_00P] + f27[dir::DIR_00M] + 
-    basics::constant::c2o1 * (f27[dir::DIR_PP0] + f27[dir::DIR_MM0] + f27[dir::DIR_PM0] + f27[dir::DIR_MP0] + f27[dir::DIR_P0P] + 
-                      f27[dir::DIR_M0M] + f27[dir::DIR_P0M] + f27[dir::DIR_M0P] + f27[dir::DIR_0PP] + f27[dir::DIR_0MM] + 
-                      f27[dir::DIR_0PM] + f27[dir::DIR_0MP]) + 
-    basics::constant::c3o1 * (f27[dir::DIR_PPP] + f27[dir::DIR_MMP] + f27[dir::DIR_PMP] + f27[dir::DIR_MPP] + 
-                      f27[dir::DIR_PPM] + f27[dir::DIR_MMM] + f27[dir::DIR_PMM] + f27[dir::DIR_MPM]) -
+    return (f27[dir::dP00] + f27[dir::dM00] + f27[dir::d0P0] + f27[dir::d0M0] + f27[dir::d00P] + f27[dir::d00M] + 
+    basics::constant::c2o1 * (f27[dir::dPP0] + f27[dir::dMM0] + f27[dir::dPM0] + f27[dir::dMP0] + f27[dir::dP0P] + 
+                      f27[dir::dM0M] + f27[dir::dP0M] + f27[dir::dM0P] + f27[dir::d0PP] + f27[dir::d0MM] + 
+                      f27[dir::d0PM] + f27[dir::d0MP]) + 
+    basics::constant::c3o1 * (f27[dir::dPPP] + f27[dir::dMMP] + f27[dir::dPMP] + f27[dir::dMPP] + 
+                      f27[dir::dPPM] + f27[dir::dMMM] + f27[dir::dPMM] + f27[dir::dMPM]) -
     rho - (vx * vx + vy * vy + vz * vz) * (basics::constant::c1o1 + rho)) * 
     basics::constant::c1o2 + rho; // times zero for incompressible case                 
                           // Attention: op defined directly to op = 1 ; ^^^^(1.0/op-0.5)=0.5
diff --git a/src/lbm/MacroscopicQuantitiesTests.cpp b/src/lbm/MacroscopicQuantitiesTests.cpp
index b39387ae7ac741cc4dc36b4c58de4bad43052793..246c3370e48225c2b31b6d89d0bc6314e18975da 100644
--- a/src/lbm/MacroscopicQuantitiesTests.cpp
+++ b/src/lbm/MacroscopicQuantitiesTests.cpp
@@ -47,7 +47,7 @@ TEST_F(MacroscopicQuantitiesTest, whenFsAreEqual_velocityInEachDirectionShouldBe
 
 TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Eis2_velocityInX1ShouldBeOne)
 {
-    f[dir::DIR_P00] = 2.;
+    f[dir::dP00] = 2.;
 
     const double velocityX1 = getIncompressibleVelocityX1(f.data());
     const double velocityX2 = getIncompressibleVelocityX2(f.data());
@@ -64,7 +64,7 @@ TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Eis2_velocityInX1ShouldB
 
 TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Nis2_velocityInX2ShouldBeOne)
 {
-    f[dir::DIR_0P0] = 2.;
+    f[dir::d0P0] = 2.;
 
     const double velocity = getIncompressibleVelocityX2(f.data());
 
@@ -75,7 +75,7 @@ TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Nis2_velocityInX2ShouldB
 
 TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Tis2_velocityInX3ShouldBeOne)
 {
-    f[dir::DIR_00P] = 2.;
+    f[dir::d00P] = 2.;
 
     const double velocity = getIncompressibleVelocityX3(f.data());
 
@@ -85,7 +85,7 @@ TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Tis2_velocityInX3ShouldB
 
 TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_checkCompressibleValues)
 {
-    f[dir::DIR_P00] = 2.;
+    f[dir::dP00] = 2.;
 
     real rho{0}, vx1{0}, vx2{0}, vx3{0};
     getCompressibleMacroscopicValues(f.data(), rho, vx1, vx2, vx3);
diff --git a/src/lbm/collision/K17CompressibleNavierStokes.h b/src/lbm/collision/K17CompressibleNavierStokes.h
index 33fd0afcef01f580427b2cc940ff06e13216bc6f..a0a4b9dcd70582952b4b77c6db2a7866b82186bc 100644
--- a/src/lbm/collision/K17CompressibleNavierStokes.h
+++ b/src/lbm/collision/K17CompressibleNavierStokes.h
@@ -29,16 +29,17 @@
 //! \file CumlantK17_Device.cu
 //! \author Anna Wellmann, Martin Schönherr, Henry Korb, Henrik Asmuth
 //! \date 05/12/2022
-//! \brief Kernel for CumulantK17 including different turbulence models and options for local body forces and writing macroscopic variables
+//! \brief Kernel for CumulantK17 including different turbulence models and options for local body forces and writing
+//! macroscopic variables
 //!
-//! CumulantK17 kernel using chimera transformations and quartic limiters as present in Geier et al. (2017). Additional options are three different
-//! eddy-viscosity turbulence models (Smagorinsky, AMD, QR) that can be set via the template parameter turbulenceModel (with default
-//! TurbulenceModel::None).
-//! The kernel is executed separately for each subset of fluid node indices with a different tag CollisionTemplate. For each subset, only the locally
-//! required options are switched on ( \param writeMacroscopicVariables and/or \param applyBodyForce) in order to minimize memory accesses. The default
-//! refers to the plain cumlant kernel (CollisionTemplate::Default).
-//! Nodes are added to subsets (taggedFluidNodes) in Simulation::init using a corresponding tag with different values of CollisionTemplate. These subsets
-//! are provided by the utilized PostCollisionInteractiors depending on they specific requirements (e.g. writeMacroscopicVariables for probes).
+//! CumulantK17 kernel using chimera transformations and quartic limiters as present in Geier et al. (2017). Additional
+//! options are three different eddy-viscosity turbulence models (Smagorinsky, AMD, QR) that can be set via the template
+//! parameter turbulenceModel (with default TurbulenceModel::None). The kernel is executed separately for each subset of
+//! fluid node indices with a different tag CollisionTemplate. For each subset, only the locally required options are
+//! switched on ( \param writeMacroscopicVariables and/or \param applyBodyForce) in order to minimize memory accesses. The
+//! default refers to the plain cumlant kernel (CollisionTemplate::Default). Nodes are added to subsets (taggedFluidNodes) in
+//! Simulation::init using a corresponding tag with different values of CollisionTemplate. These subsets are provided by the
+//! utilized PostCollisionInteractiors depending on they specific requirements (e.g. writeMacroscopicVariables for probes).
 
 //=======================================================================================
 #include <basics/constants/NumericConstants.h>
@@ -84,64 +85,64 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
 {
     auto& distribution = parameter.distribution;
 
-    real f_000 = distribution[DIR_000];
-    real f_P00 = distribution[DIR_P00];
-    real f_M00 = distribution[DIR_M00];
-    real f_0P0 = distribution[DIR_0P0];
-    real f_0M0 = distribution[DIR_0M0];
-    real f_00P = distribution[DIR_00P];
-    real f_00M = distribution[DIR_00M];
-    real f_PP0 = distribution[DIR_PP0];
-    real f_MM0 = distribution[DIR_MM0];
-    real f_PM0 = distribution[DIR_PM0];
-    real f_MP0 = distribution[DIR_MP0];
-    real f_P0P = distribution[DIR_P0P];
-    real f_M0M = distribution[DIR_M0M];
-    real f_P0M = distribution[DIR_P0M];
-    real f_M0P = distribution[DIR_M0P];
-    real f_0PP = distribution[DIR_0PP];
-    real f_0MM = distribution[DIR_0MM];
-    real f_0PM = distribution[DIR_0PM];
-    real f_0MP = distribution[DIR_0MP];
-    real f_PPP = distribution[DIR_PPP];
-    real f_MPP = distribution[DIR_MPP];
-    real f_PMP = distribution[DIR_PMP];
-    real f_MMP = distribution[DIR_MMP];
-    real f_PPM = distribution[DIR_PPM];
-    real f_MPM = distribution[DIR_MPM];
-    real f_PMM = distribution[DIR_PMM];
-    real f_MMM = distribution[DIR_MMM];
+    real& f000 = distribution[d000];
+    real& fP00 = distribution[dP00];
+    real& fM00 = distribution[dM00];
+    real& f0P0 = distribution[d0P0];
+    real& f0M0 = distribution[d0M0];
+    real& f00P = distribution[d00P];
+    real& f00M = distribution[d00M];
+    real& fPP0 = distribution[dPP0];
+    real& fMM0 = distribution[dMM0];
+    real& fPM0 = distribution[dPM0];
+    real& fMP0 = distribution[dMP0];
+    real& fP0P = distribution[dP0P];
+    real& fM0M = distribution[dM0M];
+    real& fP0M = distribution[dP0M];
+    real& fM0P = distribution[dM0P];
+    real& f0PP = distribution[d0PP];
+    real& f0MM = distribution[d0MM];
+    real& f0PM = distribution[d0PM];
+    real& f0MP = distribution[d0MP];
+    real& fPPP = distribution[dPPP];
+    real& fMPP = distribution[dMPP];
+    real& fPMP = distribution[dPMP];
+    real& fMMP = distribution[dMMP];
+    real& fPPM = distribution[dPPM];
+    real& fMPM = distribution[dMPM];
+    real& fPMM = distribution[dPMM];
+    real& fMMM = distribution[dMMM];
 
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Define aliases to use the same variable for the moments (m's):
     //!
-    real& m_111 = f_000;
-    real& m_211 = f_P00;
-    real& m_011 = f_M00;
-    real& m_121 = f_0P0;
-    real& m_101 = f_0M0;
-    real& m_112 = f_00P;
-    real& m_110 = f_00M;
-    real& m_221 = f_PP0;
-    real& m_001 = f_MM0;
-    real& m_201 = f_PM0;
-    real& m_021 = f_MP0;
-    real& m_212 = f_P0P;
-    real& m_010 = f_M0M;
-    real& m_210 = f_P0M;
-    real& m_012 = f_M0P;
-    real& m_122 = f_0PP;
-    real& m_100 = f_0MM;
-    real& m_120 = f_0PM;
-    real& m_102 = f_0MP;
-    real& m_222 = f_PPP;
-    real& m_022 = f_MPP;
-    real& m_202 = f_PMP;
-    real& m_002 = f_MMP;
-    real& m_220 = f_PPM;
-    real& m_020 = f_MPM;
-    real& m_200 = f_PMM;
-    real& m_000 = f_MMM;
+    real& m111 = f000;
+    real& m211 = fP00;
+    real& m011 = fM00;
+    real& m121 = f0P0;
+    real& m101 = f0M0;
+    real& m112 = f00P;
+    real& m110 = f00M;
+    real& m221 = fPP0;
+    real& m001 = fMM0;
+    real& m201 = fPM0;
+    real& m021 = fMP0;
+    real& m212 = fP0P;
+    real& m010 = fM0M;
+    real& m210 = fP0M;
+    real& m012 = fM0P;
+    real& m122 = f0PP;
+    real& m100 = f0MM;
+    real& m120 = f0PM;
+    real& m102 = f0MP;
+    real& m222 = fPPP;
+    real& m022 = fMPP;
+    real& m202 = fPMP;
+    real& m002 = fMMP;
+    real& m220 = fPPM;
+    real& m020 = fMPM;
+    real& m200 = fPMM;
+    real& m000 = fMMM;
 
     //////////////////////////////////////////////////////(unsigned long)//////////////////////////////
     //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
@@ -182,57 +183,57 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //!
     ////////////////////////////////////////////////////////////////////////////////////
     // Z - Dir
-    forwardInverseChimeraWithK(f_MMM, f_MM0, f_MMP, vvz, vz2, c36o1, c1o36);
-    forwardInverseChimeraWithK(f_M0M, f_M00, f_M0P, vvz, vz2, c9o1,  c1o9);
-    forwardInverseChimeraWithK(f_MPM, f_MP0, f_MPP, vvz, vz2, c36o1, c1o36);
-    forwardInverseChimeraWithK(f_0MM, f_0M0, f_0MP, vvz, vz2, c9o1,  c1o9);
-    forwardInverseChimeraWithK(f_00M, f_000, f_00P, vvz, vz2, c9o4,  c4o9);
-    forwardInverseChimeraWithK(f_0PM, f_0P0, f_0PP, vvz, vz2, c9o1,  c1o9);
-    forwardInverseChimeraWithK(f_PMM, f_PM0, f_PMP, vvz, vz2, c36o1, c1o36);
-    forwardInverseChimeraWithK(f_P0M, f_P00, f_P0P, vvz, vz2, c9o1,  c1o9);
-    forwardInverseChimeraWithK(f_PPM, f_PP0, f_PPP, vvz, vz2, c36o1, c1o36);
+    forwardInverseChimeraWithK(fMMM, fMM0, fMMP, vvz, vz2, c36o1, c1o36);
+    forwardInverseChimeraWithK(fM0M, fM00, fM0P, vvz, vz2, c9o1,  c1o9);
+    forwardInverseChimeraWithK(fMPM, fMP0, fMPP, vvz, vz2, c36o1, c1o36);
+    forwardInverseChimeraWithK(f0MM, f0M0, f0MP, vvz, vz2, c9o1,  c1o9);
+    forwardInverseChimeraWithK(f00M, f000, f00P, vvz, vz2, c9o4,  c4o9);
+    forwardInverseChimeraWithK(f0PM, f0P0, f0PP, vvz, vz2, c9o1,  c1o9);
+    forwardInverseChimeraWithK(fPMM, fPM0, fPMP, vvz, vz2, c36o1, c1o36);
+    forwardInverseChimeraWithK(fP0M, fP00, fP0P, vvz, vz2, c9o1,  c1o9);
+    forwardInverseChimeraWithK(fPPM, fPP0, fPPP, vvz, vz2, c36o1, c1o36);
 
     ////////////////////////////////////////////////////////////////////////////////////
     // Y - Dir
-    forwardInverseChimeraWithK(f_MMM, f_M0M, f_MPM, vvy, vy2, c6o1,  c1o6);
-    forwardChimera(            f_MM0, f_M00, f_MP0, vvy, vy2);
-    forwardInverseChimeraWithK(f_MMP, f_M0P, f_MPP, vvy, vy2, c18o1, c1o18);
-    forwardInverseChimeraWithK(f_0MM, f_00M, f_0PM, vvy, vy2, c3o2,  c2o3);
-    forwardChimera(            f_0M0, f_000, f_0P0, vvy, vy2);
-    forwardInverseChimeraWithK(f_0MP, f_00P, f_0PP, vvy, vy2, c9o2,  c2o9);
-    forwardInverseChimeraWithK(f_PMM, f_P0M, f_PPM, vvy, vy2, c6o1,  c1o6);
-    forwardChimera(            f_PM0, f_P00, f_PP0, vvy, vy2);
-    forwardInverseChimeraWithK(f_PMP, f_P0P, f_PPP, vvy, vy2, c18o1, c1o18);
+    forwardInverseChimeraWithK(fMMM, fM0M, fMPM, vvy, vy2, c6o1,  c1o6);
+    forwardChimera(            fMM0, fM00, fMP0, vvy, vy2);
+    forwardInverseChimeraWithK(fMMP, fM0P, fMPP, vvy, vy2, c18o1, c1o18);
+    forwardInverseChimeraWithK(f0MM, f00M, f0PM, vvy, vy2, c3o2,  c2o3);
+    forwardChimera(            f0M0, f000, f0P0, vvy, vy2);
+    forwardInverseChimeraWithK(f0MP, f00P, f0PP, vvy, vy2, c9o2,  c2o9);
+    forwardInverseChimeraWithK(fPMM, fP0M, fPPM, vvy, vy2, c6o1,  c1o6);
+    forwardChimera(            fPM0, fP00, fPP0, vvy, vy2);
+    forwardInverseChimeraWithK(fPMP, fP0P, fPPP, vvy, vy2, c18o1, c1o18);
 
     ////////////////////////////////////////////////////////////////////////////////////
     // X - Dir
-    forwardInverseChimeraWithK(f_MMM, f_0MM, f_PMM, vvx, vx2, c1o1, c1o1);
-    forwardChimera(            f_M0M, f_00M, f_P0M, vvx, vx2);
-    forwardInverseChimeraWithK(f_MPM, f_0PM, f_PPM, vvx, vx2, c3o1, c1o3);
-    forwardChimera(            f_MM0, f_0M0, f_PM0, vvx, vx2);
-    forwardChimera(            f_M00, f_000, f_P00, vvx, vx2);
-    forwardChimera(            f_MP0, f_0P0, f_PP0, vvx, vx2);
-    forwardInverseChimeraWithK(f_MMP, f_0MP, f_PMP, vvx, vx2, c3o1, c1o3);
-    forwardChimera(            f_M0P, f_00P, f_P0P, vvx, vx2);
-    forwardInverseChimeraWithK(f_MPP, f_0PP, f_PPP, vvx, vx2, c3o1, c1o9);
+    forwardInverseChimeraWithK(fMMM, f0MM, fPMM, vvx, vx2, c1o1, c1o1);
+    forwardChimera(            fM0M, f00M, fP0M, vvx, vx2);
+    forwardInverseChimeraWithK(fMPM, f0PM, fPPM, vvx, vx2, c3o1, c1o3);
+    forwardChimera(            fMM0, f0M0, fPM0, vvx, vx2);
+    forwardChimera(            fM00, f000, fP00, vvx, vx2);
+    forwardChimera(            fMP0, f0P0, fPP0, vvx, vx2);
+    forwardInverseChimeraWithK(fMMP, f0MP, fPMP, vvx, vx2, c3o1, c1o3);
+    forwardChimera(            fM0P, f00P, fP0P, vvx, vx2);
+    forwardInverseChimeraWithK(fMPP, f0PP, fPPP, vvx, vx2, c3o1, c1o9);
 
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations
     //! according to <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>
     //!  => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE].
-    //!  - Trace of second order cumulants \f$ C_{200}+C_{020}+C_{002} \f$ used to adjust bulk
-    //!  viscosity:\f$\omega_2=OxxPyyPzz=1.0 \f$.
-    //!  - Third order cumulants \f$ C_{120}+C_{102}, C_{210}+C_{012}, C_{201}+C_{021} \f$: \f$ \omega_3=OxyyPxzz
-    //!  \f$ set according to Eq. (111) with simplifications assuming \f$ \omega_2=1.0\f$.
-    //!  - Third order cumulants \f$ C_{120}-C_{102}, C_{210}-C_{012}, C_{201}-C_{021} \f$: \f$ \omega_4 = OxyyMxzz
-    //!  \f$ set according to Eq. (112) with simplifications assuming \f$ \omega_2 = 1.0\f$.
-    //!  - Third order cumulants \f$ C_{111} \f$: \f$ \omega_5 = Oxyz \f$ set according to Eq. (113) with
-    //!  simplifications assuming \f$ \omega_2 = 1.0\f$  (modify for different bulk viscosity).
-    //!  - Fourth order cumulants \f$ C_{220}, C_{202}, C_{022}, C_{211}, C_{121}, C_{112} \f$: for simplification
-    //!  all set to the same default value \f$ \omega_6=\omega_7=\omega_8=O4=1.0 \f$.
-    //!  - Fifth order cumulants \f$ C_{221}, C_{212}, C_{122}\f$: \f$\omega_9=O5=1.0\f$.
-    //!  - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$.
+    //!  - Trace of second order cumulants \f$ C{200}+C{020}+C{002} \f$ used to adjust bulk
+    //!  viscosity:\f$\omega2=OxxPyyPzz=1.0 \f$.
+    //!  - Third order cumulants \f$ C{120}+C{102}, C{210}+C{012}, C{201}+C{021} \f$: \f$ \omega3=OxyyPxzz
+    //!  \f$ set according to Eq. (111) with simplifications assuming \f$ \omega2=1.0\f$.
+    //!  - Third order cumulants \f$ C{120}-C{102}, C{210}-C{012}, C{201}-C{021} \f$: \f$ \omega4 = OxyyMxzz
+    //!  \f$ set according to Eq. (112) with simplifications assuming \f$ \omega2 = 1.0\f$.
+    //!  - Third order cumulants \f$ C{111} \f$: \f$ \omega5 = Oxyz \f$ set according to Eq. (113) with
+    //!  simplifications assuming \f$ \omega2 = 1.0\f$  (modify for different bulk viscosity).
+    //!  - Fourth order cumulants \f$ C{220}, C{202}, C{022}, C{211}, C{121}, C{112} \f$: for simplification
+    //!  all set to the same default value \f$ \omega6=\omega7=\omega8=O4=1.0 \f$.
+    //!  - Fifth order cumulants \f$ C{221}, C{212}, C{122}\f$: \f$\omega9=O5=1.0\f$.
+    //!  - Sixth order cumulant \f$ C{222}\f$: \f$\omega{10}=O6=1.0\f$.
     //!
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Calculate modified omega with turbulent viscosity
@@ -259,7 +260,7 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     real O6 = c1o1;
 
     ////////////////////////////////////////////////////////////////////////////////////
-    //! - A and DIR_00M: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
+    //! - A and d00M: 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).
@@ -274,39 +275,39 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //!
     ////////////////////////////////////////////////////////////
     // 4.
-    real c_211 = m_211 - ((m_200 + c1o3) * m_011 + c2o1 * m_110 * m_101) * oneOverRho;
-    real c_121 = m_121 - ((m_020 + c1o3) * m_101 + c2o1 * m_110 * m_011) * oneOverRho;
-    real c_112 = m_112 - ((m_002 + c1o3) * m_110 + c2o1 * m_101 * m_011) * oneOverRho;
+    real cm211 = m211 - ((m200 + c1o3) * m011 + c2o1 * m110 * m101) * oneOverRho;
+    real cm121 = m121 - ((m020 + c1o3) * m101 + c2o1 * m110 * m011) * oneOverRho;
+    real cm112 = m112 - ((m002 + c1o3) * m110 + c2o1 * m101 * m011) * oneOverRho;
 
-    real c_220 = m_220 - (((m_200 * m_020 + c2o1 * m_110 * m_110) + c1o3 * (m_200 + m_020)) * oneOverRho - c1o9 * (drho * oneOverRho));
-    real c_202 = m_202 - (((m_200 * m_002 + c2o1 * m_101 * m_101) + c1o3 * (m_200 + m_002)) * oneOverRho - c1o9 * (drho * oneOverRho));
-    real c_022 = m_022 - (((m_002 * m_020 + c2o1 * m_011 * m_011) + c1o3 * (m_002 + m_020)) * oneOverRho - c1o9 * (drho * oneOverRho));
+    real cm220 = m220 - (((m200 * m020 + c2o1 * m110 * m110) + c1o3 * (m200 + m020)) * oneOverRho - c1o9 * (drho * oneOverRho));
+    real cm202 = m202 - (((m200 * m002 + c2o1 * m101 * m101) + c1o3 * (m200 + m002)) * oneOverRho - c1o9 * (drho * oneOverRho));
+    real cm022 = m022 - (((m002 * m020 + c2o1 * m011 * m011) + c1o3 * (m002 + m020)) * oneOverRho - c1o9 * (drho * oneOverRho));
     ////////////////////////////////////////////////////////////
     // 5.
-    real c_122 =
-        m_122 - ((m_002 * m_120 + m_020 * m_102 + c4o1 * m_011 * m_111 + c2o1 * (m_101 * m_021 + m_110 * m_012)) +
-                c1o3 * (m_120 + m_102)) *
+    real cm122 =
+        m122 - ((m002 * m120 + m020 * m102 + c4o1 * m011 * m111 + c2o1 * (m101 * m021 + m110 * m012)) +
+                c1o3 * (m120 + m102)) *
                 oneOverRho;
-    real c_212 =
-        m_212 - ((m_002 * m_210 + m_200 * m_012 + c4o1 * m_101 * m_111 + c2o1 * (m_011 * m_201 + m_110 * m_102)) +
-                c1o3 * (m_210 + m_012)) *
+    real cm212 =
+        m212 - ((m002 * m210 + m200 * m012 + c4o1 * m101 * m111 + c2o1 * (m011 * m201 + m110 * m102)) +
+                c1o3 * (m210 + m012)) *
                 oneOverRho;
-    real c_221 =
-        m_221 - ((m_200 * m_021 + m_020 * m_201 + c4o1 * m_110 * m_111 + c2o1 * (m_101 * m_120 + m_011 * m_210)) +
-                c1o3 * (m_021 + m_201)) *
+    real cm221 =
+        m221 - ((m200 * m021 + m020 * m201 + c4o1 * m110 * m111 + c2o1 * (m101 * m120 + m011 * m210)) +
+                c1o3 * (m021 + m201)) *
                 oneOverRho;
     ////////////////////////////////////////////////////////////
     // 6.
-    real c_222 = m_222 + ((-c4o1 * m_111 * m_111 - (m_200 * m_022 + m_020 * m_202 + m_002 * m_220) -
-                            c4o1 * (m_011 * m_211 + m_101 * m_121 + m_110 * m_112) -
-                            c2o1 * (m_120 * m_102 + m_210 * m_012 + m_201 * m_021)) *
+    real cm222 = m222 + ((-c4o1 * m111 * m111 - (m200 * m022 + m020 * m202 + m002 * m220) -
+                            c4o1 * (m011 * m211 + m101 * m121 + m110 * m112) -
+                            c2o1 * (m120 * m102 + m210 * m012 + m201 * m021)) *
                             oneOverRho +
-                        (c4o1 * (m_101 * m_101 * m_020 + m_011 * m_011 * m_200 + m_110 * m_110 * m_002) +
-                            c2o1 * (m_200 * m_020 * m_002) + c16o1 * m_110 * m_101 * m_011) *
+                        (c4o1 * (m101 * m101 * m020 + m011 * m011 * m200 + m110 * m110 * m002) +
+                            c2o1 * (m200 * m020 * m002) + c16o1 * m110 * m101 * m011) *
                             oneOverRho * oneOverRho -
-                            c1o3 * (m_022 + m_202 + m_220) * oneOverRho - c1o9 * (m_200 + m_020 + m_002) * oneOverRho +
-                        (c2o1 * (m_101 * m_101 + m_011 * m_011 + m_110 * m_110) +
-                            (m_002 * m_020 + m_002 * m_200 + m_020 * m_200) + c1o3 * (m_002 + m_020 + m_200)) *
+                            c1o3 * (m022 + m202 + m220) * oneOverRho - c1o9 * (m200 + m020 + m002) * oneOverRho +
+                        (c2o1 * (m101 * m101 + m011 * m011 + m110 * m110) +
+                            (m002 * m020 + m002 * m200 + m020 * m200) + c1o3 * (m002 + m020 + m200)) *
                             oneOverRho * oneOverRho * c2o3 +
                             c1o27 * ((drho * drho - drho) * oneOverRho * oneOverRho));
 
@@ -315,19 +316,19 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //!
     ////////////////////////////////////////////////////////////
     // 2.
-    real mxxPyyPzz = m_200 + m_020 + m_002;
-    real mxxMyy    = m_200 - m_020;
-    real mxxMzz    = m_200 - m_002;
+    real mxxPyyPzz = m200 + m020 + m002;
+    real mxxMyy    = m200 - m020;
+    real mxxMzz    = m200 - m002;
     ////////////////////////////////////////////////////////////
     // 3.
-    real mxxyPyzz = m_210 + m_012;
-    real mxxyMyzz = m_210 - m_012;
+    real mxxyPyzz = m210 + m012;
+    real mxxyMyzz = m210 - m012;
 
-    real mxxzPyyz = m_201 + m_021;
-    real mxxzMyyz = m_201 - m_021;
+    real mxxzPyyz = m201 + m021;
+    real mxxzMyyz = m201 - m021;
 
-    real mxyyPxzz = m_120 + m_102;
-    real mxyyMxzz = m_120 - m_102;
+    real mxyyPxzz = m120 + m102;
+    real mxyyMxzz = m120 - m102;
 
     ////////////////////////////////////////////////////////////////////////////////////
     // incl. correction
@@ -339,34 +340,35 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> Note that the division by rho is omitted here as we need rho times
     //! the gradients later.
     //!
-    real Dxy  = -c3o1 * omega * m_110;
-    real Dxz  = -c3o1 * omega * m_101;
-    real Dyz  = -c3o1 * omega * m_011;
-    real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (m_000 - mxxPyyPzz);
+    real Dxy = -c3o1 * omega * m110;
+    real Dxz = -c3o1 * omega * m101;
+    real Dyz = -c3o1 * omega * m011;
+    real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (m000 - mxxPyyPzz);
     real dyuy = dxux + omega * c3o2 * mxxMyy;
     real dzuz = dxux + omega * c3o2 * mxxMzz;
 
     ////////////////////////////////////////////////////////////////////////////////////
-    switch (turbulenceModel)
-    {
-    case TurbulenceModel::None:
-    case TurbulenceModel::AMD:  //AMD is computed in separate kernel
-        break;
-    case TurbulenceModel::Smagorinsky:
-        turbulentViscosity.value = calcTurbulentViscositySmagorinsky(turbulentViscosity.SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz , Dyz);
-        break;
-    case TurbulenceModel::QR:
-        turbulentViscosity.value = calcTurbulentViscosityQR(turbulentViscosity.SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz , Dyz);
-        break;
-    default:
-        break;
+    switch (turbulenceModel) {
+        case TurbulenceModel::None:
+        case TurbulenceModel::AMD: // AMD is computed in separate kernel
+            break;
+        case TurbulenceModel::Smagorinsky:
+            turbulentViscosity.value =
+                calcTurbulentViscositySmagorinsky(turbulentViscosity.SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz, Dyz);
+            break;
+        case TurbulenceModel::QR:
+            turbulentViscosity.value =
+                calcTurbulentViscosityQR(turbulentViscosity.SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz, Dyz);
+            break;
+        default:
+            break;
     }
     ////////////////////////////////////////////////////////////
     //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in
     //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
     //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
     //!
-    mxxPyyPzz += OxxPyyPzz * (m_000 - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
+    mxxPyyPzz += OxxPyyPzz * (m000 - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
     mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
     mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
 
@@ -376,9 +378,9 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     // mxxMyy += -(-omega) * (-mxxMyy);
     // mxxMzz += -(-omega) * (-mxxMzz);
     //////////////////////////////////////////////////////////////////////////
-    m_011 += omega * (-m_011);
-    m_101 += omega * (-m_101);
-    m_110 += omega * (-m_110);
+    m011 += omega * (-m011);
+    m101 += omega * (-m101);
+    m110 += omega * (-m110);
 
     ////////////////////////////////////////////////////////////////////////////////////
     // relax
@@ -388,8 +390,8 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //! <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>
     //!
-    real wadjust = Oxyz + (c1o1 - Oxyz) * KERNEL_ABS(m_111) / (KERNEL_ABS(m_111) + quadricLimitD);
-    m_111 += wadjust * (-m_111);
+    real wadjust = Oxyz + (c1o1 - Oxyz) * KERNEL_ABS(m111) / (KERNEL_ABS(m111) + quadricLimitD);
+    m111 += wadjust * (-m111);
     wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * KERNEL_ABS(mxxyPyzz) / (KERNEL_ABS(mxxyPyzz) + quadricLimitP);
     mxxyPyzz += wadjust * (-mxxyPyzz);
     wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * KERNEL_ABS(mxxyMyzz) / (KERNEL_ABS(mxxyMyzz) + quadricLimitM);
@@ -415,16 +417,16 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Compute inverse linear combinations of second and third order cumulants
     //!
-    m_200 = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-    m_020 = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz);
-    m_002 = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz);
-
-    m_210 = ( mxxyMyzz + mxxyPyzz) * c1o2;
-    m_012 = (-mxxyMyzz + mxxyPyzz) * c1o2;
-    m_201 = ( mxxzMyyz + mxxzPyyz) * c1o2;
-    m_021 = (-mxxzMyyz + mxxzPyyz) * c1o2;
-    m_120 = ( mxyyMxzz + mxyyPxzz) * c1o2;
-    m_102 = (-mxyyMxzz + mxyyPxzz) * c1o2;
+    m200 = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
+    m020 = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz);
+    m002 = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz);
+
+    m210 = ( mxxyMyzz + mxxyPyzz) * c1o2;
+    m012 = (-mxxyMyzz + mxxyPyzz) * c1o2;
+    m201 = ( mxxzMyyz + mxxzPyyz) * c1o2;
+    m021 = (-mxxzMyyz + mxxzPyyz) * c1o2;
+    m120 = ( mxyyMxzz + mxyyPxzz) * c1o2;
+    m102 = (-mxyyMxzz + mxyyPxzz) * c1o2;
     //////////////////////////////////////////////////////////////////////////
 
     //////////////////////////////////////////////////////////////////////////
@@ -434,23 +436,23 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //! 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>
     //!
-    c_022 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (c_022);
-    c_202 = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (c_202);
-    c_220 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (c_220);
-    c_112 = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (c_112);
-    c_121 = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (c_121);
-    c_211 = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (c_211);
+    cm022 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (cm022);
+    cm202 = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (cm202);
+    cm220 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (cm220);
+    cm112 = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (cm112);
+    cm121 = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (cm121);
+    cm211 = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (cm211);
 
 
     //////////////////////////////////////////////////////////////////////////
     // 5.
-    c_122 += O5 * (-c_122);
-    c_212 += O5 * (-c_212);
-    c_221 += O5 * (-c_221);
+    cm122 += O5 * (-cm122);
+    cm212 += O5 * (-cm212);
+    cm221 += O5 * (-cm221);
 
     //////////////////////////////////////////////////////////////////////////
     // 6.
-    c_222 += O6 * (-c_222);
+    cm222 += O6 * (-cm222);
 
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in
@@ -460,41 +462,41 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
 
     //////////////////////////////////////////////////////////////////////////
     // 4.
-    m_211 = c_211 + c1o3 * ((c3o1 * m_200 + c1o1) * m_011 + c6o1 * m_110 * m_101) * oneOverRho;
-    m_121 = c_121 + c1o3 * ((c3o1 * m_020 + c1o1) * m_101 + c6o1 * m_110 * m_011) * oneOverRho;
-    m_112 = c_112 + c1o3 * ((c3o1 * m_002 + c1o1) * m_110 + c6o1 * m_101 * m_011) * oneOverRho;
+    m211 = cm211 + c1o3 * ((c3o1 * m200 + c1o1) * m011 + c6o1 * m110 * m101) * oneOverRho;
+    m121 = cm121 + c1o3 * ((c3o1 * m020 + c1o1) * m101 + c6o1 * m110 * m011) * oneOverRho;
+    m112 = cm112 + c1o3 * ((c3o1 * m002 + c1o1) * m110 + c6o1 * m101 * m011) * oneOverRho;
 
-    m_220 =
-        c_220 + (((m_200 * m_020 + c2o1 * m_110 * m_110) * c9o1 + c3o1 * (m_200 + m_020)) * oneOverRho - (drho * oneOverRho)) * c1o9;
-    m_202 =
-        c_202 + (((m_200 * m_002 + c2o1 * m_101 * m_101) * c9o1 + c3o1 * (m_200 + m_002)) * oneOverRho - (drho * oneOverRho)) * c1o9;
-    m_022 =
-        c_022 + (((m_002 * m_020 + c2o1 * m_011 * m_011) * c9o1 + c3o1 * (m_002 + m_020)) * oneOverRho - (drho * oneOverRho)) * c1o9;
+    m220 =
+        cm220 + (((m200 * m020 + c2o1 * m110 * m110) * c9o1 + c3o1 * (m200 + m020)) * oneOverRho - (drho * oneOverRho)) * c1o9;
+    m202 =
+        cm202 + (((m200 * m002 + c2o1 * m101 * m101) * c9o1 + c3o1 * (m200 + m002)) * oneOverRho - (drho * oneOverRho)) * c1o9;
+    m022 =
+        cm022 + (((m002 * m020 + c2o1 * m011 * m011) * c9o1 + c3o1 * (m002 + m020)) * oneOverRho - (drho * oneOverRho)) * c1o9;
 
     //////////////////////////////////////////////////////////////////////////
     // 5.
-    m_122 = c_122 + c1o3 *
-            (c3o1 * (m_002 * m_120 + m_020 * m_102 + c4o1 * m_011 * m_111 + c2o1 * (m_101 * m_021 + m_110 * m_012)) +
-            (m_120 + m_102)) * oneOverRho;
-    m_212 = c_212 + c1o3 *
-            (c3o1 * (m_002 * m_210 + m_200 * m_012 + c4o1 * m_101 * m_111 + c2o1 * (m_011 * m_201 + m_110 * m_102)) +
-            (m_210 + m_012)) * oneOverRho;
-    m_221 = c_221 + c1o3 *
-            (c3o1 * (m_200 * m_021 + m_020 * m_201 + c4o1 * m_110 * m_111 + c2o1 * (m_101 * m_120 + m_011 * m_210)) +
-            (m_021 + m_201)) * oneOverRho;
+    m122 = cm122 + c1o3 *
+            (c3o1 * (m002 * m120 + m020 * m102 + c4o1 * m011 * m111 + c2o1 * (m101 * m021 + m110 * m012)) +
+            (m120 + m102)) * oneOverRho;
+    m212 = cm212 + c1o3 *
+            (c3o1 * (m002 * m210 + m200 * m012 + c4o1 * m101 * m111 + c2o1 * (m011 * m201 + m110 * m102)) +
+            (m210 + m012)) * oneOverRho;
+    m221 = cm221 + c1o3 *
+            (c3o1 * (m200 * m021 + m020 * m201 + c4o1 * m110 * m111 + c2o1 * (m101 * m120 + m011 * m210)) +
+            (m021 + m201)) * oneOverRho;
 
     //////////////////////////////////////////////////////////////////////////
     // 6.
-    m_222 = c_222 - ((-c4o1 * m_111 * m_111 - (m_200 * m_022 + m_020 * m_202 + m_002 * m_220) -
-                    c4o1 * (m_011 * m_211 + m_101 * m_121 + m_110 * m_112) -
-                    c2o1 * (m_120 * m_102 + m_210 * m_012 + m_201 * m_021)) *
+    m222 = cm222 - ((-c4o1 * m111 * m111 - (m200 * m022 + m020 * m202 + m002 * m220) -
+                    c4o1 * (m011 * m211 + m101 * m121 + m110 * m112) -
+                    c2o1 * (m120 * m102 + m210 * m012 + m201 * m021)) *
                     oneOverRho +
-                    (c4o1 * (m_101 * m_101 * m_020 + m_011 * m_011 * m_200 + m_110 * m_110 * m_002) +
-                    c2o1 * (m_200 * m_020 * m_002) + c16o1 * m_110 * m_101 * m_011) *
+                    (c4o1 * (m101 * m101 * m020 + m011 * m011 * m200 + m110 * m110 * m002) +
+                    c2o1 * (m200 * m020 * m002) + c16o1 * m110 * m101 * m011) *
                     oneOverRho * oneOverRho -
-                    c1o3 * (m_022 + m_202 + m_220) * oneOverRho - c1o9 * (m_200 + m_020 + m_002) * oneOverRho +
-                    (c2o1 * (m_101 * m_101 + m_011 * m_011 + m_110 * m_110) +
-                    (m_002 * m_020 + m_002 * m_200 + m_020 * m_200) + c1o3 * (m_002 + m_020 + m_200)) *
+                    c1o3 * (m022 + m202 + m220) * oneOverRho - c1o9 * (m200 + m020 + m002) * oneOverRho +
+                    (c2o1 * (m101 * m101 + m011 * m011 + m110 * m110) +
+                    (m002 * m020 + m002 * m200 + m020 * m200) + c1o3 * (m002 + m020 + m200)) *
                     oneOverRho * oneOverRho * c2o3 +
                     c1o27 * ((drho * drho - drho) * oneOverRho * oneOverRho));
 
@@ -503,9 +505,9 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //! <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>
     //!
-    m_100 = -m_100;
-    m_010 = -m_010;
-    m_001 = -m_001;
+    m100 = -m100;
+    m010 = -m010;
+    m001 = -m001;
 
     ////////////////////////////////////////////////////////////////////////////////////
     //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
@@ -516,67 +518,67 @@ __host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& para
     //!
     ////////////////////////////////////////////////////////////////////////////////////
     // X - Dir
-    backwardInverseChimeraWithK(m_000, m_100, m_200, vvx, vx2, c1o1, c1o1);
-    backwardChimera(            m_010, m_110, m_210, vvx, vx2);
-    backwardInverseChimeraWithK(m_020, m_120, m_220, vvx, vx2, c3o1, c1o3);
-    backwardChimera(            m_001, m_101, m_201, vvx, vx2);
-    backwardChimera(            m_011, m_111, m_211, vvx, vx2);
-    backwardChimera(            m_021, m_121, m_221, vvx, vx2);
-    backwardInverseChimeraWithK(m_002, m_102, m_202, vvx, vx2, c3o1, c1o3);
-    backwardChimera(            m_012, m_112, m_212, vvx, vx2);
-    backwardInverseChimeraWithK(m_022, m_122, m_222, vvx, vx2, c9o1, c1o9);
+    backwardInverseChimeraWithK(m000, m100, m200, vvx, vx2, c1o1, c1o1);
+    backwardChimera(            m010, m110, m210, vvx, vx2);
+    backwardInverseChimeraWithK(m020, m120, m220, vvx, vx2, c3o1, c1o3);
+    backwardChimera(            m001, m101, m201, vvx, vx2);
+    backwardChimera(            m011, m111, m211, vvx, vx2);
+    backwardChimera(            m021, m121, m221, vvx, vx2);
+    backwardInverseChimeraWithK(m002, m102, m202, vvx, vx2, c3o1, c1o3);
+    backwardChimera(            m012, m112, m212, vvx, vx2);
+    backwardInverseChimeraWithK(m022, m122, m222, vvx, vx2, c9o1, c1o9);
 
     ////////////////////////////////////////////////////////////////////////////////////
     // Y - Dir
-    backwardInverseChimeraWithK(m_000, m_010, m_020, vvy, vy2, c6o1, c1o6);
-    backwardChimera(            m_001, m_011, m_021, vvy, vy2);
-    backwardInverseChimeraWithK(m_002, m_012, m_022, vvy, vy2, c18o1, c1o18);
-    backwardInverseChimeraWithK(m_100, m_110, m_120, vvy, vy2, c3o2, c2o3);
-    backwardChimera(            m_101, m_111, m_121, vvy, vy2);
-    backwardInverseChimeraWithK(m_102, m_112, m_122, vvy, vy2, c9o2, c2o9);
-    backwardInverseChimeraWithK(m_200, m_210, m_220, vvy, vy2, c6o1, c1o6);
-    backwardChimera(            m_201, m_211, m_221, vvy, vy2);
-    backwardInverseChimeraWithK(m_202, m_212, m_222, vvy, vy2, c18o1, c1o18);
+    backwardInverseChimeraWithK(m000, m010, m020, vvy, vy2, c6o1, c1o6);
+    backwardChimera(            m001, m011, m021, vvy, vy2);
+    backwardInverseChimeraWithK(m002, m012, m022, vvy, vy2, c18o1, c1o18);
+    backwardInverseChimeraWithK(m100, m110, m120, vvy, vy2, c3o2, c2o3);
+    backwardChimera(            m101, m111, m121, vvy, vy2);
+    backwardInverseChimeraWithK(m102, m112, m122, vvy, vy2, c9o2, c2o9);
+    backwardInverseChimeraWithK(m200, m210, m220, vvy, vy2, c6o1, c1o6);
+    backwardChimera(            m201, m211, m221, vvy, vy2);
+    backwardInverseChimeraWithK(m202, m212, m222, vvy, vy2, c18o1, c1o18);
 
     ////////////////////////////////////////////////////////////////////////////////////
     // Z - Dir
-    backwardInverseChimeraWithK(m_000, m_001, m_002, vvz, vz2, c36o1, c1o36);
-    backwardInverseChimeraWithK(m_010, m_011, m_012, vvz, vz2, c9o1, c1o9);
-    backwardInverseChimeraWithK(m_020, m_021, m_022, vvz, vz2, c36o1, c1o36);
-    backwardInverseChimeraWithK(m_100, m_101, m_102, vvz, vz2, c9o1, c1o9);
-    backwardInverseChimeraWithK(m_110, m_111, m_112, vvz, vz2, c9o4, c4o9);
-    backwardInverseChimeraWithK(m_120, m_121, m_122, vvz, vz2, c9o1, c1o9);
-    backwardInverseChimeraWithK(m_200, m_201, m_202, vvz, vz2, c36o1, c1o36);
-    backwardInverseChimeraWithK(m_210, m_211, m_212, vvz, vz2, c9o1, c1o9);
-    backwardInverseChimeraWithK(m_220, m_221, m_222, vvz, vz2, c36o1, c1o36);
-
-    distribution[DIR_P00] = f_P00;
-    distribution[DIR_M00] = f_M00;
-    distribution[DIR_0P0] = f_0P0;
-    distribution[DIR_0M0] = f_0M0;
-    distribution[DIR_00P] = f_00P;
-    distribution[DIR_00M] = f_00M;
-    distribution[DIR_PP0] = f_PP0;
-    distribution[DIR_MM0] = f_MM0;
-    distribution[DIR_PM0] = f_PM0;
-    distribution[DIR_MP0] = f_MP0;
-    distribution[DIR_P0P] = f_P0P;
-    distribution[DIR_M0M] = f_M0M;
-    distribution[DIR_P0M] = f_P0M;
-    distribution[DIR_M0P] = f_M0P;
-    distribution[DIR_0PP] = f_0PP;
-    distribution[DIR_0MM] = f_0MM;
-    distribution[DIR_0PM] = f_0PM;
-    distribution[DIR_0MP] = f_0MP;
-    distribution[DIR_000] = f_000;
-    distribution[DIR_PPP] = f_PPP;
-    distribution[DIR_PMP] = f_PMP;
-    distribution[DIR_PPM] = f_PPM;
-    distribution[DIR_PMM] = f_PMM;
-    distribution[DIR_MPP] = f_MPP;
-    distribution[DIR_MMP] = f_MMP;
-    distribution[DIR_MPM] = f_MPM;
-    distribution[DIR_MMM] = f_MMM;
+    backwardInverseChimeraWithK(m000, m001, m002, vvz, vz2, c36o1, c1o36);
+    backwardInverseChimeraWithK(m010, m011, m012, vvz, vz2, c9o1, c1o9);
+    backwardInverseChimeraWithK(m020, m021, m022, vvz, vz2, c36o1, c1o36);
+    backwardInverseChimeraWithK(m100, m101, m102, vvz, vz2, c9o1, c1o9);
+    backwardInverseChimeraWithK(m110, m111, m112, vvz, vz2, c9o4, c4o9);
+    backwardInverseChimeraWithK(m120, m121, m122, vvz, vz2, c9o1, c1o9);
+    backwardInverseChimeraWithK(m200, m201, m202, vvz, vz2, c36o1, c1o36);
+    backwardInverseChimeraWithK(m210, m211, m212, vvz, vz2, c9o1, c1o9);
+    backwardInverseChimeraWithK(m220, m221, m222, vvz, vz2, c36o1, c1o36);
+
+    distribution[dP00] = fP00;
+    distribution[dM00] = fM00;
+    distribution[d0P0] = f0P0;
+    distribution[d0M0] = f0M0;
+    distribution[d00P] = f00P;
+    distribution[d00M] = f00M;
+    distribution[dPP0] = fPP0;
+    distribution[dMM0] = fMM0;
+    distribution[dPM0] = fPM0;
+    distribution[dMP0] = fMP0;
+    distribution[dP0P] = fP0P;
+    distribution[dM0M] = fM0M;
+    distribution[dP0M] = fP0M;
+    distribution[dM0P] = fM0P;
+    distribution[d0PP] = f0PP;
+    distribution[d0MM] = f0MM;
+    distribution[d0PM] = f0PM;
+    distribution[d0MP] = f0MP;
+    distribution[d000] = f000;
+    distribution[dPPP] = fPPP;
+    distribution[dPMP] = fPMP;
+    distribution[dPPM] = fPPM;
+    distribution[dPMM] = fPMM;
+    distribution[dMPP] = fMPP;
+    distribution[dMMP] = fMMP;
+    distribution[dMPM] = fMPM;
+    distribution[dMMM] = fMMM;
 
     macroscopicValues.rho = drho;
     macroscopicValues.vx = vvx;
diff --git a/src/lbm/constants/D3Q27.h b/src/lbm/constants/D3Q27.h
index 8b0c8febd0143540a70541c5c9802f9e606f4b9b..292af239e333b79d118150f0cfee5477e895d200 100644
--- a/src/lbm/constants/D3Q27.h
+++ b/src/lbm/constants/D3Q27.h
@@ -1,226 +1,68 @@
 #ifndef LBM_D3Q27_H
 #define LBM_D3Q27_H
 
-#include <map>
-
 #include <basics/DataTypes.h>
 
 namespace vf::lbm::dir
 {
-
 static constexpr size_t STARTDIR = 0;
 static constexpr size_t ENDDIR = 26;
 static constexpr size_t NUMBER_Of_DIRECTIONS = ENDDIR + 1;
 
-// used in the CPU and the GPU version
-static constexpr size_t DIR_000 = 0;
-static constexpr size_t DIR_P00 = 1;
-static constexpr size_t DIR_M00 = 2;
-static constexpr size_t DIR_0P0 = 3;
-static constexpr size_t DIR_0M0 = 4;
-static constexpr size_t DIR_00P = 5;
-static constexpr size_t DIR_00M = 6;
-static constexpr size_t DIR_PP0 = 7;
-static constexpr size_t DIR_MM0 = 8;
-static constexpr size_t DIR_PM0 = 9;
-static constexpr size_t DIR_MP0 = 10;
-static constexpr size_t DIR_P0P = 11;
-static constexpr size_t DIR_M0M = 12;
-static constexpr size_t DIR_P0M = 13;
-static constexpr size_t DIR_M0P = 14;
-static constexpr size_t DIR_0PP = 15;
-static constexpr size_t DIR_0MM = 16;
-static constexpr size_t DIR_0PM = 17;
-static constexpr size_t DIR_0MP = 18;
-static constexpr size_t DIR_PPP = 19;
-static constexpr size_t DIR_MPP = 20;
-static constexpr size_t DIR_PMP = 21;
-static constexpr size_t DIR_MMP = 22;
-static constexpr size_t DIR_PPM = 23;
-static constexpr size_t DIR_MPM = 24;
-static constexpr size_t DIR_PMM = 25;
-static constexpr size_t DIR_MMM = 26;
-
-static constexpr size_t INV_P00 = DIR_M00;
-static constexpr size_t INV_M00 = DIR_P00;
-static constexpr size_t INV_0P0 = DIR_0M0;
-static constexpr size_t INV_0M0 = DIR_0P0;
-static constexpr size_t INV_00P = DIR_00M;
-static constexpr size_t INV_00M = DIR_00P;
-static constexpr size_t INV_PP0 = DIR_MM0;
-static constexpr size_t INV_MM0 = DIR_PP0;
-static constexpr size_t INV_PM0 = DIR_MP0;
-static constexpr size_t INV_MP0 = DIR_PM0;
-static constexpr size_t INV_P0P = DIR_M0M;
-static constexpr size_t INV_M0M = DIR_P0P;
-static constexpr size_t INV_P0M = DIR_M0P;
-static constexpr size_t INV_M0P = DIR_P0M;
-static constexpr size_t INV_0PP = DIR_0MM;
-static constexpr size_t INV_0MM = DIR_0PP;
-static constexpr size_t INV_0PM = DIR_0MP;
-static constexpr size_t INV_0MP = DIR_0PM;
-static constexpr size_t INV_PPP = DIR_MMM;
-static constexpr size_t INV_MPP = DIR_PMM;
-static constexpr size_t INV_PMP = DIR_MPM;
-static constexpr size_t INV_MMP = DIR_PPM;
-static constexpr size_t INV_PPM = DIR_MMP;
-static constexpr size_t INV_MPM = DIR_PMP;
-static constexpr size_t INV_PMM = DIR_MPP;
-static constexpr size_t INV_MMM = DIR_PPP;
-
-static constexpr size_t SGD_P00 = 0;
-static constexpr size_t SGD_M00 = 1;
-static constexpr size_t SGD_0P0 = 2;
-static constexpr size_t SGD_0M0 = 3;
-static constexpr size_t SGD_00P = 4;
-static constexpr size_t SGD_00M = 5;
-static constexpr size_t SGD_PP0 = 6;
-static constexpr size_t SGD_MM0 = 7;
-static constexpr size_t SGD_PM0 = 8;
-static constexpr size_t SGD_MP0 = 9;
-static constexpr size_t SGD_P0P = 10;
-static constexpr size_t SGD_M0M = 11;
-static constexpr size_t SGD_P0M = 12;
-static constexpr size_t SGD_M0P = 13;
-static constexpr size_t SGD_0PP = 14;
-static constexpr size_t SGD_0MM = 15;
-static constexpr size_t SGD_0PM = 16;
-static constexpr size_t SGD_0MP = 17;
-static constexpr size_t SGD_PPP = 18;
-static constexpr size_t SGD_MPP = 19;
-static constexpr size_t SGD_PMP = 20;
-static constexpr size_t SGD_MMP = 21;
-static constexpr size_t SGD_PPM = 22;
-static constexpr size_t SGD_MPM = 23;
-static constexpr size_t SGD_PMM = 24;
-static constexpr size_t SGD_MMM = 25;
-
-struct countersForPointerChasing
-{
-    uint counterInverse;
-    uint counterX;
-    uint counterY;
-    uint counterZ;
-};
-
-const std::map<const size_t, const countersForPointerChasing> mapForPointerChasing = 
-{
-    {DIR_000, countersForPointerChasing{0, 0, 0, 0}},
-    {DIR_P00, countersForPointerChasing{0, 1, 0, 0}},
-    {DIR_M00, countersForPointerChasing{1, 0, 1, 1}},
-    {DIR_0P0, countersForPointerChasing{0, 0, 1, 0}},
-    {DIR_0M0, countersForPointerChasing{1, 1, 0, 1}},
-    {DIR_00P, countersForPointerChasing{0, 0, 0, 1}},
-    {DIR_00M, countersForPointerChasing{1, 1, 1, 0}},
-
-    {DIR_PP0, countersForPointerChasing{0, 1, 1, 0}},
-    {DIR_MM0, countersForPointerChasing{1, 0, 0, 1}},
-    {DIR_PM0, countersForPointerChasing{1, 2, 0, 1}},
-    {DIR_MP0, countersForPointerChasing{1, 0, 2, 1}},
-    {DIR_P0P, countersForPointerChasing{0, 1, 0, 1}},
-    {DIR_M0M, countersForPointerChasing{1, 0, 1, 0}},
-    {DIR_P0M, countersForPointerChasing{1, 2, 1, 0}},
-    {DIR_M0P, countersForPointerChasing{1, 0, 1, 2}},
-    {DIR_0PP, countersForPointerChasing{0, 0, 1, 1}},
-    {DIR_0MM, countersForPointerChasing{1, 1, 0, 0}},
-    {DIR_0PM, countersForPointerChasing{1, 1, 2, 0}},
-    {DIR_0MP, countersForPointerChasing{1, 1, 0, 2}},
-
-    {DIR_PPP, countersForPointerChasing{0, 1, 1, 1}},
-    {DIR_MPP, countersForPointerChasing{1, 0, 2, 2}},
-    {DIR_PMP, countersForPointerChasing{1, 2, 0, 2}},
-    {DIR_MMP, countersForPointerChasing{1, 0, 0, 2}},
-    {DIR_PPM, countersForPointerChasing{1, 2, 2, 0}},
-    {DIR_MPM, countersForPointerChasing{1, 0, 2, 0}},
-    {DIR_PMM, countersForPointerChasing{1, 2, 0, 0}},
-    {DIR_MMM, countersForPointerChasing{1, 0, 0, 0}}
-};
-
-
-
-// used in the CPU version
-// static constexpr int INV_P00 = DIR_M00;
-// static constexpr int INV_M00 = DIR_P00;
-// static constexpr int INV_0P0 = DIR_0M0;
-// static constexpr int INV_0M0 = DIR_0P0;
-// static constexpr int INV_00P = DIR_00M;
-// static constexpr int INV_00M = DIR_00P;
-// static constexpr int INV_PP0 = DIR_MM0;
-// static constexpr int INV_MM0 = DIR_PP0;
-// static constexpr int INV_PM0 = DIR_MP0;
-// static constexpr int INV_MP0 = DIR_PM0;
-// static constexpr int INV_P0P = DIR_M0M;
-// static constexpr int INV_M0M = DIR_P0P;
-// static constexpr int INV_P0M = DIR_M0P;
-// static constexpr int INV_M0P = DIR_P0M;
-// static constexpr int INV_0PP = DIR_0MM;
-// static constexpr int INV_0MM = DIR_0PP;
-// static constexpr int INV_0PM = DIR_0MP;
-// static constexpr int INV_0MP = DIR_0PM;
-// static constexpr int INV_PPP = DIR_MMM;
-// static constexpr int INV_MPP = DIR_PMM;
-// static constexpr int INV_PMP = DIR_MPM;
-// static constexpr int INV_MMP = DIR_PPM;
-// static constexpr int INV_PPM = DIR_MMP;
-// static constexpr int INV_MPM = DIR_PMP;
-// static constexpr int INV_PMM = DIR_MPP;
-// static constexpr int INV_MMM = DIR_PPP;
-
-// static constexpr int SGD_P00 = 0;
-// static constexpr int SGD_M00 = 1;
-// static constexpr int SGD_0P0 = 2;
-// static constexpr int SGD_0M0 = 3;
-// static constexpr int SGD_00P = 4;
-// static constexpr int SGD_00M = 5;
-// static constexpr int SGD_PP0 = 6;
-// static constexpr int SGD_MM0 = 7;
-// static constexpr int SGD_PM0 = 8;
-// static constexpr int SGD_MP0 = 9;
-// static constexpr int SGD_P0P = 10;
-// static constexpr int SGD_M0M = 11;
-// static constexpr int SGD_P0M = 12;
-// static constexpr int SGD_M0P = 13;
-// static constexpr int SGD_0PP = 14;
-// static constexpr int SGD_0MM = 15;
-// static constexpr int SGD_0PM = 16;
-// static constexpr int SGD_0MP = 17;
-// static constexpr int SGD_PPP = 18;
-// static constexpr int SGD_MPP = 19;
-// static constexpr int SGD_PMP = 20;
-// static constexpr int SGD_MMP = 21;
-// static constexpr int SGD_PPM = 22;
-// static constexpr int SGD_MPM = 23;
-// static constexpr int SGD_PMM = 24;
-// static constexpr int SGD_MMM = 25;
-
-
-// DEPRECATED
-static constexpr int ZZZ = DIR_000;
-static constexpr int PZZ = DIR_P00;
-static constexpr int MZZ = DIR_M00;
-static constexpr int ZPZ = DIR_0P0;
-static constexpr int ZMZ = DIR_0M0;
-static constexpr int ZZP = DIR_00P;
-static constexpr int ZZM = DIR_00M;
-static constexpr int PPZ = DIR_PP0;
-static constexpr int MMZ = DIR_MM0;
-static constexpr int PMZ = DIR_PM0;
-static constexpr int MPZ = DIR_MP0;
-static constexpr int PZP = DIR_P0P;
-static constexpr int MZM = DIR_M0M;
-static constexpr int PZM = DIR_P0M;
-static constexpr int MZP = DIR_M0P;
-static constexpr int ZPP = DIR_0PP;
-static constexpr int ZMM = DIR_0MM;
-static constexpr int ZPM = DIR_0PM;
-static constexpr int ZMP = DIR_0MP;
-static constexpr int PPP = DIR_PPP;
-static constexpr int MPP = DIR_MPP;
-static constexpr int PMP = DIR_PMP;
-static constexpr int MMP = DIR_MMP;
-static constexpr int PPM = DIR_PPM;
-static constexpr int MPM = DIR_MPM;
-static constexpr int PMM = DIR_PMM;
-static constexpr int MMM = DIR_MMM;
-}
+static constexpr size_t d000 = 0;
+static constexpr size_t dP00 = 1;
+static constexpr size_t dM00 = 2;
+static constexpr size_t d0P0 = 3;
+static constexpr size_t d0M0 = 4;
+static constexpr size_t d00P = 5;
+static constexpr size_t d00M = 6;
+static constexpr size_t dPP0 = 7;
+static constexpr size_t dMM0 = 8;
+static constexpr size_t dPM0 = 9;
+static constexpr size_t dMP0 = 10;
+static constexpr size_t dP0P = 11;
+static constexpr size_t dM0M = 12;
+static constexpr size_t dP0M = 13;
+static constexpr size_t dM0P = 14;
+static constexpr size_t d0PP = 15;
+static constexpr size_t d0MM = 16;
+static constexpr size_t d0PM = 17;
+static constexpr size_t d0MP = 18;
+static constexpr size_t dPPP = 19;
+static constexpr size_t dMPP = 20;
+static constexpr size_t dPMP = 21;
+static constexpr size_t dMMP = 22;
+static constexpr size_t dPPM = 23;
+static constexpr size_t dMPM = 24;
+static constexpr size_t dPMM = 25;
+static constexpr size_t dMMM = 26;
+
+static constexpr size_t iP00 = dM00;
+static constexpr size_t iM00 = dP00;
+static constexpr size_t i0P0 = d0M0;
+static constexpr size_t i0M0 = d0P0;
+static constexpr size_t i00P = d00M;
+static constexpr size_t i00M = d00P;
+static constexpr size_t iPP0 = dMM0;
+static constexpr size_t iMM0 = dPP0;
+static constexpr size_t iPM0 = dMP0;
+static constexpr size_t iMP0 = dPM0;
+static constexpr size_t iP0P = dM0M;
+static constexpr size_t iM0M = dP0P;
+static constexpr size_t iP0M = dM0P;
+static constexpr size_t iM0P = dP0M;
+static constexpr size_t i0PP = d0MM;
+static constexpr size_t i0MM = d0PP;
+static constexpr size_t i0PM = d0MP;
+static constexpr size_t i0MP = d0PM;
+static constexpr size_t iPPP = dMMM;
+static constexpr size_t iMPP = dPMM;
+static constexpr size_t iPMP = dMPM;
+static constexpr size_t iMMP = dPPM;
+static constexpr size_t iPPM = dMMP;
+static constexpr size_t iMPM = dPMP;
+static constexpr size_t iPMM = dMPP;
+static constexpr size_t iMMM = dPPP;
+
+} // namespace vf::lbm::dir
 #endif
diff --git a/src/lbm/interpolation/InterpolationCoefficients.h b/src/lbm/interpolation/InterpolationCoefficients.h
index 70e38d57709247f7263dd8f7f4d93a624a0e8ab2..e657e72d0c49ba67ee479c0e902ebee974cadb2c 100644
--- a/src/lbm/interpolation/InterpolationCoefficients.h
+++ b/src/lbm/interpolation/InterpolationCoefficients.h
@@ -93,33 +93,33 @@ struct MomentsOnSourceNode
 
     __host__ __device__ void calculate(const real* const f, const real omega, real forceX, real forceY, real forceZ)
     {
-        // const real f_000 = f[dir::DIR_000];
-        const real fP00 = f[dir::DIR_P00];
-        const real fM00 = f[dir::DIR_M00];
-        const real f0P0 = f[dir::DIR_0P0];
-        const real f0M0 = f[dir::DIR_0M0];
-        const real f00P = f[dir::DIR_00P];
-        const real f00M = f[dir::DIR_00M];
-        const real fPP0 = f[dir::DIR_PP0];
-        const real fMM0 = f[dir::DIR_MM0];
-        const real fPM0 = f[dir::DIR_PM0];
-        const real fMP0 = f[dir::DIR_MP0];
-        const real fP0P = f[dir::DIR_P0P];
-        const real fM0M = f[dir::DIR_M0M];
-        const real fP0M = f[dir::DIR_P0M];
-        const real fM0P = f[dir::DIR_M0P];
-        const real f0PP = f[dir::DIR_0PP];
-        const real f0MM = f[dir::DIR_0MM];
-        const real f0PM = f[dir::DIR_0PM];
-        const real f0MP = f[dir::DIR_0MP];
-        const real fPPP = f[dir::DIR_PPP];
-        const real fMPP = f[dir::DIR_MPP];
-        const real fPMP = f[dir::DIR_PMP];
-        const real fMMP = f[dir::DIR_MMP];
-        const real fPPM = f[dir::DIR_PPM];
-        const real fMPM = f[dir::DIR_MPM];
-        const real fPMM = f[dir::DIR_PMM];
-        const real fMMM = f[dir::DIR_MMM];
+        // const real f_000 = f[dir::d000];
+        const real fP00 = f[dir::dP00];
+        const real fM00 = f[dir::dM00];
+        const real f0P0 = f[dir::d0P0];
+        const real f0M0 = f[dir::d0M0];
+        const real f00P = f[dir::d00P];
+        const real f00M = f[dir::d00M];
+        const real fPP0 = f[dir::dPP0];
+        const real fMM0 = f[dir::dMM0];
+        const real fPM0 = f[dir::dPM0];
+        const real fMP0 = f[dir::dMP0];
+        const real fP0P = f[dir::dP0P];
+        const real fM0M = f[dir::dM0M];
+        const real fP0M = f[dir::dP0M];
+        const real fM0P = f[dir::dM0P];
+        const real f0PP = f[dir::d0PP];
+        const real f0MM = f[dir::d0MM];
+        const real f0PM = f[dir::d0PM];
+        const real f0MP = f[dir::d0MP];
+        const real fPPP = f[dir::dPPP];
+        const real fMPP = f[dir::dMPP];
+        const real fPMP = f[dir::dPMP];
+        const real fMMP = f[dir::dMMP];
+        const real fPPM = f[dir::dPPM];
+        const real fMPM = f[dir::dMPM];
+        const real fPMM = f[dir::dPMM];
+        const real fMMM = f[dir::dMMM];
 
         real oneOverRho;
         getCompressibleMacroscopicValues(f, this->drho, oneOverRho, this->velocityX, this->velocityY, this->velocityZ);
diff --git a/src/lbm/refinement/InterpolationCF.h b/src/lbm/refinement/InterpolationCF.h
index fb08d3c12502717c2d8fec1ac81064405bd89cd6..49f91fdc6a7b5c8760b99a651b8affbf39d85172 100644
--- a/src/lbm/refinement/InterpolationCF.h
+++ b/src/lbm/refinement/InterpolationCF.h
@@ -273,33 +273,33 @@ inline __host__ __device__ void interpolateCF(real* const f, const real& omegaF,
     backwardInverseChimeraWithK(m210, m211, m212, vvz, vzsq, c9o1,  c1o9);
     backwardInverseChimeraWithK(m220, m221, m222, vvz, vzsq, c36o1, c1o36);
 
-    f[DIR_000] = f000;
-    f[DIR_P00] = fP00;
-    f[DIR_M00] = fM00;
-    f[DIR_0P0] = f0P0;
-    f[DIR_0M0] = f0M0;
-    f[DIR_00P] = f00P;
-    f[DIR_00M] = f00M;
-    f[DIR_PP0] = fPP0;
-    f[DIR_MM0] = fMM0;
-    f[DIR_PM0] = fPM0;
-    f[DIR_MP0] = fMP0;
-    f[DIR_P0P] = fP0P;
-    f[DIR_M0M] = fM0M;
-    f[DIR_P0M] = fP0M;
-    f[DIR_M0P] = fM0P;
-    f[DIR_0PP] = f0PP;
-    f[DIR_0MM] = f0MM;
-    f[DIR_0PM] = f0PM;
-    f[DIR_0MP] = f0MP;
-    f[DIR_PPP] = fPPP;
-    f[DIR_MPP] = fMPP;
-    f[DIR_PMP] = fPMP;
-    f[DIR_MMP] = fMMP;
-    f[DIR_PPM] = fPPM;
-    f[DIR_MPM] = fMPM;
-    f[DIR_PMM] = fPMM;
-    f[DIR_MMM] = fMMM;
+    f[dir::d000] = f000;
+    f[dP00] = fP00;
+    f[dM00] = fM00;
+    f[d0P0] = f0P0;
+    f[d0M0] = f0M0;
+    f[d00P] = f00P;
+    f[d00M] = f00M;
+    f[dPP0] = fPP0;
+    f[dMM0] = fMM0;
+    f[dPM0] = fPM0;
+    f[dMP0] = fMP0;
+    f[dP0P] = fP0P;
+    f[dM0M] = fM0M;
+    f[dP0M] = fP0M;
+    f[dM0P] = fM0P;
+    f[d0PP] = f0PP;
+    f[d0MM] = f0MM;
+    f[d0PM] = f0PM;
+    f[d0MP] = f0MP;
+    f[dPPP] = fPPP;
+    f[dMPP] = fMPP;
+    f[dPMP] = fPMP;
+    f[dMMP] = fMMP;
+    f[dPPM] = fPPM;
+    f[dMPM] = fMPM;
+    f[dPMM] = fPMM;
+    f[dMMM] = fMMM;
 }
 
 
diff --git a/src/lbm/refinement/InterpolationFC.h b/src/lbm/refinement/InterpolationFC.h
index 63ed388dbe076136702491d345bc2987703795c9..4f27978df257b641514c8486f39769eaef71fa3d 100644
--- a/src/lbm/refinement/InterpolationFC.h
+++ b/src/lbm/refinement/InterpolationFC.h
@@ -230,33 +230,33 @@ inline __host__ __device__ void interpolateFC(real* const f, const real epsnew,
     backwardInverseChimeraWithK(m210, m211, m212, vvz, vzsq, c9o1,  c1o9);
     backwardInverseChimeraWithK(m220, m221, m222, vvz, vzsq, c36o1, c1o36);
 
-    f[DIR_000] = f000;
-    f[DIR_P00] = fP00;
-    f[DIR_M00] = fM00;
-    f[DIR_0P0] = f0P0;
-    f[DIR_0M0] = f0M0;
-    f[DIR_00P] = f00P;
-    f[DIR_00M] = f00M;
-    f[DIR_PP0] = fPP0;
-    f[DIR_MM0] = fMM0;
-    f[DIR_PM0] = fPM0;
-    f[DIR_MP0] = fMP0;
-    f[DIR_P0P] = fP0P;
-    f[DIR_M0M] = fM0M;
-    f[DIR_P0M] = fP0M;
-    f[DIR_M0P] = fM0P;
-    f[DIR_0PP] = f0PP;
-    f[DIR_0MM] = f0MM;
-    f[DIR_0PM] = f0PM;
-    f[DIR_0MP] = f0MP;
-    f[DIR_PPP] = fPPP;
-    f[DIR_MPP] = fMPP;
-    f[DIR_PMP] = fPMP;
-    f[DIR_MMP] = fMMP;
-    f[DIR_PPM] = fPPM;
-    f[DIR_MPM] = fMPM;
-    f[DIR_PMM] = fPMM;
-    f[DIR_MMM] = fMMM;
+    f[d000] = f000;
+    f[dP00] = fP00;
+    f[dM00] = fM00;
+    f[d0P0] = f0P0;
+    f[d0M0] = f0M0;
+    f[d00P] = f00P;
+    f[d00M] = f00M;
+    f[dPP0] = fPP0;
+    f[dMM0] = fMM0;
+    f[dPM0] = fPM0;
+    f[dMP0] = fMP0;
+    f[dP0P] = fP0P;
+    f[dM0M] = fM0M;
+    f[dP0M] = fP0M;
+    f[dM0P] = fM0P;
+    f[d0PP] = f0PP;
+    f[d0MM] = f0MM;
+    f[d0PM] = f0PM;
+    f[d0MP] = f0MP;
+    f[dPPP] = fPPP;
+    f[dMPP] = fMPP;
+    f[dPMP] = fPMP;
+    f[dMMP] = fMMP;
+    f[dPPM] = fPPM;
+    f[dMPM] = fMPM;
+    f[dPMM] = fPMM;
+    f[dMMM] = fMMM;
 }
 
 }
diff --git a/src/logger/Logger.h b/src/logger/Logger.h
index f3c41c0e3bfb8aa12c94677040273fdaaaff64a3..01c84b4315c668d318d0d71432731f378d602e91 100644
--- a/src/logger/Logger.h
+++ b/src/logger/Logger.h
@@ -37,7 +37,7 @@
 // spdlog supports 5 log level, which can be changed at runtime e.g.:
 // spdlog::set_level(spdlog::level::debug)
 // The default log level is set to trace. Supported levels: trace < debug < info < warning < critical
-// 
+//
 // The logging is realized in 3 different log sinks:
 // 1. colored console output
 // 2. a daily log file
diff --git a/utilities/DirRename.py b/utilities/DirRename.py
index 2d0bd0541c5b86b1ca9746b8e7e6beb2cc7ef005..61c74923051f4a2a7cdb4b02d1e7f9a5bdb31156 100644
--- a/utilities/DirRename.py
+++ b/utilities/DirRename.py
@@ -12,7 +12,7 @@ fin = open(filename, "rt")
 #read file contents to string
 data = fin.read()
 #replace all occurrences of the required string
-data = data.replace('[REST]','[DIR_000]')
+data = data.replace('[REST]','[d000]')
 data = data.replace('[TNE]', '[DIR_PPP]')
 data = data.replace('[TNW]', '[DIR_MPP]')
 data = data.replace('[TSE]', '[DIR_PMP]')
@@ -45,16 +45,16 @@ data = data.replace('[TN]', '[DIR_0PP]')
 data = data.replace('[BS]', '[DIR_0MM]')
 data = data.replace('[BN]', '[DIR_0PM]')
 data = data.replace('[TS]', '[DIR_0MP]')
-data = data.replace('[E]',   '[DIR_P00]')
-data = data.replace('[W]',   '[DIR_M00]')
+data = data.replace('[E]',   '[dP00]')
+data = data.replace('[W]',   '[dM00]')
 data = data.replace('[N]',   '[DIR_0P0]')
 data = data.replace('[S]',   '[DIR_0M0]')
 data = data.replace('[T]',   '[DIR_00P]')
 data = data.replace('[B]',   '[DIR_00M]')
 
-# data = data.replace('[REST]','[DIR_000]')
-# data = data.replace('[E  ]', '[DIR_P00]')
-# data = data.replace('[W  ]', '[DIR_M00]')
+# data = data.replace('[REST]','[d000]')
+# data = data.replace('[E  ]', '[dP00]')
+# data = data.replace('[W  ]', '[dM00]')
 # data = data.replace('[N  ]', '[DIR_0P0]')
 # data = data.replace('[S  ]', '[DIR_0M0]')
 # data = data.replace('[T  ]', '[DIR_00P]')
@@ -80,9 +80,9 @@ data = data.replace('[B]',   '[DIR_00M]')
 # data = data.replace('[BSE]', '[DIR_PMM]')
 # data = data.replace('[BSW]', '[DIR_MMM]')
 
-# data = data.replace('D3Q27System::REST','[DIR_000]')
-# data = data.replace('D3Q27System::E', '[DIR_P00]')
-# data = data.replace('D3Q27System::W', '[DIR_M00]')
+# data = data.replace('D3Q27System::REST','[d000]')
+# data = data.replace('D3Q27System::E', '[dP00]')
+# data = data.replace('D3Q27System::W', '[dM00]')
 # data = data.replace('D3Q27System::N', '[DIR_0P0]')
 # data = data.replace('D3Q27System::S', '[DIR_0M0]')
 # data = data.replace('D3Q27System::T', '[DIR_00P]')
@@ -108,7 +108,7 @@ data = data.replace('[B]',   '[DIR_00M]')
 # data = data.replace('D3Q27System::BSE', '[DIR_PMM]')
 # data = data.replace('D3Q27System::BSW', '[DIR_MMM]')
 
-# data = data.replace('REST)','DIR_000)')
+# data = data.replace('REST)','d000)')
 # data = data.replace('TNE)', 'DIR_PPP)')
 # data = data.replace('TNW)', 'DIR_MPP)')
 # data = data.replace('TSE)', 'DIR_PMP)')
@@ -129,14 +129,14 @@ data = data.replace('[B]',   '[DIR_00M]')
 # data = data.replace('BS)',  'DIR_0MM)')
 # data = data.replace('BN)',  'DIR_0PM)')
 # data = data.replace('TS)',  'DIR_0MP)')
-# data = data.replace('E)',   'DIR_P00)')
-# data = data.replace('W)',   'DIR_M00)')
+# data = data.replace('E)',   'dP00)')
+# data = data.replace('W)',   'dM00)')
 # data = data.replace('N)',   'DIR_0P0)')
 # data = data.replace('S)',   'DIR_0M0)')
 # data = data.replace('T)',   'DIR_00P)')
 # data = data.replace('B)',   'DIR_00M)')
 
-# data = data.replace('REST','DIR_000')
+# data = data.replace('REST','d000')
 # data = data.replace('TNE', 'DIR_PPP')
 # data = data.replace('TNW', 'DIR_MPP')
 # data = data.replace('TSE', 'DIR_PMP')
@@ -157,8 +157,8 @@ data = data.replace('[B]',   '[DIR_00M]')
 # data = data.replace('BS',  'DIR_0MM')
 # data = data.replace('BN',  'DIR_0PM')
 # data = data.replace('TS',  'DIR_0MP')
-# data = data.replace('E',   'DIR_P00')
-# data = data.replace('W',   'DIR_M00')
+# data = data.replace('E',   'dP00')
+# data = data.replace('W',   'dM00')
 # data = data.replace('N',   'DIR_0P0')
 # data = data.replace('S',   'DIR_0M0')
 # data = data.replace('T',   'DIR_00P')